数据库系统概论第五版2学习教案.pptx

上传人:一*** 文档编号:82689113 上传时间:2023-03-26 格式:PPTX 页数:82 大小:316.50KB
返回 下载 相关 举报
数据库系统概论第五版2学习教案.pptx_第1页
第1页 / 共82页
数据库系统概论第五版2学习教案.pptx_第2页
第2页 / 共82页
点击查看更多>>
资源描述

《数据库系统概论第五版2学习教案.pptx》由会员分享,可在线阅读,更多相关《数据库系统概论第五版2学习教案.pptx(82页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、会计学1数据库系统概论数据库系统概论(giln)第五版第五版2第一页,共82页。第三章第三章第三章第三章 关系数据库标准关系数据库标准关系数据库标准关系数据库标准(biozh(biozh n)n)语言语言语言语言SQLSQL3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.4 数据查询3.5 数据更新(gngxn)3.6 空值的处理3.7 视图3.8 小结第1页/共82页第二页,共82页。3.4 3.4 数据数据数据数据(shj)(shj)查询查询查询查询 单表查询连接查询嵌套查询集合(jh)查询基于派生表的查询语句的一般形式 第2页/共82页第三页,共82页。连接连接(linji

2、)查询查询 n n连接查询:同时涉及(shj)两个以上的表的查询n n连接条件或连接谓词:用来连接两个表的条件n n 一般格式:n n.n n.BETWEEN.AND.n n连接字段:连接谓词中的列名称n n连接条件中的各连接字段类型必须是可比的,但名字不必相同第3页/共82页第四页,共82页。连接连接(linji)查询(续)查询(续)1.等值与非等值连接(linji)查询 2.自身连接(linji)3.外连接(linji)4.多表连接(linji)第4页/共82页第五页,共82页。1.等值与非等值连接等值与非等值连接(linji)查询查询 n n等值连接:连接运算符为=n n例 3.49 查

3、询(chxn)每个学生及其选修课程的情况n n SELECT Student.*,SC.*n n FROM Student,SCn n WHERE Student.Sno=SC.Sno;第5页/共82页第六页,共82页。等值与非等值连接等值与非等值连接(linji)查询查询(续)(续)Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade201215121李勇李勇男男20CS201215121192201215121李勇李勇男男20CS201215121285201215121李勇李勇男男20CS201215121388201215122刘晨刘晨女女19CS20

4、1215122290201215122刘晨刘晨女女19CS201215122380查询查询(chxn)结果:结果:第6页/共82页第七页,共82页。连接操作的执行连接操作的执行连接操作的执行连接操作的执行(zhxng)(zhxng)过程过程过程过程(1)嵌 套 循 环 法(NESTED-LOOP)首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组

5、。重复上述操作,直到表1中的全部元组都处理完毕注:连接操作的执行过程,在第九章 关系查询处理和查询优化中将比较详细地讲解,在爱课程网9.1节中还有连接操作的实现 的 动画。这里只是先简单介绍(jisho)一下。第7页/共82页第八页,共82页。连接操作的执行连接操作的执行(zhxng)过程(续)过程(续)(2)排 序 合 并 法(SORT-MERGE)常用于=连接首先按连接属性对表1和表2排序对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果(ji gu)表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查

6、询不再继续第8页/共82页第九页,共82页。连接操作的执行连接操作的执行(zhxng)过程(续)过程(续)(2 2)排序合并法(续)排序合并法(续)找找到到表表1 1的的第第二二条条元元组组,然然后后从从刚刚才才的的中中断断点点处处继继续续顺顺序序扫扫描描表表2 2,查查找找(ch(ch zhzh o)o)满满足足连连接接条条件件的的元元组组,找找到到后后就就将将表表1 1中中的的第第一一个个元元组组与与该该元元组组拼拼接接起起来来,形形成成结结果果表表中中一一个个元元组组。直直接接遇遇到到表表2 2中中大大于于表表1 1连连接接字字段段值值的的元元组组时时,对对表表2 2的查询不再继续的查询

7、不再继续重复上述操作,直到表重复上述操作,直到表1 1或表或表2 2中的全部元组都处理完毕为止中的全部元组都处理完毕为止 第9页/共82页第十页,共82页。连接操作的执行连接操作的执行(zhxng)过程(续)过程(续)(3 3)索引连接()索引连接(INDEX-JOININDEX-JOIN)对表对表2 2按连接字段建立索引按连接字段建立索引对对表表1 1中中的的每每个个元元组组,依依次次根根据据其其连连接接字字段段值值查查询询(chxn)(chxn)表表2 2的的索索引引,从从中中找找到到满满足足条条件件的的元元组组,找找到到后后就就将将表表1 1中中的的第第一一个个元元组组与与该该元元组组拼

8、拼接接起起来,形成结果表中一个元组来,形成结果表中一个元组第10页/共82页第十一页,共82页。等值与非等值连接等值与非等值连接(linji)查询(续)查询(续)n n自然连接(linji)n n例 3.50 对例 3.49用自然连接(linji)完成。n n SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Graden n FROM Student,SCn n WHERE Student.Sno=SC.Sno;第11页/共82页第十二页,共82页。等值与非等值连接等值与非等值连接(linji)查询(续)查询(续)n n一条SQL语句可以同时完成选择和

9、连接查询,这时WHERE子句是由连接谓词和选择谓词组成的复合条件(tiojin)。n n例 3.51 查询选修2号课程且成绩在90分以上的所有学生的学号和姓名。n n SELECT Student.Sno,Snamen n FROM Student,SCn n WHERE Student.Sno=SC.Sno AND n n SC.Cno=2 AND SC.Grade90;n n执行过程:n n先从SC中挑选出Cno=2并且Grade90的元组形成一个中间关系n n再和Student中满足连接条件(tiojin)的元组进行连接得到最终的结果关系第12页/共82页第十三页,共82页。连接连接(l

10、inji)查询(续)查询(续)1.1.等值与非等值连接等值与非等值连接(linji)(linji)查询查询 2.2.自身连接自身连接(linji)(linji)3.3.外连接外连接(linji)(linji)4.4.多表连接多表连接(linji)(linji)第13页/共82页第十四页,共82页。2.自身自身(zshn)连接连接 n n自身连接(linji):一个表与其自己进行连接(linji)n n需要给表起别名以示区别n n由于所有属性名都是同名属性,因此必须使用别名前缀n n例 3.52查询每一门课的间接先修课(即先修课的先修课)n n SELECT FIRST.Cno,SECOND.C

11、pnon n FROM Course FIRST,Course SECONDn n WHERE FIRST.Cpno=SECOND.Cno;第14页/共82页第十五页,共82页。自身自身自身自身(zshn)(zshn)连接(续)连接(续)连接(续)连接(续)FIRST FIRST表(表(CourseCourse表)表)SECONDSECOND表(表(CourseCourse表)表)课程号课程号Cno课程名课程名Cname先行课先行课Cpno学分学分Ccredit1数据库数据库542数学数学23信息系统信息系统144操作系统操作系统635数据结构数据结构746数据处理数据处理27PASCAL语言

12、语言64课程号课程号Cno课程名课程名Cname先行课先行课Cpno学分学分Ccredit1数据库数据库542数学数学23信息系统信息系统144操作系统操作系统635数据结构数据结构746数据处理数据处理27PASCAL语言语言64第15页/共82页第十六页,共82页。自身自身自身自身(zshn)(zshn)连接(续)连接(续)连接(续)连接(续)查询(chxn)结果:CnoPcno173556第16页/共82页第十七页,共82页。连接连接连接连接(linji)(linji)查询(续)查询(续)查询(续)查询(续)1.等值与非等值连接(linji)查询 2.自身连接(linji)3.外连接(l

13、inji)4.多表连接(linji)第17页/共82页第十八页,共82页。3.外连接外连接(linji)n n外连接与普通连接的区别n n普通连接操作只输出满足连接条件的元组n n外连接操作以指定(zhdng)表为连接主体,将主体表中不满足连接条件的元组一并输出n n 左外连接n n列出左边关系中所有的元组 n n 右外连接n n列出右边关系中所有的元组 n n 第18页/共82页第十九页,共82页。外连接外连接(linji)(续)(续)例 3.53 改写(gixi)例 3.49 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM S

14、tudent LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);第19页/共82页第二十页,共82页。外连接外连接(linji)(续)(续)执 行(zhxng)结果:Student.Sno SnameSsexSageSdeptCnoGrade201215121李勇李勇男男20CS192201215121李勇李勇男男20CS285201215121李勇李勇男男20CS388201215122刘晨刘晨女女19CS290201215122刘晨刘晨女女19CS380201215123王敏王敏女女18MANULLNULL201215125张立张立男男19ISNULLNUL

15、L第20页/共82页第二十一页,共82页。连接连接连接连接(linji)(linji)查询(续)查询(续)查询(续)查询(续)1.等值与非等值连接查询(chxn)2.自身连接3.外连接4.多表连接第21页/共82页第二十二页,共82页。4.4.多表连接多表连接多表连接多表连接(linji)(linji)n n多表连接:两个以上的表进行连接多表连接:两个以上的表进行连接n n 例例3.543.54查询每个学生的学号、姓名、选修的课程查询每个学生的学号、姓名、选修的课程(kchng)(kchng)名及成绩名及成绩n n SELECT Student.Sno,Sname,Cname,Grade SE

16、LECT Student.Sno,Sname,Cname,Graden n FROM Student,SC,Course /*FROM Student,SC,Course /*多表连接多表连接*/*/n n WHERE Student.Sno=SC.Sno WHERE Student.Sno=SC.Sno n n AND SC.Cno=Course.Cno;AND SC.Cno=Course.Cno;n n 第22页/共82页第二十三页,共82页。3.4 数据数据(shj)查询查询 单表查询连接(linji)查询嵌套查询集合查询基于派生表的查询语句的一般形式 第23页/共82页第二十四页,共8

17、2页。嵌套查询嵌套查询(chxn)(续)(续)n n嵌套查询概述n n一个SELECT-FROM-WHERE语句(yj)称为一个查询块n n将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询n n SELECT Sname /*外层查询/父查询*/n n FROM Studentn n WHERE Sno INn n (SELECT Sno /*内层查询/子查询*/n n FROM SCn n WHERE Cno=2);n n 第24页/共82页第二十五页,共82页。嵌套查询嵌套查询嵌套查询嵌套查询(chxn)(chxn)(续)(续)(续)(续)n n上

