实验四 嵌套查询
一、实验目的
掌握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= o
)
);
四、实验内容与步骤
1、检索WANG同学不学的课程的课程号。
2、 检索学号比WANG同学大,而年龄比他小的学生姓名。
3、 求年龄大于女同学平均年龄的男学生姓名和年龄。
4、 求年龄大于所有女同学年龄的男学生姓名和年龄。
5、检索全部学生都选修的课程的课程号与课程名。
6、检索选修课程包含LIU老师所授课程的学生学号。