嵌套查询
一个SELECT-FROM-WHERE语句称为一个查询块
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
上层的查询块称为外层查询或父查询
下层查询块称为内层查询或子查询
注意:子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。
一.带有IN谓词的子查询
不相关子查询:子查询的查询条件不依赖于父查询,求解方法:由里向外,即先执行的子查询,子查询的结果用于建立其父查询的查询条件。
相关子查询:子查询的查询条件依赖于父查询,求解方法:由外向里
【例3.55 3.56】
--查询与“刘晨”在同一个系的学生
--方法一:
--1.确定“刘晨”所在系名
SELECT Sdept
FROM Student
WHERE Sname='刘晨';
--2.查找所有在CS系学习的学生
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept='CS';
--方法二:嵌套
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(
SELECT Sdept
FROM Student
WHERE Sname='刘晨'
);
--方法三:带有比较运算符的子查询
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept =
(
SELECT Sdept
FROM Student
WHERE Sname='刘晨'
);
--方法四:带EXISTS谓词的子查询
SELECT Sno,Sname,Sdept
FROM Student S1
WHERE EXISTS
(
SELECT *
FROM Student S2
WHERE S2.Sdept=S1.Sdept AND S2.Sname='刘晨'
);
--方法五:自身连接
SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1,