18、层(shngcng)的查询块称为外层查询或父查询n n下层查询块称为内层查询或子查询n nSQL语言允许多层嵌套查询n n即一个子查询中还可以嵌套其他子查询n n子查询的限制n n不能使用ORDER BY子句第25页/共82页第二十六页,共82页。嵌套查询求解嵌套查询求解嵌套查询求解嵌套查询求解(qi ji)(qi ji)方法方法方法方法n n不相关子查询(chxn):n n 子查询(chxn)的查询(chxn)条件不依赖于父查询(chxn)n n由里向外 逐层处理。即每个子查询(chxn)在上一级查询(chxn)处理之前求解,子查询(chxn)的结果用于建立其父查询(chxn)的查找条件。第

19、26页/共82页第二十七页,共82页。嵌套查询嵌套查询(chxn)求解方法(续)求解方法(续)n n相关子查询:子查询的查询条件依赖于父查询n n首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果(ji gu)表n n然后再取外层表的下一个元组n n重复这一过程,直至外层表全部检查完为止第27页/共82页第二十八页,共82页。嵌套查询嵌套查询(chxn)1.带有IN谓词(wi c)的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词(wi c)的子查询 4.带有EXISTS谓词(wi c)的子查询第2

20、8页/共82页第二十九页,共82页。1.1.带有带有带有带有ININ谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 例例 3.55 3.55 查询与查询与“刘晨刘晨”在同一个系学习在同一个系学习(xux)(xux)的学生。的学生。此查询要求可以分步来完成此查询要求可以分步来完成 确定确定“刘晨刘晨”所在系名所在系名 SELECT Sdept SELECT Sdept FROM Student FROM Student WHERE Sname=WHERE Sname=刘晨刘晨;结果为:结果为:CS CS第29页/共82页第三十页,共82页。带有带有IN谓词谓词(wi c

21、)的子查询(续)的子查询(续)查找所有查找所有(su(su y y u)u)在在CSCS系学习的学生。系学习的学生。SELECT Sno,Sname,Sdept SELECT Sno,Sname,Sdept FROM Student FROM Student WHERE Sdept=CS;WHERE Sdept=CS;结果为:结果为:SnoSnameSdept201215121李勇李勇CS201215122刘晨刘晨CS第30页/共82页第三十一页,共82页。带有带有带有带有ININ谓词谓词谓词谓词(wi c)(wi c)的子查询(续)的子查询(续)的子查询(续)的子查询(续)将第一步查询嵌入将

