Not exists嵌套调用例子

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 22:26   759   0

查询选修了所有课程的学生的学号,姓名,年龄

select sno,sname,datediff(YYYY,birthdate,getdate()) 年龄
from student
where not exists(select *
from course
where not exists(select *
from sc
where sno=student.sno
and SC.CNo=course.cno));

这个查询,查出的是选择全部课程的学生的姓名。
对于这个语法,要分步理解,从最下边的where看起,从下往上去看。

最下边的一个select(not exists后边)是把学生编号和课程编号带入,结果是查询学生选课的记录。加上not exists,就是学生没选课,那么加上前边的从课程表的select,就是查询出学生没选的课程。最后在上面又加了一个not exists,那么就是不存在没选课程的数据,也就是说,这个学生选择了所有的课程,才会符合记录。
这么说能明白么?看我下边分的段

----------------以下查询选择全部课程学生的姓名
SELECT Sname
FROM Student
WHERE NOT EXISTS --------此处不存在配合以上STUDENT,可知查询的是不存在没选课的学生
----------------以下查询学生没选课的信息
(SELECT *
FROM Course
WHERE
NOT EXISTS -------此处增加不存在,配合上面从COURSE的选择可知查询的是学生没有选的课
----------------以下查询查询学生选课的信息
(
SELECT *
FROM SC
WHERE Sno = Student.Sno AND Cno = Course.Cno
)
);

转载于:https://www.cnblogs.com/superqbb/archive/2012/04/26/2471665.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP