收藏 分享(赏)

SQL Server数据库教程第5章 数据查询.ppt

上传人:bubibi 文档编号:20014208 上传时间:2023-12-02 格式:PPT 页数:70 大小:1.06MB
下载 相关 举报
SQL Server数据库教程第5章 数据查询.ppt_第1页
第1页 / 共70页
SQL Server数据库教程第5章 数据查询.ppt_第2页
第2页 / 共70页
SQL Server数据库教程第5章 数据查询.ppt_第3页
第3页 / 共70页
SQL Server数据库教程第5章 数据查询.ppt_第4页
第4页 / 共70页
SQL Server数据库教程第5章 数据查询.ppt_第5页
第5页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第第5章章 数据数据查询查询5.1 投影查询投影查询5.2 选择查询选择查询5.3 分组查询和统计计算分组查询和统计计算5.4 排序查询排序查询5.5 连接查询连接查询5.6 子查询子查询5.7 SELECT查询的其他子句查询的其他子句5.8 综合训练综合训练1SQL Server 数据库教程(第3版)第第5章章 数据查询数据查询T-SQL语言中最重要的部分是它的查询功能,查询语言用来对已经存在于数据库中的数据按照特定的行、列、条件表达式或者一定次序进行检索。T-SQL对数据库的查询使用SELECT语句,SELECT语句具有灵活的使用方式和强大的功能。语法格式:语法格式:SELECTselec

2、t_list/*指定要选择的列*/FROMtable_source/*FROM子句,指定表或视图*/WHEREsearch_condition/*WHERE子句,指定查询条件*/GROUPBYgroup_by_expression/*GROUPBY子句,指定分组表达式*/HAVINGsearch_condition/*HAVING子句,指定分组统计条件*/ORDERBYorder_expressionASC|DESC/*ORDER子句,指定排序表达式和顺序*/2SQL Server 数据库教程(第3版)5.1 投影查询投影查询语法格式:语法格式:SELECTALL|DISTINCTTOPnPE

3、RCENTWITHTIESselect_list指出了结果的形式,其格式为:*/*选择当前表或视图的所有列*/|table_name|view_name|table_alias.*/*选择指定的表或视图的所有列*/|colume_name|expression|$IDENTITY|$ROWGUIDAScolumn_alias/*选择指定的列并更改列标题,为列指定别名,还可用于为表达式结果指定名称,*/|column_alias=expression,n3SQL Server 数据库教程(第3版)5.1 投影查询投影查询1投影指定的列投影指定的列使用SELECT语句可选择表中的一个列或多个列,如

4、果是多个列,各列名中间要用逗号分开。语法格式:语法格式:SELECTcolumn_name,column_nameFROMtable_nameWHEREsearch_condition其中,FROM子句用于指定表,WHERE在该表中检索符合search_condition条件的列。4SQL Server 数据库教程(第3版)5.1 投影查询投影查询【例5.1】查询student表中所有学生的学号、姓名和专业。USEstscSELECTstno,stname,specialistFROMstudent查询结果:查询结果:stnostnamespeciality-121001李贤友通信121002

5、周映雪通信121005刘刚通信122001郭德强计算机122002谢萱计算机122004孙婷计算机5SQL Server 数据库教程(第3版)5.1 投影查询投影查询2投影全部列投影全部列在SELECT子句指定列的位置上使用*号时,则为查询表中所有列。【例5.2】查询student表中所有列。USEstscSELECT*FROMstudent该语句与下面语句等价USEstscSELECTstno,stname,stsex,stbirthday,specialist,tcFROMstudent6SQL Server 数据库教程(第3版)5.1 投影查询投影查询7SQL Server 数据库教程(

6、第3版)查询结果:查询结果:stnostnamestsexstbirthdayspecialitytc-121001李贤友男1991-12-30通信52121002周映雪女1993-01-12通信49121005刘刚男1992-07-05通信50122001郭德强男1991-10-23计算机48122002谢萱女1992-09-11计算机52122004孙婷女1992-02-24计算机503修改查询结果的列标题修改查询结果的列标题为了改变查询结果中显示的列标题,可以在列名后使用AS子句。语法格式如下:AScolumn_alias其中column_alias是指定显示的列标题,AS可省略。5.1

