1、第6章SQL查询语句基础第6章SQL查询语句基础本章要点:掌握简单的Transact-SQL查询语句。学会对查询结果进行分组统计、合计和排序等复杂的SELECT语句操作。6.1 SELECT条件歹U表6.2 FROM子句6.3 WHERE子句6.4 统计6.5 利用杳询结果创建新表6.6 使用UNION运算符实现多查询联合6.7 连接6.8 子查询SQL Server 2000网络数据库教程第6章SQL查询语句基础6.1 SELECT条件歹I 表数据查询是数据库应用的核心功能一、基本结构Select Al,A2,AnFrom rl,r2,,rmWhere P;A2,Xrl X.X rm)SQL
2、 Server 2000网络数据库教程第6章SQL查询语句基础Select语句的含义对From子句中的各关系,作笛卡儿积(X。对 子句中的逻辑表达式进行选择(。)运算,找出符合条件的元组。根据 子句中的属性列表,对上述结果作投影()操作。结果集,查询操作的对象是关系,结果还是一个关系,是一个结果集。SQL Server 2000网络数据库教程第6章SQL查询语句基础SELECT条件歹U表 Select子句(选择表中若干列)Where子句(选择表中若干行)Order By子句(对查询结果排序)聚集函数SQL Server 2000网络数据库教程第6章SQL查询语句基础SELECT条件歹!表选择表
3、中的若干列查询全部列 星号*:按关系模式中属性的顺序排列。显式列出属性名:按用户顺序排列。显示雇员表中所有列的数据。SELECT*from 雇员 显示雇员表中的雇员ID和姓名列的内容 SELECT雇员ID,姓名From雇员SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.1下面语句显示雇员表中所有列的数据。SELECT*from 雇员结果如图6-1所示:雇员工D1姓名取务12-3 4-5 6 7 8 9123456789颖伟芳建军嘛士庾湾 张王郑西到装yl木销售代表副怎裁(销售)销售代表杰销售代表销售运理 销售代表膜销售代表玫内部销售协调员眉销售代表图6-1雇员表中所有
4、列的数据显示SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.2显示雇员表中的雇员ID和姓名列的内容 SELECT雇员ID,姓名From雇员o结果如图6-2所示:图6-2雇员表中雇员ID和姓名列的内容显示SQL Server 2000网络数据库教程第6章SQL查询语句基础SELECT条件列表一更名为结果集中的某个属性改名 使结果集更具可读性其格式为;列标题=列名或者:列名AS列标题SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.3在雇员表中使用英文employeeid代替雇员 ID,用name代替姓名显示列标题。SELECT employeei
5、d=雇员ID,姓名 AS name From 雇员结果如图6-3所示:e23456789123456789颖伟君箜空警 小基郑箸嘉*图6-3使用英文显示雇员表中列标题SQL Server 2000网络数据库教程第6章SQL查询语句基础SELECT条件歹U表一选择表中的若干元组消除取值重复的行Select子句的缺省情况是保留重复元组(ALL),可用Distinct去除重复元组例6.4在雇员表中使用缺省设置显示“职务”歹小SELECT职务From 雇员SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图64所示:与肖至肖一在美肖曾代养内含g与法一司员辛甫曾代美MH丰百安1,
6、弋定 鬲uw转车诗曾1弋差 年诗曾1弋春王里图6-4使用缺省设置显示雇员表职务列SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.5在雇员表中使用DISTINCT选项则可以删除职务列 重复的值。SELECT DISTINCT 职务 From 雇员结果如图65所示:1 副总裁(销售)二口内部销售由,调员3 i销售代表|w!销售经理图65雇员表中删除职务列重复值的结果返 0SQL Server 2000网络数据库教程第6章SQL查询语句基础6.2 FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视 图。在FROM子句中最多可指定16个表或视图,它们相 互
7、之间用逗号分开,如果这些表属于不同的数据库,可用数据库,所有者名称.对象格式加以限定。川 FROM子句同时指定多个表和视图的时,如果SELECT列 表中的列名在两个或两个以上的表和视图中存在,为 避免二义性,应使用对象名称限定这些列所属的表和 视图。SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.6在雇员表和订单表中同时有雇员ID列,根据 雇员ID,查询两个表中雇员的姓名和订购日期列,应使 用下面语句查询。Select姓名,订单.订购日期From雇员,订单Where雇员.雇员ID二订单.雇员ID结果如图6-6所示:SQL Server 2000网络数据库教程第6章SQ
8、L查询语句基础妊者 订购日期1格苹1996-07-04OO:OOzOO孑小科1996OT05OO:OO:OO3关B逞本199607Q8OO zOO:OO419960708OO:OO:OO旦关B建美19960709OO:OO zOO广*量1996OT1OOO:OOsOO7超车19960711OO SOO zOO8张:一.直1996OT12OO:OO zOO9-宰若1996OT15OO=OO:OO1O美B逞美1996OT16OO:OOsOO一张颖1996一071TOO zOO zOO1 2 关B磋本B 一 _ _.一 一1996OT18OO:OO:o13关营建本19960719OO:OO zOO1
9、4关g兔管本1996。719OO:OOsOO15刘际王攵1996OT22OO SOO zOO图66在两个表中的查询信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础在FROM子句中可为每个表或视图指定一个别名,别名紧跟在对象名称之后,之间用空格分隔,然后可 以使用别名引用表中各列。例6.7给雇员表和订单表分别指定g和d的别名,使用别名引用表。Select姓名,d.订购日期From雇员g,订单dWhere g.雇员ID二d.雇员IDSQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-7所示:t121 3赵孙郑率郑李赵张季郑张郑郑郑刘军林建芳建
10、芳军雪芳建颖建建建英杰杰 眉杰杰杰杰玫1996-07-04 00:00:001996-07-05 00:00:001996-07-081996-07-081996-07-091996-07-101996-07-111996-07-121996-07-151996-07-161996-07-171996-07-181996-07-191996-07-191996-07-2200:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:0000:00:00图6-7使用别名查
11、询信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础在缺省情况下,FROM子句不指定数据库名 称,查询的数据库为当前数据库。使用USE语 句可以将其他数据库设置为当前数据库,USE 语句的格式为:USE数据库名例6.8下面语句选择dzsw数据库为当前数据库:Use dzsw返 回SQL Server 2000网络数据库教程第6章SQL查询语句基础6.3 WHERE子句 SELECT语句中的WHERE子句用来指定查询条件。例6.9获得雇员表中职务为销售代表的人的雇员ID和 姓名。SELECT雇员ID,姓名From雇员Where职务=销售代表,SQL Server 200
12、0网络数据库教程第6章SQL查询语句基础结果如图6-8所示:.隹员工D 娃名1 _ 1 张新-_3 幸方口 _ 4 关际建三场4 I 6 孑小林B I T 金士且展已 9 号长杳笔图6-8查询职务为销售代表的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础Where子句运算符比较:=、V、=、v=、!=、v、!、!v、not+确定范围:Between A and B、Not Between A and B 确定集合:IN、NOT IN 字符匹配:LIKE,NOT LIKE 空值:IS NULL、IS NOT NULL 多重条件:AND、OR、NOTSQL Serve
13、r 2000网络数据库教程第6章SQL查询语句基础Where子句比较大小例6.10获得雇员ID大于等于3的所有职员的 雇员ID,姓名和职务。select雇员ID,姓名,职务from雇员where 雇员 ID=3SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-9所示:雇员工D妊名273456789李芳 销售代表郑建杰销售代表赵军 孑小林销售经理 销售代表金士睡销售代表刘英玫内部销售协调员张雪眉销售代表图6-9查询雇员ID大于等于3的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.n下面例子中从产品表中要获得单价大于 4.0美元典所
14、有产品名称,当前汇率为1人民币兑换 0.125美元。Select产品名称From产品Where 单价*0.1254.0SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6To所示:品二名毛亍瓷另11HD岸存量L1舌月蚀钙26-62913售国必醋486_!宿肉6O8426桂年食3407 1牛肉干3498 一:JW闵隹T261 口工肉6OI口奉亲11 71 1柄n偿;十11 T12落肉千T2013拈17k甲鸟6OI白*52 11|光明班型qT916年班造41 917山灌什31 718地望咨2241952220害也不第q2621_J4 二14图6-10查询产品表中单价大于4
15、美元的产品名称结果SQL Server 2000网络数据库教程第6章SQL查询语句基础Where子句确定范围 BETWEEN关键字指定WHERE子句的搜索范围,其格式为:表达式 BETWEEN X AND Y 查询时,它要求表达式的值大于等于X小于 等于Y。SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.12从产品表中获得单价在3040之间 的所有产品的单价,产品名称和库存量。Select单价,产品名称,库存量From产品Where 单价 between 30 and 40SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-11所示:1:产
16、品名秫库存量J_130.0000海鲜市分 152-J40.0000胡椒粉 631.0000 31H!38.0000德国奶酩86LLJ39.0000 猪肉 0*31.2300棉花糖 157 32.0000白妨能 932.8000盐水甲鸟 038.0000 白米 21山34.0000花奶能 191133.2500 黄豆 2212 136.0000黑奶酩 261音i34.8口口。酸奶能 14图6-n查询产品表中单价在30至40元之间的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础Where子句-确定集合 谓词IN可以用来查找属性值属于指定集合的元组。NOT IN用来查找
17、属性值不属于指定集合的元组。例6.13:获取订单表中订单ID等于10255或10262或 10249的所有列。Select*From订单Where 订单ID IN(10255,10262,10249)SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6T2所示:订靴耕口藏IP供应瓠;溅联 懒馥1J 10249 2 6 3 1996-07-05 00:00:00 1996-07-10 00:00:002 10255 1 9 8 W9HM2 00:00:00 1996-07T5 00:00:003 10262 5 8 10 1996-07-22 00:00:00 1996
18、07-25 00:00:00图6-12查询订单表中指定的订单ID值的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础操作符IN可以和布尔操作符NOT一起使用来查询所 获得的是在相应列中不包含任何所列出的数值的行。例6.14获取订单中订单ID既不是10255也不是 10262的所有列。Select*From订单Where 订单ID not IN(10255,10262)SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6T3所示:发货日期订单ID客户ID雇员ID:供应商ID订购日期LU102481551996-07-04 00:00:00
19、1996-07-1600:00:001102503461996-07-08 00:00:00 1996-07-1200:00:00|1025143101996-07-08 00:00:00 1996-07-1600:00:001025254291996-07-09 00:00:00 1996-07-1100:00:001025363251996-07-10 00:00:00 1996-07-1600:00:00。102547511996-07-11 00:00:00 1996-07-2300:00:00102568371996-07-15 00:00:00 1996-07-1700:00:00
20、81025794191996-07-16 00:00:00 1996-07-2200:00:0010258101111996-07-17 00:00:00 1996-07-2300:00:00JI1025914151996-07-18 00:00:00 1996-07-2500:00:00111026024171996-07-19 00:00:00 1996-07-29 00:00:00121026134201996-07-19 00:00:00 1996-07-30 00:00:00图6-13查询订单表中非指定订单ID值的信息结果SQL Server 2000网络数据库教程第6章SQL查询语
21、句基础Where子句-模式匹配符Like模式匹配符NOT LIKE常用于模糊查询,它 判断列值是否与指定的字符串格式匹配。在 SQL Server中可使用的匹配符有以下几种:百分号():可匹配任意类型和长度的字符。下划线(_):匹配单个任意字符。方括号口:指定一个字符、字符串或范围,要 求所匹配对象为它们中的任何一个。A:与口取值相同,但要求所匹配的对象为指 定范围以外的任何一个字符。SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.15:利用通配符外来查找雇员表中姓“张”的雇员的所有列信息。SELECT*FROM 雇员 WHERE 姓名 LIKE 张炉结果如图6T4所
22、示:I 雇员工可姓名:职务1 T 张颖销售代表|2J9 张雪眉汽肖售代表图6/4查找雇员表中姓张的雇员的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.16:利用通配符“和“,来查找雇员表中 姓名的第二个字为“雪”的雇员的许有列信息。SELECT*FROM 雇员 WHERE 姓名 LIKE _雪,结果如图6T5所示:9雇员ID姓名职务张雪眉销售代表图6-15查找雇员表中姓名的第二个字为“雪”的雇员的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础除了百分号和下划线,Transact-SQL还支持其他与LIKE操作 符一同使用时拥有特
23、殊意义的字符。下面的两个例子就是用到了,n。例6.17:利用通配符”和,来查找雇员表中姓名的第一 个字为“张”或者“王”或者“赵”或者“孙”的雇员的所有列 信息。SELECT*FROM雇员WHERE姓名LIKE 张,王,赵,孙炉结果如图6T6所示:,雇员工口牲二告 职奏-1 2 5 6 91-2 3 4 5-一,一:二一 V二一、张颖 销售代表王伟 副忌趣造肖售,赵军 销售是理孙林 销售代表张雪眉销售代表图6-16查找雇员表中姓名列指定姓氏雇员的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础字符可旨定了一个字符范围或是一列字符的非。只有 当用在一对方括号中的时候,
24、这个字符才具有此意义。例6.18:利用通配符 和厂来查找雇员表中姓名 的第一个字不是“张”也不是“王”的雇员的所有列信SELECT*FROM 雇员 WHERE 姓名 LIKE,八张,王%,SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6T7所示:雇员口姓名职务II 13 2d446 5 7 6 g李芳精售代表 _ 郑建杰销售代表赵军鞘售经理 孙林销售代表 金士鹏销售代表 划英政内部情售协调员图6-17查找雇员表中姓名列非指定的姓氏雇员的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.19利用通配符“和二来查找雇员表中姓名的 第二个
25、字不是“雪”的雇员的所有列信息。SELECT*FROM 雇员 WHERE 姓名 not LIKE 1雪,结果如图6-18所示:雇员工D姓名 职务1 2-3 4 5 6 7 812345 6 78-一1颖伟芳建军职士康 张王举郑起利金x销售代表 副总裁(销售)销售代表_销售代表销售经理销售代表销售代表内部销售协调员图6-18查找雇员表中姓名的第二个字不是“雪”的雇员的信息结果SQL Server 2000网络数据库教程第6章SQL查询语句基础Where子句-空值查询 空值意味着用户没有输入值,它既不代表空格也不为3空值与任何数据运算或比较时,其结果仍为空,空 值之间也不能匹配。所以在WHERE子
26、句不能使用比较运算 符对空值进行比较判断,而只能使用空值判断符IS NOT NULL来判断表达式的值是否为空。例6.20:获取为项目2工作的,具有未知工作的所有 职员编号和相应的项目编号。SELECT emp_no,project_noFROM works_noWHERE project_no=,p2,AND job IS NULLSQL Server 2000网络数据库教程第6章SQL查询语句基础结果为:empno projectno18316 p229346 p2SQL Server 2000网络数据库教程第6章SQL查询语句基础Order By子句(对查询结果排序)指定结果集中元组的排列
27、次序 耗时 ASC(缺省)、DESC对于空值,若升序,含空值的元组最先显示;若降序,则反之。SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.21:查找产品表中库存量大于100的产品的所 有列信息,并且以产品ID的升序来排列。select*from 产品where库存量 100order by 产品 ID结果如图6.19所示:产品LED产品名秫类别工D单价、库存量订购量1_12 由、才 普 625.0000120 022 糯米 521.0000104 033 孑良挖奶能42.5000112 01 34 口卑酒 114.00001 1 1 0fcj36 所鱼 819.00
28、00112 0|40 中下米 818.4000123 0P 155 肉 624.0000115 061 海鲜隹 228.5000113 0pZJ73 海哲皮 815.0000101 075 浓金宿电口由E 17.7500125 0图619查找库存量大于100并以产品ID排序的结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.22:查找产品表中库存量大于100的产品的所有 列信息,并且以库存量和单价的升序来排列。select*from 产品 where 库存量 100 order by 库 存量,单价结果如图6-20所示:产品工D产品名称类别ID单价 库存量订购量海哲
29、皮浪花奶酪*赢浓缩咖啡851482628115.000021.000014.0000 2.500019.0000 28.5000 24.000025.0000 18.40007.75001011041111121121131151201231250000000000返 0图6-20查找库存量大于100并以库存量和单价排序的结果SQL Server 2000网络数据库教程第6章SQL查询语句基础6.4统计 在SELECT语句中,可以使用聚合函数、行聚合函多、GROUP BY子句和COMPUTE子句对查询结果进行 统计。GROUP BY子句可与行聚合函数或聚合函数 一起使用。COMPUTE子句只能
30、与行聚合函数一起 使用。在SELECT语句中,也可以单纯使用聚合叨数而不使 用GROUP BY子句和COMPUTE子句进行统计,这 时,它将所有符合条件的数据统计在一起,形成一行 统计数据,这种统计方法叫做标量统计。SQL Server 2000网络数据库教程第6章SQL查询语句基础6.4.1 GROUP BY子句ROUP BY子句将一列或多列定义为一组,使得组内所有的行在 某些列中的数值都相同。例6.23:依据职务对雇员表中所有雇员可能的职务进 行分组。select职务from雇员group by职务结果如图6-21所示:1 J鬲U与转,:与声2 j内含日丰省卡打i固员3 辛吉 六匕孝4 百
31、一合玉里图6-21对雇员的职务进行分组的结果SQL Server 2000网络数据库教程第6章SQL查询语句基础6.4.2 HAVING子句 在使用GROUP BY子句时,还可以用HAVING子句为分组统计 进一步设置统计条件,HAVING子句与GROUP BY子句的关系和 WHERE子句与SELECT子句的关系类似。HAVING子句可以参照选择列表中的任一项,在HAVING子句中 还可以使用逻辑运算符连接多个条件。最多为128个。例6.20:依据职务对雇员表中所有雇员可能的职务进 行分组,并除去那些职务为“副”的职务。select职务from雇员group by 职务HAVING 职务 no
32、t LIKE,副,SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-22所示:职务丙部错售防词员2 销售代表【销售经理图6-22对雇员职务进行分组并除去副职的结果SQL Server 2000网络数据库教程第6章SQL查询语句基础6.4.3 COMPUTE 子句COMPUTE子句生成合计作为附加的汇总列出现在结果集的最后。COMPUTE子句的结果不是一张表而是一张报表。它有一个可选的BY 部分。BY定义了结果的分组格式。如果忽略了BY,那么行聚合函数将 作用于结果查询中的所有行。选项BY COLUMN_NAME指定了列 COLUMN_NAME中数值来建造组。如果使
33、用了带BY的COMPUTE子 句,那么就一定要使用GROUPBY子句。语法:COMPUTEAVG|COUNT|MAX|MIN|STDEV|STDEVP|VAR|VARP|SUM(expression),.n BY expression ,.n 参数:AVG|COUNT|MAX|MIN|STDEV|STDEVP|VAR|VARP|SUM指定要执行的聚合。SQL Server 2000网络数据库教程第6章SQL查询语句基础聚合函数把一列中的值进行聚合运算,返回单值的函数 五个预定义的聚合函数平均值:Avg ALLDISTINCT字段名)总和:Sum ALL|DI ST INCT字段名)最小值:Mi
34、n ALLDISTINCT字段名)最大值:Max ALLDISTINCT字段名)计数:Count ALL|DI ST INCT字段名)Count *、Count D i st i net.SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.25使用带有BY的COMPUTE子句获取“产品”表中类别 ID是1或2的产品的产品ID,产品名称,类别ID,单价,并且按照“类别ID”分组,统计出该组中最高单价是多少。SELECT产品ID,产品名称,类别ID,单价FROM产品WHERE 类另lJlD=l OR 类另lID=2ORDER BY 类别IDCOMPUTE Max 单价)by
35、类别IDSQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-23所示:产品工D产品名类别曲I1224343538苹果?十十11118.OOOO19.OOOO4.500014.OOOO18.OOOO263.5000T I 308 4318.OOOO46.OOOO-J263.5000产品工D 产品名称:类另“HD单价1I 77辣椒粉213.000021 662IT.OOOO3_1 63毒繇,243.9000J 465海各隹221.0500I 5J44219.45006_J61海盆隹228.50007_ 3蕃茄隹2IO.OOOO8|4222.0000maxJ_|43.90
36、00图6-23统计结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.26获取“产品”表中类别ID是1或2的产品的产品 ID,产品名称,类别ID,单价,并且统计出最高单价是多少,平均单价是多少SELECT产品ID,产品名称,类别ID,单价FROM产品WHERE 类另lJlD=l OR 类别ID=2COMPUTE Max(单价),avg(单价)SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图624所示_J一品工D 一晶者得:方11手臬汗122番茄普13222V456一S 9 1cl1三-681 524343538班钿钙空霜打十22211113
37、9相口信:十11443116446 1理期酱 希珏普 冷昌吉22工86365N2I1?6667矿皋水 左手丁水 法刍言的口 F归2170122751之3|T6打梭汁1.3VWZED 单 g18-0000-1 9.0000 1 O-OOOO 22.0000 21.3500 25.0000 40.0000 1 5.5000 4.5000 14.0000 18-0000 263.5000 18-0000 46.0000 1 9.4500 28.5000 43.9000 21.0500 1T.0000 14.0000 1 5.0000 T.T5OO 1 8-0000图6-24 统计结果SQL Serv
38、er 2000网络数据库教程第6章SQL查询语句基础6.5利用查询结果创建新表 SELECT语句中使用INTO选项可以将查询结 果写进新表中,新表结构与SELECT语句选择列 表中的字段结构相同。例6.27从客户表中查询联系人姓名,联系人 职务,地址然后写入新表“客户简表”中。SELECT联系人姓名,联系人职务,地址INTO客户简表FROM客户返0SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-25所示:+一dbo.dtproperti esdbo.产品dbo.订单dbo.订单明细dbo.供应商dbo.雇员dbo.客户dbo.客户简表j 唱 联系人姓名(nv a
39、r char(30),Not Null)j 唱 联系人职务(nv ar char(30),Null)地址(nv ar char(60),Null)图6-25从客户表中查询信息后写入客户简表的结果返 回SQL Server 2000网络数据库教程第6章SQL查询语句基础6.6使用UNION运算符实现多查询联合6.6.1 UNION运算符的语法格式UNION运算符可以将两个或两个以上的查询结果合并成一个结果 集合显示。UNION运算符的语法格式为:查询 1 UNIONSALL查询n.ORDER BY 子句COMPUTE 子句其中查询1的格式为:SELECT select_list INTO子句一
40、FROM子句,WHERE 子句GROUP BY 子句;HAVING 子句查询n的格式为:SELECT select_list FROM 子句一,WHERE 子句GROUP BY 子句 二HAVING 子句SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.28从“产品”表和“订单明细”表中获取 产品单价大于100元或者订单数量大于30的产品ID,并以升序排列。SELECT 产品 IDFROM产品WHERE 单价 100UNIONSELECT 产品 IDFROM订单明细WHERE 数量 30ORDER BY 1SQL Server 2000网络数据库教程第6章SQL查询语句
41、基础结果如图626所示:产品U1234;6725162029383949518910 5711-60图6-26例6.28联合查询结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.29用操作符UNION获取”产品“表中单价小 于10元或者大于100元的产品的产品ID,单价,产品名称,类别ID,库存量。SELECT产品ID,单价,产品名称,类别ID,库存量FROM产品WHERE 单价10UNIONSELECT产品ID,单价,产品名称,类别ID,库存量FROM产品WHERE 单价100SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-28所示
42、产品ID;单价 产品名称 类别ID库存量1234561319231242991011121333384145475254756.00009.20009.00004.5000123.79002.5000263.50009.65009.50009.50007.00007.45007.7500片酪 麦 啡 奶 一 咖 虾果麦水肉花茶干鱼糕合肉缩 龙糖燕汽鸭浪绿虾雪蛋三鸡浓8 3 5 16 48 8 3 5 624256120011217855363821125图6-28例6.29联合查询结果SQL Server 2000网络数据库教程第6章SQL查询语句基础例6.30用操作符OR获取”产品“表中单
43、价小于10 元或者大于100元的产品的产品ID,单价,产品名称,类别ID,库存量。SELECT产品ID,单价,产品名称,类别ID,库存量FROM产品WHERE 单价 10 or 单价 100SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-29所示:面评 查说 ANGONG-4.yaoyue-ANGONG-4AdministrtH:SELECT 产品工D、单价 产品名称.类别工D.库存量FROM产品WHERE单价1。or单价口口产品口)单价 产品名称 类别工D库存量1136.00002 j199.20003_239.00004244.5000529123.7900
44、6332.50007;38263.50008419.65009:459.500010479 500011527.0000547.4500 j757.75008351641883561片酪 麦啡奶 一咖 虾果麦水肉花茶子鱼糕合肉缩 龙糖燕汽鸭浪绿虾雪蛋三鸡浓2 5 4 5 1 0 1 7 5 6 8 1 2 22 6 2 011853321图6-29例6.30的查询结果SQL Server 2000网络数据库教程第6章SQL查询语句基础6.6.2 UNION运算符使用准则 使用UNION运算符时请遵循以下准则:在使用UNION运算符组合的语句中,所有选择列表的表达式数 目必须相同(列名、算术表达
45、式、聚合函数等)。在使用UNION组合的结果集中的相应列、或个别查询中使用的 任意列的子集必须具有相同数据类型,并且两种数据类型之间 必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime数据类型的列和binary数据类型的列之间不可能存 在UNION运算符,除非提供了显式转换,而在money数据类 型的列和int数据类型的列之间可以存在UNION运算符,因 为它们可以进行隐性转换。用UNION运算符组合的各语句中对应的结果集列出现的顺序必 须相同,因为UNION运算符是按照各个查询给定的顺序逐个比 较各列。返 回SQL Server 2000网络数据库教程第6章SQL查询语
46、句基础6.7连接若一个查询同时涉及两个以上的表,则称之 为连接查询,包括:内连接-自连接-外连接-复合条件连接SQL Server 2000网络数据库教程第6章SQL查询语句基础6.7.1等值连接和自然连接对于等值连接和自然连接,在WHERE子句中使用等 于比较运算符,两者的区别在于等值连接的查询结果中 列出所连接表中的所有列,包括它们之间的重复列。而 自然连接的选择列表中删除被连接表间的重复列。例6.31获取“雇员”表和“订单”表中雇员ID相同 的所有列的全部信息。SELECT*FROM雇员,订单WHERE雇员,雇员ID=订单.雇员IDSQL Server 2000网络数据库教程第6章SQL
47、查询语句基础结果如图6-30所示:雇员ID旌名职务:订单ID盅户ID 供应商D订购日期嗑期5赵军销售经理102481551996-07-04 00:00:001996-07-16 00:00:006孙林轴售代表102492631996-07-05 00:00:001996-07-10 00:00:004郑建杰辅售代表102503461996-07-08 00:00:001996-07-12 00:00:00|3李劳销售代表1025143101996-07-08 00:00:00 1996-07-15 00:00:004郑建杰精售代表1025254291996-07-09 00:00:00 19
48、96-07-11 00:00:006|3林销售代表1025363251996-07-10 00:00:00 1996-07-16 00:00:007|5赵军辅售经理102547511996-07-11 00:00:00 1996-07-23 00:00:009张雪眉捎售代表102557981996-07-12 00:00:00 1996-07-15 00:00:003林辅售代表102568371996-07-15 00:00:001996-07-17 00:00:004郑建杰销售代表102579491996-07-16 00:00:001996-07-22 00:00:001张颖犒售代表102
49、58101111996-07-17 00:00:001996-07-23 00:00:0012|4郑建杰犒售代表1025914151996-07-18 00:00:001996-07-25 00:00:00134郑建杰捎售代表1026024171996-07-19 00:00:001996-07-29 00:00:00154郑建杰帽代表1026134201996-07-19 00:00:001996-07-30 00:00:00,8刘英孜内部辅售协调员1026258101996-07-22 00:00:001996-07-25 00:00:00图6-30查询雇员表和订单表中雇员ID相同的所有信
50、息SQL Server 2000网络数据库教程第6章SQL查询语句基础6.7.2不等连接不等连接使用除等于运算符以外的其他比较运算符。这些运算符包括,=,=,v,!,!和等。例6.32获取“雇员”表中雇员ID大于“订单”表中 雇员ID的3倍的所有记录的所有列信息。SELECT*FROM雇员,订单WHERE雇员.雇员ID 订单.雇员ID*3SQL Server 2000网络数据库教程第6章SQL查询语句基础结果如图6-32所示:图6-32例6.34不等连接的查询结果SQL Server 2000网络数据库教程第6章SQL查询语句基础6.7.3外部连接 外部连接分为左外部连接和右外部连接两种。以主






