关系数据库标准语言SQL-2

上传人:宝路 文档编号:48371463 上传时间:2018-07-14 格式:PPT 页数:78 大小:531.87KB
返回 下载 相关 举报
关系数据库标准语言SQL-2_第1页
第1页 / 共78页
关系数据库标准语言SQL-2_第2页
第2页 / 共78页
关系数据库标准语言SQL-2_第3页
第3页 / 共78页
关系数据库标准语言SQL-2_第4页
第4页 / 共78页
关系数据库标准语言SQL-2_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《关系数据库标准语言SQL-2》由会员分享,可在线阅读,更多相关《关系数据库标准语言SQL-2(78页珍藏版)》请在金锄头文库上搜索。

1、数据库系统概论 An Introduction to Database System第三章 关系数据库标准语言SQL (续1)3.4 数据查询 v3.4.1 单表查询v3.4.2 连接查询v3.4.3 嵌套查询v3.4.4 集合查询v3.4.5 Select语句的一般形式 3.4.2 连接查询 v 连接查询:同时涉及多个表的查询v 连接条件或连接谓词:用来连接两个表的条件一般格式:n . .n . BETWEEN . AND .v 连接字段:连接谓词中的列名称n 连接条件中的各连接字段类型必须是可比的,但名字不必是相同的连接操作的执行过程v 嵌套循环法(NESTED-LOOP) 首先在表1中找

2、到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。 重复上述操作,直到表1中的全部元组都处理完毕 排序合并法(SORT-MERGE)常用于=连接 首先按连接属性对表1和表2排序 对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,

3、对表2的查询不再继续排序合并法 找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续 重复上述操作,直到表1或表2中的全部元组都处理完毕为止 索引连接(INDEX-JOIN) 对表2按连接字段建立索引 对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组 连接查询(续)一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接一、等

4、值与非等值连接查询 v等值连接:连接运算符为=例33 查询每个学生及其选修课程的情况SELECT Student.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;等值与非等值连接查询(续)Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade200215121李勇男20CS200215121192200215121李勇男20CS200215121285200215121李勇男20CS200215121388200215122刘晨女19CS200215122290200215122刘晨女19CS20021512238

5、0查询结果:等值与非等值连接查询(续)v自然连接:例34 对例33用自然连接完成。SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROM Student,SCWHERE Student.Sno = SC.Sno;连接查询(续)一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接二、自身连接 v 自身连接:一个表与其自己进行连接v 需要给表起别名以示区别v 由于所有属性名都是同名属性,因此必须使用别名前缀例35查询每一门课的间接先修课(即先修课的先修课)SELECT FIRST.Cno,SECOND.CpnoFROM Cour

6、se FIRST,Course SECONDWHERE FIRST.Cpno = SECOND.Cno;自身连接(续)FIRST表(Course表) Cno CnameCpnoCcredit1数据库 5 4 2数学23信息系统 1 44操作系统 6 35数据结构 7 46数据处理 27PASCAL语言 6 4自身连接(续)Cno CnameCpnoCcredit1数据库 5 4 2数学23信息系统 1 44操作系统 6 35数据结构 7 46数据处理 27PASCAL语言 6 4SECOND表(Course表) 自身连接(续)查询结果:CnoPcno173556连接查询(续)一、等值与非等值连

7、接查询 二、自身连接 三、外连接 四、复合条件连接三、外连接v 外连接与普通连接的区别 普通连接操作只输出满足连接条件的元组 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出例 36 改写例33SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno); 外连接(续) 执行结果: Student.SnoSnameSsexSageSdeptCnoGrade200215121李勇男20CS192200215121李勇男20CS285

8、200215121李勇男20CS388200215122刘晨女19CS290200215122刘晨女19CS380200215123王敏女18MANULLNULL200215125张立男19ISNULLNULL外连接(续) v 左外连接 列出左边关系(如本例Student)中所有的元组 v 右外连接 列出右边关系中所有的元组 连接查询(续)一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接四、复合条件连接v复合条件连接:WHERE子句中含多个连接条 件例37查询选修2号课程且成绩在90分以上的所有学生SELECT Student.Sno, Sname FROM Student

