当前位置: 代码迷 >> Sql Server >> MSSQL小白:查询辅修全部课程的学员姓名和所属单位
  详细解决方案

MSSQL小白:查询辅修全部课程的学员姓名和所属单位

热度:65   发布时间:2016-04-24 10:23:51.0
MSSQL小白:查询选修全部课程的学员姓名和所属单位
已知有3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G )S#,C#,G 分别代表学号、所选修的课程编号、学习成绩

问:使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位

问题如上,网上有参考答案,但不是很理解,请各位帮忙解答!

------解决方案--------------------
  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 *
              FROM Course
              WHERE NOT EXISTS
                  (SELECT *
                   FROM SC
                   WHERE Sno= Student.Sno
                      AND Cno= Course.Cno
这一段 里面 可以理解成   这个学生所选择的所有课程,加上外面一起来就是这个学生  有没有未选择 的课程

假如7门课程,这个学生只选择了6门,说明 COURSE里面还有一门会出来。。

再套上最外面的 NOT EXISTS 就相发于 选择了所有的课程。。
------解决方案--------------------
select sn, sd from 

(
select s#,count(c#) part_c# 
from test_sc 
group by s#
)A, 
test_s s
where s.s#=a.s#
and a.part_c#=(select count(1) from test_c)
  相关解决方案