这是在论坛发的一个帖子,没人回答就先放这里。。。
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.Sno= Student.Sno AND SC.Cno=Course.Cno);
总的意思我知道,就是NOT EXISTS 于有课程没选的学生里面的就是全选的,但是程序有点看不明白:
比如最里面的查询语句得到是所有有选课的学生的选课信息,因为这里是所有学生,那是不是说可能包含了所有课程,那下个NOT EXISTS 嵌套得到不是所有学生都没选的课程了吗?
还有种写法,可行吗,“COUNT(*)=COUNT([S#])”看不明白,到底得到的是什么
Select SN,SD FROM S
Where [S#] IN(
Select [S#] FROM SC
RIGHT JOIN
C ON SC.[C#]=C.[C#] GROUP BY [S#]
HAVING COUNT(*)=COUNT([S#]))
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.Sno= Student.Sno AND SC.Cno=Course.Cno);
总的意思我知道,就是NOT EXISTS 于有课程没选的学生里面的就是全选的,但是程序有点看不明白:
比如最里面的查询语句得到是所有有选课的学生的选课信息,因为这里是所有学生,那是不是说可能包含了所有课程,那下个NOT EXISTS 嵌套得到不是所有学生都没选的课程了吗?
还有种写法,可行吗,“COUNT(*)=COUNT([S#])”看不明白,到底得到的是什么
Select SN,SD FROM S
Where [S#] IN(
Select [S#] FROM SC
RIGHT JOIN
C ON SC.[C#]=C.[C#] GROUP BY [S#]
HAVING COUNT(*)=COUNT([S#]))