7、 投影查询投影查询8【例5.3】查询student表中通信专业学生的stno、stname、tc,并将结果中各列的标题分别修改为学号,姓名,总学分。USEstscSELECTstnoAS学号,stnameAS姓名,tcAS总学分FROMstudent查询结果:查询结果:学号姓名总学分-121001李贤友52121002周映雪49121005刘刚50122001郭德强48122002谢萱52122004孙婷50SQL Server 数据库教程(第3版)5.1 投影查询投影查询4去掉重复行去掉重复行去掉结果集中的重复行可使用DISTINCT关键字,其语法格式是:SELECTDISTINCTcolu

8、mn_name,column_name【例5.4】查询student表中specialist列,消除结果中的重复行。USEstscSELECTDISTINCTspecialistFROMstudent查询结果:查询结果:speciality-计算机通信9SQL Server 数据库教程(第3版)5.2 选择查询选择查询语法格式语法格式:选择查询通过WHERE子句实现,WHERE子句给出查询条件,该子句必须紧跟FROM子句之后。WHERE其中search_condition为查询条件,语法格式为:NOT|()AND|ORNOT|(),n其中predicate为判定运算,语法格式为:express

9、ion=|=|!=|!expression/*比较运算*/|string_expressionNOTLIKEstring_expressionESCAPEescape_character/*字符串模式匹配*/|expressionNOTBETWEENexpressionANDexpression/*指定范围*/|expressionISNOTNULL/*是否空值判断*/10SQL Server 数据库教程(第3版)5.2 选择查询选择查询|CONTAINS(column|*,)/*包含式查询*/|FREETEXT(column|*,freetext_string)/*自由式查询*/|expre

10、ssionNOTIN(subquery|expression,n)/*IN子句*/|expression=|=|!=|!ALL|SOME|ANY(subquery)/*比较子查询*/|EXIST(subquery)/*EXIST子查询*/表5.1查询条件11SQL Server 数据库教程(第3版)5.4.2 选择查询选择查询1表达式比较表达式比较比较运算符用于比较两个表达式值,比较运算的语法格式如下:expression=|=|!=|!expression其中expression是除text、ntext和image之外类型的表达式。12SQL Server 数据库教程(第3版)5.2 选择查

11、询选择查询13【例5.5】查询student表中专业为计算机或性别为女的学生。USEstscSELECT*FROMstudentWHEREspecialist=计算机orstsex=女查询结果:查询结果:stnostnamestsexstbirthdayspecialitytc-121002周映雪女1993-01-12通信49122001郭德强男1991-10-23计算机48122002谢萱女1992-09-11计算机52122004孙婷女1992-02-24计算机502范围比较范围比较BETWEEN、NOTBETWEEN、IN是用于范围比较的三个关键字,用于查找字段值在(或不在)指定范围的行

12、。SQL Server 数据库教程(第3版)5.2 选择查询选择查询【例5.6】查询score表成绩为82、91、95的记录。USEstscSELECT*FROMscoreWHEREgradein(82,91,95)查询结果:查询结果:stnocnograde-12100120591121005801821220028019514SQL Server 数据库教程(第3版)5.2 选择查询选择查询3模式匹配模式匹配字符串模式匹配使用LIKE谓词,LIKE谓词表达式的语法格式如下:string_expressionNOTLIKEstring_expressionESCAPEescape_chara

13、cter其 含 义 是 查 找 指 定 列 值 与 匹 配 串 相 匹 配 的 行,匹 配 串(即string_expression)可以是一个完整的字符串,也可以含有通配符。通配符有以下两种:%:代表0或多个字符。_:代表一个字符。15SQL Server 数据库教程(第3版)5.2 选择查询选择查询【例5.7】查询student表中姓孙的学生情况。USEstscSELECT*FROMstudentWHEREstnameLIKE孙%查询结果:果:stnostnamestsexstbirthdayspecialitytc-122004孙婷女1992-02-24计算机5016SQL Server