22、第一步查询嵌入(qin r)(qin r)到第二步查询的条件中到第二步查询的条件中 SELECT Sno,Sname,Sdept SELECT Sno,Sname,Sdept FROM StudentFROM Student WHERE Sdept INWHERE Sdept IN (SELECT Sdept (SELECT Sdept FROM Student FROM Student WHERE Sname=WHERE Sname=刘晨刘晨););此查询为不相关子查询。此查询为不相关子查询。第31页/共82页第三十二页,共82页。带有带有IN谓词谓词(wi c)的子查询(续)的子查询(续)

23、用自身连接完成例 3.55查询(chxn)要求 SELECT S1.Sno,S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept=S2.Sdept AND S2.Sname=刘晨;第32页/共82页第三十三页,共82页。带有带有IN谓词谓词(wi c)的子查询(续)的子查询(续)例例 3.56 3.56查询选修了课程名为查询选修了课程名为“信息系统信息系统”的学生学号和姓名的学生学号和姓名(xngmng)(xngmng)SELECT Sno,Sname SELECT Sno,Sname 最后在最后在StudentStudent关

24、系中关系中 FROM Student FROM Student 取出取出SnoSno和和SnameSname WHERE Sno INWHERE Sno IN (SELECT Sno (SELECT Sno 然后在然后在SCSC关系中找出选关系中找出选 FROM SC FROM SC 修了修了3 3号课程的学生学号号课程的学生学号 WHERE Cno IN WHERE Cno IN (SELECT Cno (SELECT Cno 首先在首先在CourseCourse关系中找出关系中找出 FROM Course “FROM Course “信息系统信息系统”的课程号,为的课程号,为3 3号号 W

25、HERE Cname=WHERE Cname=信息系统信息系统 ););第33页/共82页第三十四页,共82页。带有带有IN谓词谓词(wi c)的子查询(续)的子查询(续)用连接查询用连接查询(chxn)(chxn)实现实现 例例 3.56 3.56:SELECT Sno,Sname SELECT Sno,Sname FROM Student,SC,Course FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND SC.Cno=Course.

26、Cno AND Course.Cname=Course.Cname=信息系统信息系统;第34页/共82页第三十五页,共82页。嵌套查询嵌套查询(chxn)1.带有IN谓词(wi c)的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词(wi c)的子查询 4.带有EXISTS谓词(wi c)的子查询第35页/共82页第三十六页,共82页。2.带有比较带有比较(bjio)运算符的子查询运算符的子查询n n 当能确切知道内层查询返回单值时,可用比较运算符(当能确切知道内层查询返回单值时,可用比较运算符(,=,=,!=!=或或)。)。n n在在 例例 3.55 3.55中,由

27、于一个学生只可能在一个系学习中,由于一个学生只可能在一个系学习(xux)(xux),则可以用,则可以用 =代替代替IN IN:n n SELECT Sno,Sname,Sdept SELECT Sno,Sname,Sdeptn n FROM Student FROM Studentn n WHERE Sdept =WHERE Sdept =n n (SELECT Sdept (SELECT Sdeptn n FROM Student FROM Studentn n WHERE Sname=WHERE Sname=刘晨刘晨););第36页/共82页第三十七页,共82页。带有比较带有比较带有比较带

28、有比较(b(b jio)jio)运算符的子查询(续)运算符的子查询(续)运算符的子查询(续)运算符的子查询(续)例例 3.57 3.57 找出每个学生找出每个学生(xu sheng)(xu sheng)超过他选修课程平均成绩的课程号。超过他选修课程平均成绩的课程号。SELECT Sno,Cno SELECT Sno,Cno FROM SC x FROM SC x WHERE Grade=(SELECT AVG WHERE Grade=(SELECT AVG(GradeGrade)FROM SC y FROM SC y WHERE y.Sno=x.Sno);WHERE y.Sno=x.Sno);

29、相关(xinggun)子查询第37页/共82页第三十八页,共82页。带有比较带有比较(bjio)运算符的子查询(续)运算符的子查询(续)n n可能的执行(zhxng)过程 n n从外层查询中取出SC的一个元组x,将元组x的Sno值(201215121)传送给内层查询。n n SELECT AVG(Grade)n n FROM SC yn n WHERE y.Sno=201215121;第38页/共82页第三十九页,共82页。带有比较带有比较(bjio)运算符的子查询(续)运算符的子查询(续)n n可能(knng)的执行过程(续)n n执行内层查询,得到值88(近似值),用该值代替内层查询,得到

30、外层查询:n n SELECT Sno,Cnon n FROM SC xn n WHERE Grade=88;第39页/共82页第四十页,共82页。带有比较带有比较带有比较带有比较(b(b jio)jio)运算符的子查询(续)运算符的子查询(续)运算符的子查询(续)运算符的子查询(续)vv可能的执行可能的执行(zhxng)(zhxng)过程(续)过程(续)vv执行执行(zhxng)(zhxng)这个查询,得到这个查询,得到vv (201215121,1201215121,1)vv (201215121,3201215121,3)vv然后外层查询取出下一个元组重复做上述然后外层查询取出下一个元组

31、重复做上述至至步骤,直到外层步骤,直到外层的的SCSC元组全部处理完毕。结果为元组全部处理完毕。结果为:vv (201215121,1201215121,1)vv (201215121,3201215121,3)vv (201215122,2201215122,2)第40页/共82页第四十一页,共82页。嵌套查询嵌套查询嵌套查询嵌套查询(chxn)(chxn)1.带有IN谓词(wi c)的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词(wi c)的子查询 4.带有EXISTS谓词(wi c)的子查询第41页/共82页第四十二页,共82页。带有带有带有带有ANYANY

32、(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)使用ANY或ALL谓词时必须同时使用比较运算语义为:ANY大于子查询(chxn)结果中的某个值 ALL大于子查询(chxn)结果中的所有值 ANY小于子查询(chxn)结果中的某个值 =ANY大于等于子查询(chxn)结果中的某个值 =ALL大于等于子查询(chxn)结果中的所有值第42页/共82页第四十三页,共82页。带有带有带有带有ANYANY(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子

33、查询的子查询 (续)(续)(续)(续)使用ANY或ALL谓词时必须同时使用比较运算语义为(续)=ANY小于等于子查询结果中的某个(mu)值 =ALL小于等于子查询结果中的所有值=ANY等于子查询结果中的某个(mu)值 =ALL等于子查询结果中的所有值(通常没有实际意义)!=(或)ANY不等于子查询结果中的某个(mu)值!=(或)ALL不等于子查询结果中的任何一个值第43页/共82页第四十四页,共82页。带有带有带有带有ANYANY(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)例例 3.58 3.5

34、8 查询查询(chxn)(chxn)非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄 SELECT Sname,Sage SELECT Sname,Sage FROM Student FROM Student WHERE Sage ANY(SELECT Sage WHERE Sage ANY(SELECT Sage FROM Student FROM Student WHERE Sdept=CS)WHERE Sdept=CS)AND Sdept CS ;/*AND Sdept CS ;/*父查询父查询(chxn)(

35、chxn)块中的条件块中的条件*/*/第44页/共82页第四十五页,共82页。带有带有带有带有ANYANY(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)结果:结果:执行过程:执行过程:(1 1)首先处理子查询,找出)首先处理子查询,找出CSCS系中所有学生的年龄系中所有学生的年龄(ninlng)(ninlng),构成一个集合(,构成一个集合(20,1920,19)(2 2)处理父查询,找所有不是)处理父查询,找所有不是CSCS系且年龄系且年龄(ninlng)(ninlng)小于小于 20 20 或

36、或 19 19的学生的学生SnameSage王敏王敏18张立张立19第45页/共82页第四十六页,共82页。带有带有带有带有ANYANY(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)用聚集(jj)函数实现例 3.58 SELECT Sname,Sage FROM Student WHERE Sage (SELECT MAX(Sage)FROM Student WHERE Sdept=CS)AND Sdept CS;第46页/共82页第四十七页,共82页。带有带有带有带有ANYANY(SOMESOM

37、E)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)例例 3.59 3.59 查询查询(chxn)(chxn)非计算机科学系中比计算机科学系所非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄。有学生年龄都小的学生姓名及年龄。方法一:用方法一:用ALLALL谓词谓词 SELECT Sname,Sage SELECT Sname,Sage FROM Student FROM Student WHERE Sage ALL WHERE Sage ALL (SELECT Sage (SELECT Sage FROM

38、 Student FROM Student WHERE Sdept=CS)WHERE Sdept=CS)AND Sdept CS;AND Sdept CS;第47页/共82页第四十八页,共82页。带有带有带有带有ANYANY(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)方法二:用聚集方法二:用聚集(jj)(jj)函数函数 SELECT Sname,Sage SELECT Sname,Sage FROM Student FROM Student WHERE Sage WHERE Sage (SELE

39、CT MIN(Sage)(SELECT MIN(Sage)FROM Student FROM Student WHERE Sdept=CS)WHERE Sdept=CS)AND Sdept CS;AND Sdept CS;第48页/共82页第四十九页,共82页。带有带有带有带有ANYANY(SOMESOME)或)或)或)或ALLALL谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询 (续)(续)(续)(续)表表3.7 ANY3.7 ANY(或(或SOMESOME),),ALLALL谓词与聚集函数、谓词与聚集函数、ININ谓词的等谓词的等价转换价转换(zhu(zhu nh

40、un)nhun)关系关系 =或或!=ANY IN -MAXMIN=MINALL -NOT IN MINMAX=MAX第49页/共82页第五十页,共82页。嵌套查询嵌套查询嵌套查询嵌套查询(chxn)(chxn)1.带有IN谓词(wi c)的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词(wi c)的子查询 4.带有EXISTS谓词(wi c)的子查询第50页/共82页第五十一页,共82页。带有带有带有带有EXISTSEXISTS谓词谓词谓词谓词(wi c)(wi c)的子查询的子查询的子查询的子查询n n EXISTS谓词n n存在量词 n n带有EXISTS谓词的

