数据库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);
怎么理解 求详解。。很迷糊的说。
看来分少了没人回答啊。。高分!! 展开
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno= Student.Sno
AND Cno= Course.Cno);
怎么理解 求详解。。很迷糊的说。
看来分少了没人回答啊。。高分!! 展开
17个回答
展开全部
哥,我跟你一样,也是愁这题,难道是咱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));
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));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我去 你这样要别人理解全是瞎扯 你至少把表的结构发一下啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询