14、 数据库教程(第3版)5.2 选择查询选择查询4空值使用空值使用空值是未知的值,判定一个表达式的值是否为空值时,使用ISNULL关键字,语法格式如下:expressionISNOTNULL【例5.8】查询已选课但未参加考试的学生情况。USEstscSELECT*FROMscoreWHEREgradeISnull查询结果:查询结果:stnocnograde-122001801NULL17SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算1聚合函数聚合函数SQLServer所提供常用的聚合函数如表5.3所示。聚合函数一般参数语法格式如下:(ALL|DISTINC

15、Texpression)其中,ALL表示对所有值进行聚合函数运算,ALL为默认值,DISTINCT表示去除重复值,expression指定进行聚合函数运算的表达式。表5.3聚合函数18SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.9】查询102课程的最高分、最低分、平均成绩。USEstscSELECTMAX(grade)AS最高分,MIN(grade)AS最低分,AVG(grade)AS平均成绩FROMscoreWHEREcno=102查询结果:查询结果:最高分最低分平均成绩-92728319SQL Server 数据库教程(第3版)5.3 分组

16、查询和统计计算分组查询和统计计算【例5.10】求学生的总人数。USEstscSELECTCOUNT(*)AS总人数FROMstudent查询结果查询结果:总人数-6【例5.11】查询计算机专业学生的总人数。USEstscSELECTCOUNT(*)AS总人数FROMstudentWHEREspecialist=计算机20SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算查询结果:查询结果:总人数-32.GROUP BY子句子句GROUPBY子句用于将查询结果表按某一列或多列值进行分组,其语法格式为如下:GROUPBYALLgroup_by_expressio

17、n,nWITHCUBE|ROLLUP其中,group_by_expression为分组表达式,通常包含字段名,ALL显示所有分组,WITH指定CUBE或ROLLUP操作符,在查询结果中增加汇总记录。21SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.12】查询各门课程的最高分、最低分、平均成绩。USEstscSELECTcnoAS课程号,MAX(grade)AS最高分,MIN(grade)AS最低分,AVG(grade)AS平均成绩FROMscoreWHERENOTgradeISnullGROUPBYcno查询结果:课程号最高分最低分平均成绩-10

18、292728320394818720591658080195738622SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.13】求选修各门课程的平均成绩和选修人数。USEstscSELECTcnoAS课程号,AVG(grade)AS平均成绩,COUNT(*)AS选修人数FROMscoreGROUPBYcno查询结果:查询结果:课程号平均成绩选修人数-10283320387220580380186623SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算3HAVING子句子句HAVING子句用于对分组按指定条件进一步进

19、行筛选,最后只输出满足指定条件的分组,HAVING子句的格式为:HAVING其中,search_condition为查询条件,可以使用聚合函数。当WHERE子句、GROUPBY子句、HAVING子句在一个SELECT语句中时,执行顺序如下:(1)执行WHERE子句,在表中选择行。(2)执行GROUPBY子句,对选取行进行分组。(3)执行聚合函数。(4)执行HAVING子句,筛选满足条件的分组。24SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.14】查询选修课程2门以上且成绩在80分以上的学生的学号。USEstscSELECTstnoAS学号,CO

20、UNT(cno)AS选修课程数FROMscoreWHEREgrade=80GROUPBYstnoHAVINGCOUNT(*)=2查询结果:查询结果:学号选修课程数-121001312100531220022122004225SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.15】查询至少有4名学生选修且以8开头的课程号和平均分数。USEstscSELECTcnoAS课程号,AVG(grade)AS平均分数FROMscoreWHEREcnoLIKE8%GROUPBYcnoHAVINGCOUNT(*)4查询结果:查询结果:课程号平均分数-8018626S

21、QL Server 数据库教程(第3版)5.4 排序查询排序查询SELECT语句的ORDERBY子句用于对查询结果按升序(默认或ASC)或降序(DESC)排列行,ORDERBY子句的格式如下:ORDERBYorder_by_expressionASC|DESC,n其中,order_by_expression是排序表达式。【例5.16】将计算机专业的学生按出生时间先后排序。USEstscROMstudentSELECT*WHEREspecialist=计算机ORDERBYstbirthday查询结果:查询结果:stnostnamestsexstbirthdayspecialitytc-12200

22、1郭德强男1991-10-23计算机48122004孙婷女1992-02-24计算机50122002谢萱女1992-09-11计算机5227SQL Server 数据库教程(第3版)5.4 排序查询排序查询【例5.17】将通信专业学生按“数字电路”课程成绩降序排序。USEstscSELECTa.stname,ame,c.gradeFROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDame=数字电路ANDa.specialist=通信ORDERBYc.gradeDESC查询结果:查询结果:stnamecnamegrade-李贤友数字电路92

23、刘刚数字电路87周映雪数字电路7228SQL Server 数据库教程(第3版)5.5 连接查询连接查询5.5.1 连接谓词连接谓词在SELECT语句的WHERE子句中使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。其一般语法格式为:比较运算符有:、=、!=、!连接谓词还有以下形式:BETWEENAND由于连接多个表存在公共列,为了区分是哪个表中的列,引入表名前缀指定连接列。例如,student.stno表示student表的stno列,score.stno表示score表的stno列经常用到的连接如下:等值连接:表之间通过比较运算符“=”连接起来,称为等值连接。非

24、等值连接:表之间使用非等号进行连接,则称为非等值连接。自然连接:如果在目标列中去除相同的字段名,称为自然连接。自连接:将同一个表进行连接,称为自连接。29SQL Server 数据库教程(第3版)5.5 连接查询连接查询【例5.18】查询学生的情况和选修课程的情况。USEstscSELECTstudent.*,score.*FROMstudent,scoreWHEREstudent.stno=score.stno查询结果:查询结果:30SQL Server 数据库教程(第3版)stnostnamestsexstbirthdayspecialitytcstnocnograde-121001李贤友

25、男1991-12-30通信5212100110292121001李贤友男1991-12-30通信5212100120591121001李贤友男1991-12-30通信5212100180194121002周映雪女1993-01-12通信4912100210272121002周映雪女1993-01-12通信4912100220565121002周映雪女1993-01-12通信4912100280173121005刘刚男1992-07-05通信5012100510287121005刘刚男1992-07-05通信5012100520585121005刘刚男1992-07-05通信5012100580

26、182122001郭德强男1991-10-23计算机48122001801NULL122002谢萱女1992-09-11计算机5212200220394122002谢萱女1992-09-11计算机5212200280195122004孙婷女1992-02-24计算机5012200420381122004孙婷女1992-02-24计算机50122004801865.5 连接查询连接查询【例5.19】对上例进行自然连接查询。USEstscSELECTstudent.*,o,score.gradeFROMstudent,scoreWHEREstudent.stno=score.stno查询结果:查询

27、结果:31SQL Server 数据库教程(第3版)stnostnamestsexstbirthdayspecialitytccnograde-121001李贤友男1991-12-30通信5210292121001李贤友男1991-12-30通信5220591121001李贤友男1991-12-30通信5280194121002周映雪女1993-01-12通信4910272121002周映雪女1993-01-12通信4920565121002周映雪女1993-01-12通信4980173121005刘刚男1992-07-05通信5020585121005刘刚男1992-07-05通信50801

28、82122001郭德强男1991-10-23计算机48801NULL122002谢萱女1992-09-11计算机5220394122002谢萱女1992-09-11计算机5280195122004孙婷女1992-02-24计算机5020381122004孙婷女1992-02-24计算机50801865.5 连接查询连接查询【例5.20】查询选修了“微机原理”且成绩在80分以上的学生姓名。USEstscSELECTa.stno,a.stname,ame,c.gradeFROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDame=微机原理AND