41、子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。n n若内层查询结果非空,则外层的WHERE子句返回真值n n若内层查询结果为空,则外层的WHERE子句返回假值n n由EXISTS引出的子查询,其目标列表达式通常(tngchng)都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。第51页/共82页第五十二页,共82页。n nNOT EXISTS谓词n n若内层(ni cn)查询结果非空,则外层的WHERE子句返回假值n n若内层(ni cn)查询结果为空,则外层的WHERE子句返回真值带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询

42、(续)第52页/共82页第五十三页,共82页。带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询(续)例例 3.60 3.60查询所有选修了查询所有选修了1 1号课程的学生姓名号课程的学生姓名(xngmng)(xngmng)。思路分析:思路分析:本查询涉及本查询涉及StudentStudent和和SCSC关系关系在在StudentStudent中依次取每个元组的中依次取每个元组的SnoSno值,用此值去检查值,用此值去检查SCSC表表若若SCSC中存在这样的元组,其中存在这样的元组,其SnoSno值等于此值等于此Student.SnoStudent.Sno值,并且其值,并且其Cno

43、=1Cno=1,则取此,则取此Student.SnameStudent.Sname送入结果表送入结果表 SELECT Sname SELECT Sname FROM Student FROM Student WHERE EXISTS WHERE EXISTS (SELECT*(SELECT*FROM SC FROM SC WHERE Sno=Student.Sno AND Cno=1);WHERE Sno=Student.Sno AND Cno=1);第53页/共82页第五十四页,共82页。带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询(续)例例 3.61 3.61 查询没有查

