失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SQL查询选修了全部课程的学生姓名

SQL查询选修了全部课程的学生姓名

时间:2022-03-05 20:19:32

相关推荐

SQL查询选修了全部课程的学生姓名

1. SELECT2.Sname 3. FROM4. NOT EXISTS ( 5.SELECT * FROM course WHERE NOT EXISTS ( 6.SELECT * FROM SC WHERE Sno = student.Sno AND Cno = o ) );

对于这个题目我解释一下:

NOT EXISTS: 它表示若查询结果为空,则最外层的WHERE子句返回真值(true),否则为假值(false);EXISTS正好与它相反;

对于执行过程我举个例子:

SELECT Sname FROM Student WHERE EXISTS(SELECT * FROM SC WHERE Sno=Student.SnoAND Cno='1');它的执行过程是:首先取外层查询中Student表的第一个元祖,根据它与内层查询查询相关的属性值(Sno值)处理内层查询,若WHERE子句的返回值为真,则取外层查询中该元祖的Sname放入结果表;然后去Student表的下一个元祖;重复这一过程,直至外层Student表全部检查完为止。

所有对于上面两个NOT EXISTS ,他们的执行过程是这样的。

首先我们是要查询选了全部的课程的学生。那么跑一遍SQL语句,假设有一个 Sno= 的学生的选择了全部课程和一个Sno= 的学生只选择了全部课程的其中几门; 假设先以Sno=(也就是选了全部课程的那位),那么先往最内层看也就是第6行,既然选择了全部课程那么第6行最后不就是有结果集,既然有结果集那么第5行的NOT EXISTS不就是为false嘛!,也就是第5行得到的结果嘛。 既然第5行为false那不就是第5行的结果集为空,既然第5行的结果集为空那么第4行的NOT EXISTS不就是为 true , 那么最后最外层当前元祖不就加入到最后查询结果集了。

然后对于Sno=这个人。自己跑一遍也就知道了。

如果觉得《SQL查询选修了全部课程的学生姓名》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。