29、C.grade=80查询结果:查询结果:stnostnamecnamegrade-121001李贤友微机原理91121005刘刚微机原理8532SQL Server 数据库教程(第3版)5.5 连接查询连接查询【例5.21】查询选修了“801”课程的成绩高于学号为“1002”的成绩的学生姓名。USEstscSELECTo,a.stno,a.gradeFROMscorea,scorebWHEREo=801ANDa.gradeb.gradeANDb.stno=1002ANDo=801ORDERBYa.gradeDESC查询结果:查询结果:cnostnograde-80112200295801121

30、00194801122004868011210058233SQL Server 数据库教程(第3版)5.5 连接查询连接查询5.5.2 以以JOIN关键字指定的连接关键字指定的连接T-SQL扩展了以JOIN关键字指定连接的表示方式,使表的连接运算能力有了增强。JOIN连接在FROM子句的中指定。语法格式语法格式::=ON|CROSSJOIN|说明:说明:为连接类型,ON用于指定连接条件,的格式如下:INNER|LEFT|RIGHT|FULLOUTERJOININNER表示内连接,OUTER表示外连接,CROSS表示交叉连接,此为JOIN关键字指定的连接的3种类型。34SQL Server 数据

31、库教程(第3版)5.5 连接查询连接查询1.内连接内连接内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。内连接是系统默认的,可省略INNER关键字。【例5.22】查询学生的情况和选修课程的情况。USEstscSELECT*FROMstudentINNERJOINscoreONstudent.stno=score.stno35SQL Server 数据库教程(第3版)5.5 连接查询连接查询【例5.23】查询选修了102课程且成绩在85分以上的学生情况。USEstscSELECTa.stno,a.stname,o,b.gradeFROMstudentaJOINscorebONa.st

32、no=b.stnoWHEREo=102ANDb.grade=85查询结果查询结果:stnostnamecnograde-121001李贤友10292121005刘刚1028736SQL Server 数据库教程(第3版)5.5 连接查询连接查询2.外连接外连接在内连接的结果表,只有满足连接条件的行才能作为结果输出。外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。外连接有以下3种:左外连接(LEFTOUTERJOIN):结果表中除了包括满足连接条件的行外,还包括左表的所有行;右外连接(RIGHTOUTERJOIN):结果表中除了包括满足连接条件的行外,还包括右表的所有行;完全外连

33、接(FULLOUTERJOIN):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。37SQL Server 数据库教程(第3版)5.5 连接查询连接查询【例5.24】采用左外连接查询教师任课情况。USEstscSELECTteacher.tname,ameFROMteacherLEFTJOINcourseON(teacher.tno=course.tno)查询结果:查询结果:tnamecno-刘林卓102周学莉NULL吴波203王冬琴205李伟80138SQL Server 数据库教程(第3版)5.5 连接查询连接查询【例5.25】采用右外连接查询教师任课情况。USEstscSELE

34、CTteacher.tname,ameFROMteacherRIGHTJOINcourseON(teacher.tno=course.tno)查询结果:查询结果:tnamecname-刘林卓数字电路吴波数据库系统王冬琴微机原理NULL计算机网络李伟高等数学39SQL Server 数据库教程(第3版)5.5 连接查询连接查询 3.交叉连接交叉连接【例5.26】采用交叉连接查询教师和课程所有可能组合。USEstscSELECTteacher.tname,ameFROMteacherCROSSJOINcourse查询结果:查询结果:40SQL Server 数据库教程(第3版)5.6 子查询子查询

35、在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。在WHERE子句或HAVING子句所指定条件中,可以使用另一个查询块的查询的结果作为条件的一部分,这种将一个查询块嵌套在另一个查询块的子句指定条件中的查询称为嵌套查询。T-SQL允许SELECT多层嵌套使用。5.6.1 IN子查询子查询IN子查询用于进行一个给定值是否在子查询结果集中的判断,语法格式如下:expressionNOTIN(subquery)当表达式expression与子查询subquery的结果集中的某个值相等时,IN谓词返回TRUE,否则返回FALSE。若使用了NOT,则返回的值相反。41SQL Ser

