SQL语法教材文档格式.docx
《SQL语法教材文档格式.docx》由会员分享,可在线阅读,更多相关《SQL语法教材文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
4.更新数据
三、常用函数
1.汇总函数
2.字符串函数
四、游标CURSOR
1.CURSOR定义的基本语法
2.打开CURSOR
3.提取CURSOR中的记录
4.使用WHILE循环语句遍历CURSOR
5.释放CURSOR
五、创建临时表
六、创建存储过程(CREATEPROCDURE)
1.创建存储过程的基本语法
2.删除存储过程
3.执行存储过程
4.定义变量
5.为变量赋值
6.一个典型的实例
一、利用SELECT语句选取资料
1.SELECT语法基本构架
SELECT字段1,字段2,…字段n
FROM表1,表2,…表n
WHERE条件
GROUPBY字段1,字段2,…字段n
ORDERBY字段1,字段2,…字段n
字段
可以是数据表中所定义的字段,也可以是一衍生字段。
在SELECT语句中可以一次选择数个字段,但每个字段之间必须以逗号隔开。
数据表
在SELECT语句中可以一次指定一个或数个数据表,当指定一个以上表时就牵涉到表之间的关联(Join)。
条件
资料选取时的设定条件,可以设定大于,小于或等于等基本判断条件,而且可以指定多个条件,每个条件之间以‘AND’或‘OR’逻辑运算符连接。
ORDERBY、GROUPBY
对选取的数据进行排序(Sorting)和分组(Grouping)等动作。
例1:
想要知道库存数据为负数且使用中物料有哪些?
EX:
SELECTDISTINCTpt_part,pt_desc1,pt_desc2,pt_um
FROMpt_mstr,ld_det
WHEREpt_part=ld_partAND
Pt_status=1AND(使用中)
Ld_qty_oh<
0(库存为负)
ORDERBYpt_part(按物料编码排序)
2.选取全部数据
要浏览整张数据表内的数据时,只要用SELECT*即可。
SELECT*FROMpt_mstr
若只想选取表的部份字段时,则在SELECT后加字段名单,可以指定多个字段,每个字段之间必须用逗号分开。
SELECTpt_part,pt_desc1,pt_umFROMpt_mstr
4.选取不重复的资料。
有时数据表中某些字段含有重复值,在选取时如果不想看到重复的值,可以在SELECT语句后加上DISTINCT语句。
例1中就用到此语句:
库存明细表(ld_det)中同一物料可能存在多个库位的库存数量为负。
在SELECT语句中除了可以以数据表中的字段作为选取对象外,也可以自创衍生字段作为SELECT语句的输出字段。
衍生字段可以是字段间经由一般加减乘除运算产生外,也可以由SQLServer所提供的内建函数(function)产生。
衍生字段可以用自定义字段名=或as自定义字段名进行
重新命名。
SELECTpt_part,pt_desc=(pt_desc1+pt_desc2)
FROMpt_mstr
或
SELECTpt_part,(pt_desc1+pt_desc2)aspt_desc
选取所要的资料后,可以对这些资料以一个或多个字段组合作为键值依序排列,排序的方向可以由小到大(ASC:
ascending)或由大到小(DESC:
descending)排序,若未指定ASC或DESC,则系统内定为由小到大(ASC)。
注:
当作排序的键值一定要出现在所选取的字段清单中。
SELECT*
FROMpt_mstr
ORDERBYpt_partDESC
可以利用GROUPBY子句对SELECT语句所选取的资料作分组,分组后资料可以显示出来,或利用SUM(),AVG()等汇总函数对特定字段计算每组资料的总和或平均值。
例2:
想知道供应商送货总金额
SELECTprh_vend,sum(prh_qty_rcvd*prh_pur_cost)asprh_amt
FROMprh_hist
GROUPBYprh_vend
GROUPBY子句后经常会配合用HAVING子句作为每一组的筛选条件。
例3:
想知道送货总金额大于100000的供应商
HAVINGsum(prh_qty_rcvd*prh_pur_cost)>
100000
ORDERBYprh_vend
若只想选取数据表内的部分资料时,必须加上选择条件,也就是在SELECT语句中加上WHERE子句,在WHERE子句中以比较运算符来构成选择条件。
以下是可以在WHERE子句中使用的比较运算符:
=等于
!
=或<
>
不等于
大于
<
小于
=大于等于
=小于等于
BETWEEN介于..之间
NOTBETWEEN介于..之外
IN(NOTIN)字段值是否存在于清单内
ISNULL(ISNOTNULL)字段值是否为NULL
LIKE类似于
可以一次指定数个条件,每个条件间以逻辑运算符NOT,AND,OR连接条件判断的优先次序依次为:
NOT,AND,OR。
可使用括号来区分逻辑运算符的优先顺序。
当WHERE子句中指定条件使用了LIKE运算符,则可使用通配符代表任意字符,通配符主要有如下几个:
%任何多个字符(包括零个)的字符串
_(下划线)任何单个字符
[]指定范围([a-f])或集合([abcdef])中的任何单个字符
[^]不属于指定范围([a-f])或集合([abcdef])中的任何单个字
例4:
1)WHEREpt_partLIKE'
%200%'
查找出物料编码中任意位置包含200的所有物料
2)WHEREpt_partLIKE'
A01-100-00_'
查找出物料编码中以A01-100-00开头,最后一位为任意值的所有物料
3)WHEREpt_partLIKE'
[C-P]%'
查找出物料编码中以介于C与P之间的任何单个字符开头的所有物料
4)WHEREpt_partLIKE'
[^C-P]%'
查找出物料编码中不以介于C与P之间的任何单个字符开头的所有物料
10.数据表的关联JOIN
利用SELECT语句由不同的数据表中选取字段时,称之为对数据表的JOIN动作。
若选用的字段名称在JOIN数据表的两边皆存在,则必须以表名.字段名明确指定字段属于哪一张数据表。
JOIN并不限定只能针对两个表作为处理对象JOIN条件中所牵涉到的字段最好是索引字段,否则JOIN的速度会很慢。
使用别名
如果在每个字段名称前加上表名,则会使语句看起来很长,此时可使用较短的别名来代表数据表名称。
Self-Join
在表JOIN中并不是只有不同的表才可以JOIN,同一个表也可以和自已JOIN。
由于self-join牵涉到的是两个相同的表,因此可利用别名的方式把同一数据表做为不同的表来JOIN。
例5:
列出在库位R01中4月份的期末数量不等于5月份期初数量所有物料
SELECTa.inb_part,pt_desc1,pt_um,a.inb_qty_end,b.inb_qty_beg
FROMinb_histaJOINinb_histbONa.inb_site=b.inb_site
ANDa.inb_part=b.inb_part
ANDa.inb_loc=b.inb_loc
JOINpt_mstrONpt_part=a.inb_part
WHEREa.inb_loc=‘R01’
ANDa.inb_year=2005
ANDb.inb_year=2005
ANDa.inb_month=4
ANDb.inb_month=5
ANDa.inb_qty_end<
b.inb_qty_beg
Inb_hist(物料月结表)分别用a,b两个别名表示两个不同的表来JOIN
Outer-Join
以主表的每笔记录去匹配(match)附属表的字段,不论是否符合JOIN条件的记录都会选取出来,只是那些附属表中不符合条件的字段将会被置上NULL值。
语法如下:
FROM表1
{LEFT|RIGHT|INNER}JOIN表2ON<
条件>
当使用LEFTJOIN时,在左边的表为主表,右边的表为附属表,相反,使用RIGHTJOIN时,在右边的表为主表,左边的表为附属表,INNERJOIN则无主表与附属表之分,两表中条件都符合的记录才会被选取出来。
例6:
列出所有物料在地点1000,库位R01中的当前库存数量
SELECTpt_part,pt_desc1,pt_um,ld_qty_oh
FROMpt_mstrLEFTJOINld_detONld_site=‘1000’AND
Ld_loc=‘R01’AND
Ld_part=pt_part
ORDERBYpt_part
在库存表(ld_det)中不存在库存数的物料也会列出,
只是库存数(ld_qty_oh)为NULL值。
11.子查询(SubQuery)
当一SELECT语句放在SELECT,INSERT,UPDATE,DELETE语句中的WHERE子句中作为比较条件时,该SELECT语句就称之为子查询。
子查询的使用方法有如下三种样式:
SELECT…WHERE字段或运算式比较运算符[ANY|ALL](子查询)
SELECT…WHERE字段或运算式[NOT]IN(子查询)
SELECT…WHERE[NOT]EXISTS(子查询)
第一种样式:
只要主查询中的字段或运算式的值与子查询所得结果中之任一(ANY)或全部(ALL)资料符合比较条件,则主查询的结果为我们要的资料。
如省略关键词