實驗四 嵌套查詢
一、實驗目的
掌握SELECT語句的嵌套使用,實現表的復雜查詢,進一步理解SELECT語句的高級使用方法。
二、實驗環境
三、實驗示例
1、 查詢與“劉晨”在同一個系學習的學生。
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 = '劉晨';
2、查詢選修了課程名為“信息系統”的學生學號和姓名
SELECT Sno,Sname ③ 最后在Student關系中
FROM Student 取出Sno和Sname
WHERE Sno IN
(SELECT Sno ② 然后在SC關系中找出選
FROM SC 修了3號課程的學生學號
WHERE Cno IN
(SELECT Cno ① 首先在Course關系中找出
FROM Course “信息系統”的課程號,為3號
WHERE Cname= ‘信息系統’
)
);
3、檢索學C2課程的學號與姓名。
SELECT S#,SNAME FROM S
WHERE S# = SOME(SELECT S# FROM SC
WHERE C# ='C2');
4、 檢索至少有一門成績超過學生S4一門成績的學
生學號。
SELECT DISTINCT S# FROM SC
WHERE SCORE > SOME(SELECT SCORE FROM SC
WHERE S#='S4');
5、 檢索不學C2課程的學生姓名與年齡。
SELECT SNAME,AGE FROM S
WHERE S# <> ALL(SELECT S# FROM SC
WHERE C#= 'C2');
6、 檢索平均成績最高的學生學號。
SELECT S# FROM SC
GROUP BY S#
HAVING AVG SCORE >=
ALL(SELECT AVG(SCORE) FROM SC
GROUP BY S#);
7、查詢所有選修了1號課程的學生姓名。
SELECT Sname
FROM Student
WHERE EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno= ' 1 ');
8、 查詢沒有選修1號課程的學生姓名。
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno = Student.Sno AND Cno='1');
9、查詢選修了全部課程的學生姓名。
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、檢索WANG同學不學的課程的課程號。
2、 檢索學號比WANG同學大,而年齡比他小的學生姓名。
3、 求年齡大於女同學平均年齡的男學生姓名和年齡。
4、 求年齡大於所有女同學年齡的男學生姓名和年齡。
5、檢索全部學生都選修的課程的課程號與課程名。
6、檢索選修課程包含LIU老師所授課程的學生學號。
