首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • SQL 语法参考手册
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chaihuoniu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-05-15 16:29:03 楼主
    SQL 语法参考手册

    DB2 提供了关连式资料库的查询语言 SQL (Structured Query
    Language), 是一种非常
    口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都
    必须提供的,用以
    表示关连式的操作,包含了资料的定义(DDL)以及资料 的处
    理(DML)。SQL
    原来拼成 SEQUEL,这语言的原型以“系统 R“的名 字在 IBM 圣
    荷西实验室完成,经
    过 IBM 内部及其他的许多使用性及效率测试, 其结果相当令人满
    意,并决定在系统
    R 的技术基础发展出来 IBM 的产品。而 且美国国家标准学会
    (ANSI)及国际标准化
    组织(ISO 在 1987 遵循一个几乎 是以 IBM SQL 为基础的标准
    关连式资料语言定
    义。

    资料定义 DDL(Data Definition Language)

    资料定语言是指对资料的格式和形态下定义的语言,他是每个资料
    库要建立时候 时首
    先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主
    键、表格和 表格之间
    互相参考的关系等等,都是在开始的时候所必须规划好的。

    建表格:


    语法:
    CREATE TABLE table_name(
    column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
    column2 DATATYPE [NOT NULL],
    ...)
    说明 
    DATATYPE --是资料的格式,详见表。
    NUT NULL --可不可以允许资料有空的(尚未有资料填
    入)。
    PRIMARY KEY --是本表的主键。
    建表格的例子 。


    更改表格 


    ALTER TABLE table_name
    ADD COLUMN column_name DATATYPE
    说明 增加一个栏位(没有删除某个栏位的语法)
    ALTER TABLE table_name
    ADD PRIMARY KEY (column_name)
    说明 更改表得的定义把某个栏位设为主键
    ALTER TABLE table_name
    DROP PRIMARY KEY (column_name)
    说明 把主键的定义删除。
    更改表格例子


    建立索引 

    CREATE INDEX index_name ON table_name (column_name)
    说明 对某个表格的栏位建立索引以增加查询时的速度
    建立索引的例子


    删除 

    DROP table_name
    DROP index_name


    资料形态 DATATYPE

    SQL 的资料形态 DATATYPEs
    smallint
    16 位元的整数
    interger
    32 位元的整数
    decimal(p,s)
    p 精确值和 s 大小的十进位整数,精确值 p
    是指全 部有几个数
    (digits)
    大小值 s 是指小数点後有几位数。
    如果没有特别指定,则系 统会设为 p=5; s=0

    float
    32位元的实数
    double
    64位元的实数
    char(n)
    n 长度的字串,n不能超过 254
    varchar(n)
    长度不固定且其最大长度为 n 的字串,n不能
    超过 4000
    graphic(n)
    和 char(n) 一样,不过其单位是两个字元
    double-bytes, n不能超
    过 127。这个形态是为了支援两个字元长度的
    字体,例如中文

    vargraphic(n)
    可变长度且其最大长度为 n 的双字元字串,n
    不能超过 2000
    date
    包含了 年份、月份、日期.
    time
    包含了 小时、分钟、秒.
    timestamp
    包含了 年、月、日、时、分、秒、千分之一
    秒.


    资料操作 DML (Data Manipulation Language)

    资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加
    资料(insert)、 查
    询资料(query)、更改资料(update) 、删除资料(delete)四
    种模式,以下分 别介绍
    他们的语法:

    增加资料:


    INSERT INTO table_name (column1,column2,...)
    VALUES ( value1,value2, ...)
    说明:
    1.若没有指定column 系统则会按表格内的栏位顺序填入资

    2.栏位的资料形态和所填入的资料必须吻合
    3.table_name 也可以是景观 view_name


    INSERT INTO table_name (column1,column2,...)
    SELECT columnx,columny,... FROM another_table
    说明:也可以经过一个子查询(subquery)把别的表格的资
    料填入

    增加资料的例子

    查询资料:


    基本查询例子
    基本查询
    SELECT column1,columns2,...
    FROM table_name
    说明:把table_name 的特定栏位资料全部列出来
    SELECT *
    FROM table_name
    WHERE column1 = xxx
    [AND column2 > yyy] [OR column3 <> zzz]
    说明:
    1.'*'表示全部的栏位都列出来
    2.WHERE 之後是接条件式,把符合条件的资料列出来
    SELECT column1,column2
    FROM table_name
    ORDER BY column2 [DESC]
    说明:
    ORDER BY 是指定以某个栏位做排序,[DESC]是指从大到小
    排列,若
    没有指明,则是从小到大排列


    组合查询例子
    组合查询
    组合查询是指所查询得资料来源并不只有单一的表格,而是
    联合一个以上的表格才能够得到结果的。
    SELECT *
    FROM table1,table2
    WHERE table1.colum1=table2.column1
    说明:
    1.查询两个表格中其中 column1 值相同的资料
    2.当然两个表格相互比较的栏位,其资料形态必须相同
    3.一个复杂的查询其动用到的表格可能会很多个


    整合性查询的例子
    整合性的查询:
    SELECT COUNT (*)
    FROM table_name
    WHERE column_name = xxx
    说明:
    查询符合条件的资料共有几笔
    SELECT SUM(column1)
    FROM table_name
    说明:
    1.计算出总和,所选的栏位必须是可数的数字形态
    2.除此以外还有 AVG() 是计算平均、MAX()、MIN()
    计算最大最小值的整合性查询
    SELECT column1,AVG(column2)
    FROM table_name
    GROUP BY column1
    HAVING AVG(column2) > xxx
    说明:
    1.GROUP BY: 以column1 为一组计算 column2 的平均值
    必须和 AVG、SUM 等整合性查询的关键字一起使用
    2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制


    复合性查询的例子
    复合性的查询
    SELECT *
    FROM table_name1
    WHERE EXISTS (
    SELECT *
    FROM table_name2
    WHERE conditions )
    说明:
    1.WHERE 的 conditions 可以是另外一个的 query
    2.EXISTS 在此是指存在与否
    SELECT *
    FROM table_name1
    WHERE column1 IN (
    SELECT column1
    FROM table_name2
    WHERE conditions )
    说明 
    1. IN 後面接的是一个集合,表示column1 存在集合里面
    2. SELECT 出来的资料形态必须符合 column1


    其他查询的例子
    其他查询
    SELECT *
    FROM table_name1
    WHERE column1 LIKE 'x%'
    说明:
    1.LIKE 必须和後面的'x%' 相呼应表示以 x为开头的字串
    SELECT *
    FROM table_name1
    WHERE column1 IN ('xxx','yyy',..)
    说明 
    1. IN 後面接的是一个集合,表示column1 存在集合里面
    SELECT *
    FROM table_name1
    WHERE column1 BETWEEN xx AND yy
    说明 
    1. BETWEEN 表示 column1 的值介於 xx 和 yy 之间


    更改资料:


    UPDATE table_name
    SET column1='xxx'
    WHERE conditoins
    说明:
    1.更改某个栏位设定其值为'xxx'
    2.conditions 是所要符合的条件、若没有 WHERE 则
    整个 table 的那个栏位都会全部被更改

    更改资料的例子

    删除资料:


    DELETE FROM table_name
    WHERE conditions
    说明:删除符合条件的资料

    删除资料的例子

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • charry0110
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-15 16:55:071楼 得分:0
    ^_^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kennywh86
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 14:30:192楼 得分:0
    ^_^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jbnbear
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-22 12:48:343楼 得分:0
    很有用,谢谢
    能不能提供更多的?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jin_ok
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-04 17:45:354楼 得分:0
    很有用,适合初学者
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yt_net
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-08 19:56:575楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cyzhang811
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-10 14:30:226楼 得分:0
    适合初学者
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • littleboys
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-10 19:18:387楼 得分:0
    ^_^  ^_^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lisl2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-12 15:12:518楼 得分:0
    掌声!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lisl2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-12 15:13:129楼 得分:0
    再掌声!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lisl2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-12 15:13:4510楼 得分:0
    还是掌声!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sanyou98
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-12 17:12:0011楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lisl2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-13 09:34:1112楼 得分:0
    回过头来接点分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lisl2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-13 09:34:3213楼 得分:0
    顶帖,让更多的人看到。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yun_feiyang_77
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-13 21:44:0314楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • l_wenb
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-14 12:21:2415楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zwj0712
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-15 12:46:1216楼 得分:0
    基础的东西不一定要记了,等你天天用的话操作到数据库就知道了。熟能生巧吧!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jorson_zhou
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-16 14:13:5617楼 得分:0
    接分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jbnbear
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-19 15:18:0518楼 得分:0
    请教如何将db2中的数字显示成百分比?例如0.4512转换成15.12%
    SQL code
    select m.BED_RATE as "病床占有率%" from met_cas_movement m



    得出
    病床占有率
    0.8712
    0.7532

    如何得到

    病床占有率
    87.12%
    75.32%

    解决了有100分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gggrrzzf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-06-22 22:26:0419楼 得分:0
    顶贴,让更多的人看到
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved