数据库SQL语句中 查询选修了全部课程的学生的学号和姓名 理解

查询选修了全部课程的学生姓名。SELECTSnameFROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(S... 查询选修了全部课程的学生姓名。
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno= Student.Sno
AND Cno= Course.Cno);
怎么理解 求详解。。很迷糊的说。
看来分少了没人回答啊。。高分!!
展开
 我来答
459451427
2012-04-07
知道答主
回答量:3
采纳率:0%
帮助的人:2.9万
展开全部
哥,我跟你一样,也是愁这题,难道是咱iq有问题看不懂呀。顺带过来围观下你 .我懂了 ,如果你和我一样 就是不知道这是个循环了吧。看这个你就明白了,看在咱两一块研究的份上 分给我吧
select sname from student where not exists (select * from course where not exists (select * from sc where cno = course.cno and sno=student.sno))

上面这个列子,先查询出student表的结果,然后将结果代入到student.sno然后再查询出c表中的结果,再一条一条的代入,感觉有点像for的嵌套循环,第一轮外循环中,满足内部的not exists条件的course表中的结果集被保留,然后再判断外部的not exists,这次判断是根据内部Course表中被保留的结果集的情况,如果结果集为空,则输出当前这一条S表的结果集;然后再进行第二轮大的循环,即取出student表的第二条结果代入运算。(至今不清楚)

以上的sql还可以这样理解,最内部的 select * from sc where cno = course.cno and sno=student.sno是查询出所有已经选择过课程的学生及相应课程,select * from course where not exists 则是所有没有被选择的课程,在这个基础上的 select sname from student where not exists 则是选取所有没有未选择课程的学生,即选择了所有课程的学员名称。

select Sno,Sname from Student where Sno in (select

Sno from SC group by Sno having count(Cno)=(Select

count(*) from Course));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lookingatsky
2012-04-06 · TA获得超过129个赞
知道答主
回答量:72
采纳率:0%
帮助的人:42.4万
展开全部
我去 你这样要别人理解全是瞎扯 你至少把表的结构发一下啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式