(高等教育)数据库系统概论第五版教学课件:第3章b.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《(高等教育)数据库系统概论第五版教学课件:第3章b.ppt》由用户(小豆芽)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高等教育 数据库 系统 概论 第五 教学 课件
- 资源描述:
-
1、数据库系统概论 An Introduction to Database System 第三章第三章 关系数据库标准语言关系数据库标准语言SQL (续续1) 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结 3.4 数据查询 3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5基于派生表的查询 3.4.5 Select语句的一般形式 3.4.2 连接查询 连接查询:同时涉及两个以上的表的查询 连接条件或连接谓词:用来连接
2、两个表的条件 一般格式: . . . BETWEEN . AND . 连接字段:连接谓词中的列名称 连接条件中的各连接字段类型必须是可比的,但名字不必相同 连接查询(续) 1.等值与非等值连接查询 2.自身连接 3.外连接 4.多表连接 1. 等值与非等值连接查询 等值连接:连接运算符为= 例 3.49 查询每个学生及其选修课程的情况 SELECT Student.*, SC.* FROM Student, SC WHERE Student.Sno = SC.Sno; 等值与非等值连接查询(续) Student.Sno Sname Ssex Sage Sdept SC.Sno Cno Grad
3、e 201215121 李勇李勇 男男 20 CS 201215121 1 92 201215121 李勇李勇 男男 20 CS 201215121 2 85 201215121 李勇李勇 男男 20 CS 201215121 3 88 201215122 刘晨刘晨 女女 19 CS 201215122 2 90 201215122 刘晨刘晨 女女 19 CS 201215122 3 80 查询结果:查询结果: 连接操作的执行过程 (1)嵌套循环法(NESTED-LOOP) 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元 组,找到后就将表1中的第一个元组与该元组拼接起
4、来,形成结果表中一个元组。 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找 满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成 结果表中一个元组。 重复上述操作,直到表1中的全部元组都处理完毕 注:连接操作的执行过程,在第九章 关系查询处理和查询优化中将比较详细 地讲解,在爱课程网9.1节中还有连接操作的实现 的 动画。这里只是先 简单介绍一下。 连接操作的执行过程(续) (2)排序合并法(SORT-MERGE) 常用于=连接 首先按连接属性对表1和表2排序 对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找 到后就将表1中的第一
5、个元组与该元组拼接起来,形成结果表中一个元组。当 遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续 连接操作的执行过程(续) (2)排序合并法(续) 找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足 连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结 果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询 不再继续 重复上述操作,直到表1或表2中的全部元组都处理完毕为止 连接操作的执行过程(续) (3)索引连接(INDEX-JOIN) 对表2按连接字段建立索引 对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到
6、满 足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结 果表中一个元组 等值与非等值连接查询(续) 自然连接 例 3.50 对例 3.49用自然连接完成。 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno; 等值与非等值连接查询(续) 一条SQL语句可以同时完成选择和连接查询,这时WHERE子句是由连接谓 词和选择谓词组成的复合条件。 例 3.51 查询选修2号课程且成绩在90分以上的所有学生的学号和姓名。 SELECT Student.Sn
7、o, Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno= 2 AND SC.Grade90; 执行过程: 先从SC中挑选出Cno=2并且Grade90的元组形成一个中间关系 再和Student中满足连接条件的元组进行连接得到最终的结果关 系 连接查询(续) 1.等值与非等值连接查询 2.自身连接 3.外连接 4.多表连接 2. 自身连接 自身连接:一个表与其自己进行连接 需要给表起别名以示区别 由于所有属性名都是同名属性,因此必须使用别名前缀 例 3.52查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.
8、Cno, SECOND.Cpno FROM Course FIRST, Course SECOND WHERE FIRST.Cpno = SECOND.Cno; 自身连接(续) FIRST表(Course表) SECOND表(Course表) 课程号课程号 Cno 课程名课程名 Cname 先行课先行课 Cpno 学分学分 Ccredit 1 数据库数据库 5 4 2 数学数学 2 3 信息系统信息系统 1 4 4 操作系统操作系统 6 3 5 数据结构数据结构 7 4 6 数据处理数据处理 2 7 PASCAL 语言语言 6 4 课程号课程号 Cno 课程名课程名 Cname 先行课先行课
9、Cpno 学分学分 Ccredit 1 数据库数据库 5 4 2 数学数学 2 3 信息系统信息系统 1 4 4 操作系统操作系统 6 3 5 数据结构数据结构 7 4 6 数据处理数据处理 2 7 PASCAL 语言语言 6 4 自身连接(续) 查询结果: Cno Pcno 1 7 3 5 5 6 连接查询(续) 1.等值与非等值连接查询 2.自身连接 3.外连接 4.多表连接 3. 外连接 外连接与普通连接的区别 普通连接操作只输出满足连接条件的元组 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出 左外连接 列出左边关系中所有的元组 右外连接 列出右边关系中所有的元组
10、 外连接(续) 例 3. 53 改写例 3.49 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno); 外连接(续) 执行结果: Student.Sno Sname Ssex Sage Sdept Cno Grade 201215121 李勇李勇 男男 20 CS 1 92 201215121 李勇李勇 男男 20 CS 2 85 201215121 李勇李勇 男男 20 CS 3 88 201215122 刘晨刘晨 女女 19 CS 2
11、 90 201215122 刘晨刘晨 女女 19 CS 3 80 201215123 王敏王敏 女女 18 MA NULL NULL 201215125 张立张立 男男 19 IS NULL NULL 连接查询(续) 1.等值与非等值连接查询 2.自身连接 3.外连接 4.多表连接 4. 多表连接 多表连接:两个以上的表进行连接 例3.54查询每个学生的学号、姓名、选修的课程名及成绩 SELECT Student.Sno, Sname, Cname, Grade FROM Student, SC, Course /*多表连接*/ WHERE Student.Sno = SC.Sno AND S
12、C.Cno = Course.Cno; 3.4 数据查询 3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5基于派生表的查询 3.4.5 Select语句的一般形式 嵌套查询(续) 嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件 中的查询称为嵌套查询 SELECT Sname /*外层查询/父查询*/ FROM Student WHERE Sno IN ( SELECT Sno /*内层查询/子查询*/ FROM SC WHERE Cno= 2 );
13、嵌套查询(续) 上层的查询块称为外层查询或父查询 下层查询块称为内层查询或子查询 SQL语言允许多层嵌套查询 即一个子查询中还可以嵌套其他子查询 子查询的限制 不能使用ORDER BY子句 嵌套查询求解方法 不相关子查询: 子查询的查询条件不依赖于父查询 由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的 结果用于建立其父查询的查找条件。 嵌套查询求解方法(续) 相关子查询:子查询的查询条件依赖于父查询 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理 内层查询,若WHERE子句返回值为真,则取此元组放入结果表 然后再取外层表的下一个元组 重复这一过程,直至外层
14、表全部检查完为止 3.4.3 嵌套查询 1.带有IN谓词的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词的子查询 4.带有EXISTS谓词的子查询 1. 带有IN谓词的子查询 例 3.55 查询与“刘晨”在同一个系学习的学生。 此查询要求可以分步来完成 确定“刘晨”所在系名 SELECT Sdept FROM Student WHERE Sname= 刘晨 ; 结果为: CS 带有IN谓词的子查询(续) 查找所有在CS系学习的学生。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept= CS ; 结果为: Sno Sn
15、ame Sdept 201215121 李勇李勇 CS 201215122 刘晨刘晨 CS 带有IN谓词的子查询(续) 将第一步查询嵌入到第二步查询的条件中 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= 刘晨 ); 此查询为不相关子查询。 带有IN谓词的子查询(续) 用自身连接完成例 3.55查询要求 SELECT S1.Sno, S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept = S
16、2.Sdept AND S2.Sname = 刘晨; 带有IN谓词的子查询(续) 例 3.56查询选修了课程名为“信息系统”的学生学号和姓名 SELECT Sno,Sname 最后在Student关系中 FROM Student 取出Sno和Sname WHERE Sno IN (SELECT Sno 然后在SC关系中找出选 FROM SC 修了3号课程的学生学号 WHERE Cno IN (SELECT Cno 首先在Course关系中找出 FROM Course “信息系统”的课程号,为3号 WHERE Cname= 信息系统 ) ); 带有IN谓词的子查询(续) 用连接查询实现例 3.5
17、6 : SELECT Sno,Sname FROM Student,SC,Course WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname=信息系统; 3.4.3 嵌套查询 1.带有IN谓词的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词的子查询 4.带有EXISTS谓词的子查询 2. 带有比较运算符的子查询 当能确切知道内层查询返回单值时,可用比较运算符(,=,=,!=或)。 在例 3.55中,由于一个学生只可能在一个系学习,则可以 用 = 代替IN : SELECT Sno,Sn
18、ame,Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname= 刘晨); 带有比较运算符的子查询(续) 例 3.57 找出每个学生超过他选修课程平均成绩的课程号。 SELECT Sno, Cno FROM SC x WHERE Grade =(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno); 相关子查询 带有比较运算符的子查询(续) 可能的执行过程 从外层查询中取出SC的一个元组x,将元组x的Sno值(201215121)传送给内 层查询。 SELECT AV
展开阅读全文