9、, SC WHERE Student.Sno = SC.Sno AND /* 连接谓词*/SC.Cno= 2 AND SC.Grade 90; /* 其他限定条件 */复合条件连接(续)例38查询每个学生的学号、姓名、选修的课程名及成 绩SELECT Student.Sno,Sname,Cname,GradeFROM Student,SC,Course /*多表连接*/WHERE Student.Sno = SC.Sno and SC.Cno = Course.Cno;3.4 数据查询 v3.4.1 单表查询v3.4.2 连接查询v3.4.3 嵌套查询v3.4.4 集合查询v3.4.5 Sel

10、ect语句的一般形式 嵌套查询(续)v嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询嵌套查询(续)SELECT Sname /*外层查询/父 查询*/FROM StudentWHERE Sno IN(SELECT Sno /*内层查询/子查询 */FROM SCWHERE Cno= 2 );嵌套查询(续) 子查询的限制不能使用ORDER BY子句 层层嵌套方式反映了 SQL语言的结构化 有些嵌套查询可以用连接运算替代嵌套查询求解方法v不相关子查询:子查询的查询条件不依赖于父查询n

11、由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。嵌套查询求解方法(续)v相关子查询:子查询的查询条件依赖于父查询 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表 然后再取外层表的下一个元组 重复这一过程,直至外层表全部检查完为止3.4.3 嵌套查询一、带有IN谓词的子查询 二、 带有比较运算符的子查询三、 带有ANY(SOME)或ALL谓词的子查询四、 带有EXISTS谓词的子查询一、带有IN谓词的子查询例39 查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完

12、成 确定“刘晨”所在系名 SELECT Sdept FROM Student WHERE Sname= 刘晨 ;结果为: CS带有IN谓词的子查询(续) 查找所有在IS系学习的学生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept= CS ; 结果为:SnoSnameSdept200215121李勇CS200215122刘晨CS带有IN谓词的子查询(续)将第一步查询嵌入到第二步查询的条件中SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept IN(SELECT SdeptFROM StudentWHERE S

13、name= 刘晨 );此查询为不相关子查询。带有IN谓词的子查询(续)用自身连接完成例39查询要求SELECT S1.Sno,S1.Sname,S1.SdeptFROM Student S1,Student S2WHERE S1.Sdept = S2.Sdept ANDS2.Sname = 刘晨;带有IN谓词的子查询(续)例40查询选修了课程名为“信息系统”的学生学号和姓名SELECT Sno,Sname 最后在Student关系中FROM Student 取出Sno和SnameWHERE Sno IN(SELECT Sno 然后在SC关系中找出选FROM SC 修了3号课程的学生学号WHER

14、E Cno IN(SELECT Cno 首先在Course关系中找 出FROM Course “信息系统”的课程号,为 3号WHERE Cname= 信息系统);带有IN谓词的子查询(续)用连接查询实现例40SELECT Sno,SnameFROM Student,SC,CourseWHERE Student.Sno = SC.Sno ANDSC.Cno = Course.Cno ANDCourse.Cname=信息系统;3.4.3 嵌套查询一、带有IN谓词的子查询 二、 带有比较运算符的子查询三、 带有ANY(SOME)或ALL谓词的子查询四、 带有EXISTS谓词的子查询二、带有比较运算符

15、的子查询v 当能确切知道内层查询返回单值时,可用比较运算符(,=,)。v与ANY或ALL谓词配合使用带有比较运算符的子查询(续)例:假设一个学生只可能在一个系学习,并且必须属于一 个系,则在例39可以用 = 代替IN :SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept =(SELECT SdeptFROM StudentWHERE Sname= 刘晨);带有比较运算符的子查询(续)子查询一定要跟在比较符之后错误的例子:SELECT Sno,Sname,SdeptFROM StudentWHERE ( SELECT SdeptFROM StudentWHERE Sname= 刘晨 )

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号