嵌套查询实验(二)
> (难点)例7:查询选修了全部课程的学生姓名。
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno= Student.Sno
AND Cno= Course.Cno
)
)
命题一:该同学选修了全部课程
命题二:存在一门课程该同学没选修是假的。
命题一与命题二等价。
[实验测试]
1. 查询与“刘晨”在同一个系学习的学生。
方法一、用带有IN的谓词。
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT________
FROM ___________
WHERE Sname= '刘晨');
方法二、用自身连接。
SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1,Student S2
WHERE ________________ AND
2. 查询选修了课程名为“信息
系统”的学生学号和姓名。
SELECT ______ , _____ ③最后在Student关系中
FROM _______ 取出Sno和Sname
WHERE Sno IN
(SELECT Sno ②然后在SC关系中找出选
FROM ____ 修了3号课程的学生学号
WHERE Cno IN
(SELECT _____ ①首先在Course关系中找出
FROM Course “信息系统”的课程号,为3号
WHERE _______= ‘信息系统’
)
);
用连接方法实现:
SELECTSno, Sname
FROM ________,____,________
WHERE Student = _______
AND SC.Cno = _______
AND ___________=‘信息系统’;
3. 查询至少选修了学生200215122选修的全部课程的学生号码。
[实验总结]
1.相关子查询与不相关子查询。
2.带有IN谓词,带有比较运算,带有ANY或ALL,带有Exists或Not Exists谓词的嵌套查询。