36、ver 数据库教程(第3版)5.6 子查询子查询【例5.27】查询选修了课程号为203的课程的学生情况。USEstscSELECT*FROMstudentWHEREstnoIN(SELECTstnoFROMscoreWHEREcno=203)查询结果查询结果:stnostnamestsexstbirthdayspecialitytc-122002谢萱女1992-09-11计算机52122004孙婷女1992-02-24计算机5042SQL Server 数据库教程(第3版)5.6 子查询子查询【例5.28】查询选修某课程的学生人数多于4人的教师姓名。USEstscSELECTtnameAS教师

37、姓名FROMteacherWHEREtnoIN(SELECTa.tnoFROMcoursea,scorebWHEREo=oGROUPBYa.tnoHAVINGCOUNT(a.tno)4)查询结果查询结果:教师姓名-李伟43SQL Server 数据库教程(第3版)5.6 子查询子查询 5.6.2 比较子查询比较子查询语法格式:语法格式:expression|=|!=|!ALL|SOME|ANY(subquery)其中,expression为要进行比较的表达式,subquery是子查询,ALL、SOME和ANY是对比较运算的限制。【例5.29】查询比所有计算机专业学生年龄都小的学生。USEsts

38、cSELECT*FROMstudentWHEREstbirthdayALL(SELECTstbirthdayFROMstudentWHEREspecialist=计算机)查询结果:查询结果:44stnostnamestsexstbirthdayspecialitytc-121002周映雪女1993-01-12通信49SQL Server 数据库教程(第3版)5.6 子查询子查询【例5.30】查询课程号801的成绩高于课程号205成绩的学生。USEstscSELECTstnoAS学号FROMscoreWHEREcno=801ANDgrade=ANY(SELECTgradeFROMscoreWHE

39、REcno=205)45查询结果:查询结果:学号-121001121002121005122002122004SQL Server 数据库教程(第3版)5.6 子查询子查询 5.6.3 EXISTS子查询子查询EXISTS谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,则EXISTS返回TRUE,否则返回FALSE,如果为NOTEXISTS,其返回值与EXIST相反,其语法格式如下:NOTEXISTS(subquery)46查询结果:查询结果:姓名-李贤友周映雪刘刚SQL Server 数据库教程(第3版)【例5.31】查询选修205课程的学生姓名。USEstscSELECTstn

40、ameAS姓名FROMstudentWHEREEXISTS(SELECT*FROMscoreWHEREscore.stno=student.stnoANDcno=205)5.6 子查询子查询【例5.32】查询所有认课教师姓名和学院。USEstscSELECTtnameAS教师姓名,schoolAS学院FROMteacheraWHEREEXISTS(SELECT*FROMcoursebWHEREa.tno=b.tno)47查询结果:查询结果:教师姓名学院-刘林卓通信学院吴波计算机学院王冬琴计算机学院李伟数学学院SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它

