编辑: 苹果的酸 | 2017-08-31 |
2 '
AND SC.Grade>
90;
执行过程:先从SC中挑选出Cno='
2'
并且Grade>
90的元组形成一个中间关系再和Student中满足连接条件的元组进行连接得到最终的结果关系 连接查询(续) 1.等值与非等值连接查询 2.自身连接3.外连接4.多表连接 2. 自身连接 自身连接:一个表与其自己进行连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀[例3.52]查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.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 先行课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. 外连接 外连接与普通连接的区别普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出 左外连接列出左边关系中所有的元组 右外连接列出右边关系中所有的元组 外连接(续) [例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 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 SC.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 嵌套查询(续) 上层的查询块称为外层查询或父查询下层查询块称为内层查询或子查询SQL语言允许多层嵌套查询即一个子查询中还可以嵌套其他子查询子查询的限制不能使用ORDER BY子句 嵌套查询求解方法 不相关子查询: 子查询的查询条件不依赖于父查询由里向外 逐层处理.即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件. 嵌套查询求解方法(续) 相关子查询:子查询的查询条件依赖于父查询首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表然后再取外层表的下一个元组重复这一过程,直至外层表全部检查完为止 3.4.3 嵌套查询 1.带有IN谓词的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词的子查询 4.带有EXISTS谓词的子查询 1. 带有IN谓词的子查询 [例3.55] 查询与 刘晨 在同一个系学习的学生.此查询要求可以分步来完成 ① 确定 刘晨 所在系名 SELECT Sdept FROM Student WHERE Sname= '