第三节 查 询 (1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)
相关子查询,首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若
WHERE子句返回值为真,则取此元组放入结果表;然后再取外层表的下一个元组;重复这一过程,直至外层
表全部检查完为止。引出子查询的谓词:带有IN谓词的子查询;带有比较运算符的子查询;带有ANY或ALL
谓词的子查询;带有EXISTS谓词的子查询。
一、带有IN谓词的子查询
[例] 查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完成。
① 确定“刘晨”所在系名
SELECT Sdept
FROM Student
WHERE Sname= ' 刘晨 ';
结果为:
Sdept
IS
② 查找所有在IS系学习的学生。
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept= ' IS ';
结果为:
Sno Sname Sdept
95001 刘晨 IS
95004 张立 IS
构造嵌套查询:将第一步查询嵌入到第二步查询的条件中。
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname= ‘ 刘晨 ’);
此查询为不相关子查询。DBMS求解该查询时也是分步去做的。构造嵌套查询:将第一步查询嵌入到第二
步查询的条件中。用自身连接完成本查询要求。
SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE S1.Sdept = S2.Sdept AND
S2.Sname = '刘晨';
|