41、子句 1.UNION使用UNION可以将两个或多个SELECT查询的结果合并成一个结果集,其格式如下:|()UNIONALL|()UNIONALL|()n说明:说明:和(都是SELECT查询语句。使用UNION合并两个查询的结果集的基本规则是:所有查询中的列数和列的顺序必须相同。数据类型必须兼容。48SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句【例5.33】查询总学分大于50及学号小于1051的学生。USEstscSELECT*FROMstudentWHEREtc50UNIONSELECT*FROMstudentWHEREstno105149查询结

42、果:查询结果:SQL Server 数据库教程(第3版)tnostnamestsexstbirthdayspecialitytc-121001李贤友男1991-12-30通信52121002周映雪女1993-01-12通信49121005刘刚男1992-07-05通信50122002谢萱女1992-09-11计算机52 5.7 SELECT查询的其它子句查询的其它子句2.EXCEPT和和INTERSECT 语法格式:语法格式:|()EXCEPT|INTERSECT|()说明:说明:和都是SELECT查询语句。使用EXCEPT或INTERSECT的两个查询的结果集组合起来的基本规则:所有查询中的

43、列数和列的顺序必须相同。数据类型必须兼容。50SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句【例5.34】查询学过801课程但未学过102课程的学生。USEstscSELECTa.stnoAS学号,a.stnameAS姓名FROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDo=801EXCEPTSELECTa.stnoAS学号,a.stnameAS姓名FROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDo=10251学号姓名-122001郭

44、德强122002谢萱122004孙婷查询结果:查询结果:SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句【例5.35】查询既学过801课程又学过102课程的学生。USEstscSELECTa.stnoAS学号,a.stnameAS姓名FROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDo=801INTERSECTSELECTa.stnoAS学号,a.stnameAS姓名FROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDo=10252查询结果

45、:查询结果:学号姓名-121001李贤友121002周映雪121005刘刚SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句3.INTO子句子句INTO子句用于创建新表并将查询所得的结果插入新表中。语法格式:语法格式:INTOnew_table 说明:说明:new_table是要创建的新表名,创建的新表的结构由SELECT所选择的列决定,新表中的记录由SELECT的查询结果决定,若SELECT的查询结果为空,则创建一个只有结构而没有记录的空表。53SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句【例5.36】由s

46、tudent表创建st表,包括学号、姓名、性别、专业和学分。USEstscSELECTstno,stname,stsex,specialist,tcINTOstFROMstudent该语句通过INTO子句创建新表st,新表的结构和记录由SELECTINTO语句决定。54SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句4.CTE子句子句用于指定临时结果集,这些结果集称为公用表表达式(CommonTableExpression,CTE)。语法格式:语法格式:WITH,.n:=expression_name(column_name,.n)AS(CTE_que

47、ry_definition)说明:说明:expression_name:CTE的名称。column_name:在CTE中指定的列名,其个数要和CTE_query_definition返回的字段个数相同。CTE_query_definition:指定一个其结果集填充CTE的SELECT语句。CTE下方的SELECT语句可以直接查询CTE中的数据。55SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句【例5.37】使用CTE从score表中查询学号、课程号和成绩,并指定新列名为c_stno、c_cno、c_grade,再使用SELECT语句从CTE和stud

48、ent表中查询姓名为”孙婷”的学号、课程号和成绩。USEstsc;WITHcte_st(c_stno,c_cno,c_grade)AS(SELECTstno,cno,gradeFROMscore)SELECTc_stno,c_cno,c_gradeFROMcte_st,studentWHEREstudent.stname=孙婷ANDstudent.stno=cte_st.c_stno查询结果:查询结果:c_stnoc_cnoc_grade-122004203811220048018656SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句【例5.38】计算

49、从1到10的阶乘。WITHCfact(n,k)AS(SELECTn=1,k=1UNIONALLSELECTn=n+1,k=k*(n+1)FROMCfactWHEREn10)SELECTn,kFROMCfact57nk-11223642451206720750408403209362880103628800SQL Server 数据库教程(第3版)查询结果:查询结果:5.7 SELECT查询的其它子句查询的其它子句5.FROM子句子句语法格式:语法格式:FROM,n:=table_or_view_nameAStable_alias|rowset_functionAStable_alias/*行集

50、函数*/(bulk_column_alias,.n)|user_defined_functionAStable_alias/*指定表值函数*/|OPENXML/*XML文档*/|derived_tableAStable_alias(column_alias,.n)/*子查询*/|/*连接表*/|/*将行转换为列*/|/*将列转换为行*/58SQL Server 数据库教程(第3版)5.7 SELECT查询的其它子句查询的其它子句 说明:说明:table_or_view_name:指定SELECT语句要查询的表或视图。rowset_function:rowset_function是一个行集函数,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 网络技术 > 前端技术

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报