三.嵌套查询
不相关子查询 :子查询的查询条件不依赖于父查询。即为“由里向外”处理,先执行子查询,子查询的结果用于建立父查询的查找条件。
相关子查询 :子查询的查询条件依赖于父查询。
1.带有IN谓词的子查询
【例3.55】查询与“刘晨”在同一个系学习的学生。
①.分步查询:
首先确定刘晨所在系名
SELECT Sdept
FROM Student
WHERE Sname='刘晨';
查询结果为:MA;
然后查找所在系(MA)学习的学生
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept='MA';
查询结果为:
用完整的Student表作为对照:
②.嵌套查询:
将分布查询第一步查询嵌入第二步的查询条件中,构造嵌套循环:
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨');
查询结果同上。
属于 不相关子查询 ,子查询的查询条件不依赖于父查询。
③.自身连接:
SELECT S1.Sno, S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE S1.Sdept = S2.Sdept AND
S2.Sname ='刘晨';
查询结果同上。
【例3.56】查询选修了课程名为“信息系统”的学生学号和姓名。
①.嵌套查询:
SELECT Sno,Sname --③ :最后在Student关系中取出Sno和Sname
FROM Student
WHERE Sno IN
(SELECT Sno --②:然后在SC关系中找出选修了3号课程的学生学号
FROM SC
WHERE Cno IN
(