44、询没有(mi y(mi y u)u)选修选修1 1号课程的学生姓名。号课程的学生姓名。SELECT Sname SELECT Sname FROM Student FROM Student WHERE NOT EXISTS WHERE NOT EXISTS (SELECT*(SELECT*FROM SC FROM SC WHERE Sno=Student.Sno AND Cno=1);WHERE Sno=Student.Sno AND Cno=1);第54页/共82页第五十五页,共82页。带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询(续)n n 不同形式的查询间的替换n n一

45、些带EXISTS或NOT EXISTS谓词(wi c)的子查询不能被其他形式的子查询等价替换n n所有带IN谓词(wi c)、比较运算符、ANY和ALL谓词(wi c)的子查询都能用带EXISTS谓词(wi c)的子查询等价替换n n 用EXISTS/NOT EXISTS实现全称量词(难点)n nSQL语言中没有全称量词(For all)n n可以把带有全称量词的谓词(wi c)转换为等价的带有存在量词的谓词(wi c):n n (x)P (x(P)n n 第55页/共82页第五十六页,共82页。带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询(续)例例 3.55 3.55查询查

46、询(chxn)(chxn)与与“刘晨刘晨”在同一个系学习的学生。在同一个系学习的学生。可以用带可以用带EXISTSEXISTS谓词的子查询谓词的子查询(chxn)(chxn)替换:替换:SELECT Sno,Sname,Sdept SELECT Sno,Sname,Sdept FROM Student S1 FROM Student S1 WHERE EXISTS WHERE EXISTS (SELECT*(SELECT*FROM Student S2 FROM Student S2 WHERE S2.Sdept=S1.Sdept AND WHERE S2.Sdept=S1.Sdept AND

47、 S2.Sname=S2.Sname=刘晨刘晨););第56页/共82页第五十七页,共82页。带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询(续)例例 3.62 3.62 查询选修了全部查询选修了全部(qunb)(qunb)课程的学生姓名。课程的学生姓名。SELECT Sname SELECT Sname FROM Student FROM Student WHERE NOT EXISTS WHERE NOT EXISTS (SELECT*(SELECT*FROM Course FROM Course WHERE NOT EXISTS WHERE NOT EXISTS (SEL

48、ECT*(SELECT*FROM SC FROM SC WHERE Sno=Student.Sno WHERE Sno=Student.Sno AND Cno=Course.Cno AND Cno=Course.Cno ););参参见见爱爱课课程程网网数数据据库库系系统统概概论论数数据据查查询询节节动动画画EXISTSEXISTS子子查查询询第57页/共82页第五十八页,共82页。带有带有EXISTS谓词谓词(wi c)的子查询(续)的子查询(续)n n 用EXISTS/NOT EXISTS实现逻辑蕴涵(难点)n nSQL语言中没有(mi yu)蕴涵(Implication)逻辑运算n n可以

49、利用谓词演算将逻辑蕴涵谓词等价转换为:n n p q pq 第58页/共82页第五十九页,共82页。带有带有带有带有EXISTSEXISTS谓词谓词谓词谓词(wi c)(wi c)的子查询(续)的子查询(续)的子查询(续)的子查询(续)例例 3.63 3.63查询至少选修了学生查询至少选修了学生201215122201215122选修的全部选修的全部(qunb)(qunb)课程的学生号码。课程的学生号码。解题思路:解题思路:用逻辑蕴涵表达:查询学号为用逻辑蕴涵表达:查询学号为x x的学生,对所有的课程的学生,对所有的课程y y,只要,只要201215122201215122学生选修了课程学生选

50、修了课程y y,则,则x x也选修了也选修了y y。形式化表示:形式化表示:用用P P表示谓词表示谓词“学生学生201215122201215122选修了课程选修了课程y”y”用用q q表示谓词表示谓词“学生学生x x选修了课程选修了课程y”y”则上述查询为则上述查询为:(y y)p p q q 第59页/共82页第六十页,共82页。带有带有带有带有EXISTSEXISTS谓词谓词谓词谓词(wi c)(wi c)的子查询(续)的子查询(续)的子查询(续)的子查询(续)n n等价变换:等价变换:n n (y y)p p q q (y y(p p q q)n n (y y(p p q q)n n

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

当前位置:首页 > 管理文献 > 管理工具

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com