《第5章-SQL查询语句基础课件.ppt》由会员分享,可在线阅读,更多相关《第5章-SQL查询语句基础课件.ppt(85页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础第 5_2 章 SQL查询语句基础5.1SELECT条件列表条件列表5.2FROM子句子句5.3WHERE子句子句5.4统计统计5.5利用查询结果创建新表利用查询结果创建新表5.6使用使用UNION运算符实现多查询联合运算符实现多查询联合5.7连接连接5.8子查询子查询 本章要点:本章要点:本章要点:本章要点:掌握简单的Transact-SQL查询语句。学会对查询结果进行分组统计、合计和排序等复杂的SELECT语句操作。SQL Server 2000 SQL Server 200
2、0 网络数据库教程网络数据库教程第5章SQL查询语句基础5.1SELECT条件列表一、基本结构uSELECT记录显示范围字段列表uINTO新表名uFROM表名或表名列表及其连接方式uWHERE条件表达式uGROUPBY分组字段名列表HAVING分组条件表达式uORDERBY排序字段名列表ASC|DESCuCOMPUTE集合函数(列名1)BY列名2n说明:uSELECT语句中各子句的顺序:uSELECT记录范围字段列表INTOFROMWHEREGROUPBYHAVINGORDERBYCOMPUTEulFROM用于指定数据来源:u单表查询简单格式:FROM表名u多表查询时的格式:FROM表名列表及
3、其连接方式ulCOMPUTE子句不能与INTO子句或GROUPBY子句同时使用。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础SELECT条件列表条件列表(1)SELECT子子句句:指指明明目目标标列列(字字段段、表表达达式式、函函数数表表达达式式、常常量量)。基本表中相同的列名表示为:。基本表中相同的列名表示为:表名表名.列名列名(2)FROM子子句句:指指明明数数据据源源。表表间间用用“,”分分割割。数数据据源源不不在在当当前前数数据据库库中中,使使用用“数数据据库库名名.表表名名”表表示示。一一表表多多用用,用别名标识
4、。定义表别名:用别名标识。定义表别名:表名表名别名别名(3)WHERE子句:子句:元组选择条件。元组选择条件。(4)GROUPBY子子句句:结结果果集集分分组组。当当目目标标列列中中有有统统计计函函数数,则则统统计计为为分分组组统统计计,否否则则为为对对整整个个结结果果集集统统计计。子子句句后后带带上上HAVING子子句表达组选择条件(带函数的表达式)。句表达组选择条件(带函数的表达式)。(5)ORDERBY子子句句:排排序序。当当排排序序要要求求为为ASC时时升升序序排排序序;排排序序要要求为求为DESC时降序排列。时降序排列。SQL Server 2000 SQL Server 2000
5、网络数据库教程网络数据库教程第5章SQL查询语句基础2.SELECT语句的操作符语句的操作符(1)(1)算术操作符算术操作符+(加号)、(减号)、(加号)、(减号)、*(乘号)和(乘号)和 /(除号)。(除号)。(2)(2)比较操作符比较操作符=(等于)、(等于)、(大于)、(大于)、(小于)、(小于)、=(大于等于)、(大于等于)、!=!=(不等于)、(不等于)、(小于大于)、(小于大于)、!(不大于)(不大于)和和 !、=、90;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础自连接自内连接简称自连接,是一张表自己对自己的
6、内连接,即在一张表的两个副本之间进行内连接。用自连接可以将同一个表的不同行连接起来。使用自连接时,必须为两个副本指定别名,使之在逻辑上成为两个表。语法格式:SELECT列名列表FROM表名AS别名1join表名.别名2ON别名1.列名=别名2.列名SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础查询每一门课的间接先行课。例如,课程表中的先行课是在上学期应开设的,先行课的先行课,即间接先行课应提前一学年开设。如果求查询某门课的间接先行课或全部课程的间接先行课,就需要对课程表进行自身连接。SELECTA.课程号,A.课程名,B.先
7、行课FROM课程A,课程BWHEREA.先行课=B.课程号SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础例子课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C2PASCAL语言语言C1C3数据结构数据结构C2C4数据库数据库C3C5软件工程软件工程C4课程的先行关系链为:课程的先行关系链为:C5C4C3C2C1,课程的间接关系链为:课程的间接关系链为:C5C3C1。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础课程号课程号课程名课程名先行课先行
8、课课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C1计算机引论计算机引论C2Pascal语言语言C1C2Pascal语言语言C1C3数据结构数据结构C2C3数据结构数据结构C2C4数据库数据库C3C4数据库数据库C3C5软件工程软件工程C4C5软件工程软件工程C4A.课程号课程号A.课程名课程名B.先行课先行课C2Pascal语言语言C3数据结构数据结构C1C4数据库数据库C2C5软件工程软件工程C3AB结果【例例例例5-185-185-185-18】SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础自连接虽然使用
9、一个表但有两个拷贝,在逻辑上是两个表而且字段完全相同,因此字段列表中字段名必须加上其中一个表的别名做前缀。使用自连接会产生许多重复行,一般加关键字DISTINCT过滤掉重复行。自连接默认按ON使用的连接字段排序(供货商ID,货号),为了按厂家顺序再按进货日期排序,本例使用了ORDERBY指定排序。由于使用了DISTINCT,所以不允许使用字段列表没有指定的“g1.进货日期”排序,也不允许使用别名“供货日期”进行排序,本例使用了字段列表中的表达式。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础(3)外部连接左外部连接操作是在结
10、果集中保留连接表达式左表中的非匹配记录;右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。外部连接符号为“*=”,右外部连接符号为“=*”。外部连接中不匹配的分量用NULL表示。职工职工号号姓名姓名性别性别年龄年龄所在部所在部门门部门部门号号部门名部门名称称电话电话1010李勇李勇男男201111生产科生产科5661011刘晨刘晨女女1912计划科计划科5781012王敏王敏女女221213一车间一车间4671014张立张立男男211314科研所科研所职工表职工表 部门表部门表 SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查
11、询语句基础连接的结果集连接的结果集连接的结果集连接的结果集 职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661011刘晨刘晨女女191012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467内连接的结果集 左外部连接的结果集SQL Server 2000 SQL Server
12、2000 网络数据库教程网络数据库教程第5章SQL查询语句基础【例5-19】内连接:SELECT职工.*,部门名称,电话FROM职工,部门WHERE职工.所在部门=部门.部门号;左外部连接:SELECT职工.*,部门名称,电话FROM职工,部门WHERE职工.所在部门*=部门.部门号;右外部连接:SELECT职工.*,部门名称,电话FROM职工,部门WHERE职工.所在部门=*部门.部门号;用用用用SQLSQLSQLSQL表达职工和部门之间的内连接、左外部连接和右外部连接的语句表达职工和部门之间的内连接、左外部连接和右外部连接的语句表达职工和部门之间的内连接、左外部连接和右外部连接的语句表达职
13、工和部门之间的内连接、左外部连接和右外部连接的语句SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础5.8子查询(嵌套查询)子查询是嵌套在另一查询中的Select-From-Where表达式(Where/Having)SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件可以用多个简单查询来构成复杂查询,以增强SQL的查询能力子查询中不使用OrderBy子句,OrderBy子句只能对最终查询结果进行排序SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语
14、句基础子查询(嵌套查询)我们可能会提出这样的问题,在雇员中谁的工资最高,或者谁的工资比赵军的高。通过把一个查询的结果作为另一个查询的一部分,可以实现这样的查询功能。具体的讲:要查询工资高于赵军的雇员的名字和工资,必须通过2个步骤来完成,第一步查询雇员赵军的工资,第二步查询工资高于赵军的雇员。第一个查询可以作为第二个查询的一部分出现在第二个查询的条件中,这就是子查询。出现在其他查询中的查询称为子查询,包含其他查询的查询称为主查询。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础子查询(嵌套查询)子查询一般出现在SELECT语句的
15、WHERE子句中。子查询比主查询先执行,结果作为主查询的条件。在书写上要用圆括号扩起来,并放在比较运算符的右侧。子查询可以嵌套使用,最里层的查询最先执行。子查询可以在SELECT、INSERT、UPDATE、DELETE等语句中使用。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础查找年龄比李明大的同学SELECT姓名,年龄FROM学生WHERE年龄(SELECT年龄FROM学生WHERE姓名=李明);执行过程分两步:1、SELECT年龄FROM学生WHERE姓名=李明);得出年龄=212、SELECT姓名,年龄FROM学生W
16、HERE年龄21SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础使用IN操作符的嵌套查询【例5-20】求选修了高等数学的学生学号和姓名。SELECT学号,姓名FROM学生WHERE学号IN(SELECT学号FROM选课WHERE课程号IN(SELECT课程号FROM课程WHERE课程名=高等数学);该题也可以使用下面的连接查询表达。SELECT学生.学号,姓名FROM学生,课程,选课WHERE学生.学号=课程.学号AND课程.课程号=选课.课程号AND课程.课程名=高等数学;SQL Server 2000 SQL Server
17、 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础(2)使用比较符的嵌套查询【例5-21】求C1课程的成绩高于张三的学生学号和成绩。SELECT学号,成绩FROM选课WHERE课程号=C1AND成绩(SELECt成绩FROM选课WHERE课程号=C1AND学号=(SELECT学号FROM学生WHERE姓名=张三);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础(3)使用使用ANY或或ALL操作符的嵌套查询操作符的嵌套查询格式为:格式为:字段字段比较符比较符ANY|ALLANY|ALL子查询子查询操作符操作符语意
18、语意ANY大于子查询结果中的大于子查询结果中的某个值某个值,即表示大于查询结果中,即表示大于查询结果中最小值最小值ALL大于子查询结果中的大于子查询结果中的所有值所有值,即表示大于查询结果中,即表示大于查询结果中最大值最大值ANY小于子查询结果中的小于子查询结果中的某个值某个值,即表示小于查询结果中,即表示小于查询结果中最大值最大值=ANY大于等于子查询结果中的大于等于子查询结果中的某个值某个值,即表示大于等于结果集中,即表示大于等于结果集中最小值最小值=ALL大于等于子查询结果中的大于等于子查询结果中的所有值所有值,即表示大于等于结果集中,即表示大于等于结果集中最大值最大值=ANY小于等于子
19、查询结果中的小于等于子查询结果中的某个值某个值,即表示小于等于结果集中,即表示小于等于结果集中最大值最大值=ALL小于等于子查询结果中的小于等于子查询结果中的所有值所有值,即表示小于等于结果集中,即表示小于等于结果集中最小值最小值=ANY等于子查询结果中的等于子查询结果中的某个值某个值,即相当于,即相当于IN=ALL等于子查询结果中的等于子查询结果中的所有值所有值(通常没有实际意义通常没有实际意义)!=(或或)ANY不等于子查询结果中的不等于子查询结果中的某个值某个值,!=(或或)ALL不等于子查询结果中的不等于子查询结果中的任何一个值任何一个值,即相当于,即相当于NOT INSQL Serv
20、er 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础例子例子【例例5-225-22】求其他系中比计算机系某一学生年龄小的学生。求其他系中比计算机系某一学生年龄小的学生。SELECT*FROM学生学生WHERE年龄年龄ANY(SELECT年龄年龄FROM学生学生WHERE所在系所在系=计算机系计算机系)AND所在系所在系计算机系计算机系;【例例5-235-23】求其他系中比计算机系学生年龄都小的学生求其他系中比计算机系学生年龄都小的学生SELECT*FROM学生学生WHERE年龄年龄ALL(SELECT年龄年龄FROM学生学生WHERE所在系所在系
21、=计算机计算机)AND所在系所在系计算机计算机;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础嵌套查询分类不相关子查询子查询的查询条件不依赖于父查询相关子查询子查询的查询条件依赖于父查询SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础嵌套查询求解方法不相关子查询是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。相关子查询首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返
22、回值为真,则取此元组放入结果表;然后再取外层表的下一个元组;重复这一过程,直至外层表全部检查完为止SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础引出子查询的谓词带有IN谓词的子查询带有比较运算符的子查询带有ANY或ALL谓词的子查询带有EXISTS谓词的子查询SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础一、带有IN谓词的子查询【例5-20】求选修了高等数学的学生学号和姓名。SELECT学号,姓名FROM学生WHERE学号IN(SELECT学号FROM选课
23、WHERE课程号IN(SELECT课程号FROM课程WHERE课程名=高等数学);不相关子查询SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础四、带有EXISTS谓词的子查询1.EXISTS谓词存在量词带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。若内层查询结果非空,则返回真值若内层查询结果为空,则返回假值由EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义2.NOTEXISTS谓词SQL Server 2000
24、SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础(4)使用EXISTS操作符的嵌套查询【例5-24】求选修了C2课程的学生姓名。SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程号=C2)思路分析:本查询涉及学生和选课关系。在学生中依次取每个元组的学号的值,用此值去检查选课关系。若选课中存在这样的元组,其学号的值等于此学生.学号值,并且其课程号=C2,则取此学生.姓名送入结果关系。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础
25、【例例5-255-25】求没有选修求没有选修C2C2课程的学生姓名。课程的学生姓名。SELECT姓名姓名FROM学生学生WHERENOTEXISTS(SELECT*FROM选课选课WHERE学生学生.学号学号=学号学号AND课程号课程号=C2);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础用等值连接实现SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程号=C2);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章
26、SQL查询语句基础3.不同形式的查询间的替换一些带EXISTS或NOTEXISTS谓词的子查询不能被其他形式的子查询等价替换所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础例:例37查询与“李明”在同一个系学习的学生。可以用带EXISTS谓词的子查询替换:SELECT学号,姓名,所在系FROM学生s1WHEREexists(SELECT*FROM学生s2WHEREs2.所在系=s1.所在系ANDs2.姓名=李明)SELECTs1.学
27、号,s1.姓名,s1.所在系FROM学生s1,学生s2WHEREs2.所在系=s1.所在系ANDs2.姓名=李明SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础例子例子【例例5-265-26】查询选修了全部课程的学生的姓名。查询选修了全部课程的学生的姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE NOT EXISTS(SELECT*FROM WHERE NOT EXISTS(SELECT*FROM 课程课程 WHERE NOT EXISTS(SELECT*WHERE NOT EXISTS(
28、SELECT*FROM FROM 选课选课 WHERE WHERE 学生学生.学号学号=学号学号 AND AND 课程课程.课程号课程号=课程号课程号);第一个第一个not existsnot exists表示不在这些课程记录表示不在这些课程记录,第二个第二个not existsnot exists表示不存在这样的选课记录表示不存在这样的选课记录演变成演变成:查询这样的学生姓名查询这样的学生姓名,没有一门课是他不选的没有一门课是他不选的.SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础SELECT*FROM选课xk,学生xs,
29、课程kcWHERExs.学号=xk.学号ANDkc.课程号=xk.课程号SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础例子例子【例例5-275-27】求求选选修修了了学学号号为为“S2S2”的的学学生生所所选选修修的的全全部部课课程程的的学学生生学学号号和和姓名。姓名。SELECT SELECT 学号,姓名学号,姓名 FROM FROM 学生学生 WHERE NOT EXISTS(SELECT*FROM WHERE NOT EXISTS(SELECT*FROM 选课选课 选课选课1 1 WHERE WHERE 选课选课1.1
30、.学号学号=S2 AND NOT EXISTS=S2 AND NOT EXISTS (SELECT*FROM (SELECT*FROM 选课选课 选课选课2 2 WHERE WHERE 学生学生.学号学号=选课选课2.2.学号学号 AND AND 选课选课2.2.课程号课程号=选课选课1.1.课程号课程号);查询学生查询学生X X选修的课程选修的课程Z Z和和S2S2学生选修的课程学生选修的课程Y,Y,并要求并要求Z Z中包括全部的中包括全部的Y.Y.不存在这样的课程y,学生S2选修了y,而学生x没有选。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教
31、程第5章SQL查询语句基础5.4统计把一列中的值进行聚合运算,返回单值的函数五个预定义的聚合函数平均值:Avg(ALL|DISTINCT)总和:Sum(ALL|DISTINCT)最小值:Min(ALL|DISTINCT)最大值:Max(ALL|DISTINCT)计数:Count(ALL|DISTINCT)Count(*)、Count(Distinct)在SELECT语句中,可以使用聚合函数、行聚合函数、GROUPBY子句和COMPUTE子句对查询结果进行统计。GROUPBY子句可与行聚合函数或聚合函数一起使用。COMPUTE子句只能与行聚合函数一起使用。SQL Server 2000 SQL
32、Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础GROUPBY子句ROUPBY子句将一列或多列定义为一组,使得组内所有的行在某些列中的数值都相同。查询有些什么系?SELECT所在系FROM学生groupby所在系SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础示例在SELECT语句中,也可以单纯使用聚合函数而不使用GROUPBY子句和COMPUTE子句进行统计,这时,它将所有符合条件的数据统计在一起,形成一行统计数据,这种统计方法叫做标量统计。【例例5-31】求学生的总人数。求学生的总人数。SELE
33、CTCOUNT(*)FROM学生学生;【例例5-325-32】求选修了课程的学生人数。求选修了课程的学生人数。SELECTCOUNT(DISTINCT学号学号)FROM选课选课;例:李明同学的成绩最高分,最低分,总分和平均分。例:李明同学的成绩最高分,最低分,总分和平均分。SELECTmax(成绩成绩),min(成绩成绩),avg(成绩成绩)FROM学生学生st,选课选课kcwherest.学号学号=kc.学号学号and姓名姓名=李明李明SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础组函数分组函数中SUM和AVG只应用于数值
34、型的列;MAX、MIN和COUNT可以应用于字符、数值和日期类型的列。组函数忽略列的空值。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础统计函数使用GROUPBY从句可以对数据进行分组。所谓分组就是按照列的相同内容,将记录划分成组,对组可以应用组函数。在组函数中可使用DISTINCT或ALL关键字。ALL表示对所有非NULL值(可重复)进行运算(COUNT除外)。DISTINCT表示对每一个非NULL值,如果存在重复值组函数只运算一次。如果不指明上述关键字,默认为ALL。SQL Server 2000 SQL Server
35、2000 网络数据库教程网络数据库教程第5章SQL查询语句基础分组统计结果限定在使用GROUPBY子句时,还可以用HAVING子句为分组统计进一步设置统计条件,HAVING子句与GROUPBY子句的关系和WHERE子句与SELECT子句的关系类似。HAVING子句可以参照选择列表中的任一项,在HAVING子句中还可以使用逻辑运算符连接多个条件。最多为128个。HAVING从句过滤分组后的结果,HAVING从句只能出现在GROUPBY从句之后。而WHERE从句要出现在GROUPBY从句之前。WHERE是在对记录分组之前过滤不满条件的记录HAVING是过滤掉整个分组,不满足条件的组不要SQL Se
36、rver 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础分组统计【例例5-335-33】求课程和选修该课程的人数。求课程和选修该课程的人数。SELECT课程号课程号,COUNT(学号学号)as选修课程人数选修课程人数FROM选课选课GROUPBY课程号课程号;【例例5-345-34】求选修课超过求选修课超过3 3门课的学生学号。门课的学生学号。SELECT学号学号FROM选课选课GROUPBY学号学号HAVINGCOUNT(*)2;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础
37、训练查找图书类别,要求类别中最高图书定价不低于全部按类别分组的平均定价的2倍。SELECTA.*FROM图书AGROUPBYA.类别HAVINGMAX(A.定价)=ALL(SELECT2*AVG(B.定价)FROM图书BGROUPBYB.类别)SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础训练SELECTcount(*),类别FROM图书GROUPBY类别SELECTAVG(定价)FROM图书GROUPBY类别SELECTcount(*),avg(定价),类别FROM图书GROUPBY类别SELECTcount(*),avg
38、(定价),类别FROM图书GROUPBY类别havingavg(定价)20SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础2)求机械工业出版社出版的各类图书的平均定价,用GROUPBY表示。SELECT类别,AVG(定价)平均价FROM图书WHERE出版社=机械工业出版社GROUPBY类别ORDERBY类别ASCSQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础使用compute格式:compute集合函数(列名1),By列名2,.功能:先按列名2分类显示参加汇
39、总记录的详细信息,再在附加行中显示对列名1的汇总值(单用集合函数或GROUPBY仅显示统计汇总值)。COMPUTE子句可以指定多个集合函数,但不允许指定列别名。SELECT指定的字段列表是显示详细信息使用的字段,必须包含COMPUTE子句集合函数使用的列名1,与BY分组字段列名2无关,也可以使用*表示全部字段。COMPUTE子句不带BY表示对全部记录统计,相当于在SELECT查询结果后面带一个统计值的后缀。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础注意事项COMPUTE子句带BY子句时表示分组统计,必须配合ORDERBY
40、排序子句使用,且紧跟ORDERBY之后。BY后的列名2是要分组的字段(相当于GROUPBY),可以不在SELECT指定的字段中,但必须包含在ORDERBY子句中,而且必须是第一顺序。BY指定多个字段分组时,也必须与ORDERBY的第一顺序一致。COMPUTE子句不能与INTO子句或GROUPBY子句同时使用。一个SELECT语句中可使用多个COMPUTE子句,一个子句显示一个附加行,多个子句时BY分组字段必须一致,且与ORDERBY一致,子句之间不能使用逗号。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础selectsum(
41、定价)from图书groupby类别select*from图书computesum(定价)select*from图书orderby类别computesum(定价)select*from图书orderby类别computesum(定价)by类别3)列出计算机类图书的书号、名称及价格,最后求出册数和总价格SELECT书号,书名,定价FROM图书WHERE类别=计算机ORDERBY书号ASCCOMPUTEcount(书号),SUM(定价)SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础列出计算机类图书的书号、名称及价格,并求出各出版
42、社这类书的总价格,最后求出全部册数和总价格。SELECT书号,书名,定价FROM图书WHERE类别=计算机类ORDERBY出版社CONPUTECOUNT(*),SUM(定价)BY出版社COMPUTECOUNT(*),SUM(定价)SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础6.6使用使用UNION运算符实现多查询联合运算符实现多查询联合UNION运算符可以将两个或两个以上的查询结果合并成一个结果集合显示。UNION运算符的语法格式为:查询1UNIONALL查询nORDERBY子句COMPUTE子句其中查询的格式为:SELE
43、CTselect_listINTO子句FROM子句WHERE子句GROUPBY子句HAVING子句SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础UNION运算符使用准则在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。在使用UNION组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在datetime数据类型的列和binary数据类型的列之间不可能存在UNION运算符,除非提供
44、了显式转换,而在money数据类型的列和int数据类型的列之间可以存在UNION运算符,因为它们可以进行隐性转换。用UNION运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为UNION运算符是按照各个查询给定的顺序逐个比较各列。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础4.组合查询组合查询【例例5-285-28】求选修了求选修了C1C1课程或选修了课程或选修了C2C2课程的学生学号。课程的学生学号。SELECT学号学号FROM选课选课WHERE课程号课程号=C1UNIONSELECT学号学号FROM选课选课WH
45、ERE课程号课程号=C2【例例5-295-29】求选修求选修C1C1课程,并且也选修课程,并且也选修C2C2课程的学生学号。课程的学生学号。SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1C1 INTERSECT INTERSECT SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C2=C2;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础查询计算机类和机械工业出版社出版的图书。查询计算机类和机械工业出版社出
46、版的图书。SELECT*FROM图书WHERE类别=计算机类UNIONALLSELECT*FROM图书WHERE出版社=机械工业出版社SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础【例例5-305-30】求选修求选修了了C1C1课程但没有选修课程但没有选修C2C2课程的学生学号。课程的学生学号。SELECT学号FROM选课WHERE课程号=C1MINUSSELECT学号FROM选课WHERE课程号=C2;本例也可以用下面的EXISTS嵌套查询表示。SELECT学号FROM选课选课1WHERE课程号=C1ANDNOTEXIST
47、S(SELECT学号FROM选课选课2WHERE选课1.学号=选课2.学号AND选课2.课程号=C2);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础5.4 5.4 数据更新语句数据更新语句5.4.1 5.4.1 数据插入语句数据插入语句1.1.使用常量插入单个元组使用常量插入单个元组格式为:格式为:INSERTINSERT INTO INTO表名表名(属性列属性列1 1,属性列属性列2 2)VALUES(VALUES(常量常量1 1,常量常量2 2);SQL Server 2000 SQL Server 2000 网络数据
48、库教程网络数据库教程第5章SQL查询语句基础例子例子【例例5-355-35】将一个新学生记录将一个新学生记录(学号:学号:9801098010,姓名:,姓名:张三张三,年龄:,年龄:2020,所在系:,所在系:计算机系计算机系 )插入到插入到学生表中。学生表中。INSERTINSERTINTO INTO 学生学生VALUES(VALUES(9801098010,张三张三,2020,计算机系计算机系);【例例5-365-36】插入一条选课记录插入一条选课记录(学号:学号:9801198011,课程号:,课程号:C10C10,成绩不详成绩不详)。INSERTINSERT INTO INTO 选课选
49、课 (学号,课程号学号,课程号)VALUES(98011 VALUES(98011,C10)C10);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础2.在表中插入子查询的结果集INSERTINTO表名(属性列1,属性列2)子查询;【例5-37】求每个系学生的平均年龄,把结果存入数据库中。CREATETABLE系平均年龄(系名称CHAR(20),平均年龄SMALLINT);INSERTINTO系平均年龄SELECT所在系,AVG(年龄)FROM学生GROUPBY所在系;select*from系平均年龄SQL Server 20
50、00 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础5.4.2 5.4.2 数据修改语句数据修改语句UPDATEUPDATE表名表名SETSET列名列名=表达式表达式,列名列名=表达式表达式,nnWHEREWHERE条件条件;【例例5-385-38】将学生表中全部学生的年龄加上将学生表中全部学生的年龄加上2 2岁。岁。UPDATE UPDATE 学生学生 SET SET 年龄年龄=年龄年龄+2+2;【例例5-395-39】将选课表中的数据库课程的成绩乘以将选课表中的数据库课程的成绩乘以1.21.2。UPDATE UPDATE 选课选课 SET SET 成绩