解决方案 »

  1.   

      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 就相发于 选择了所有的课程。。
      

  2.   

    目前对 exists和 not exists 掌握得还不行,参考答案是用right join来解决的,不过答案本身有误,经过修正已搞定!多谢大侠指点!要继续学习exists!另附上自己修正过的答案:
    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(*)=SELECT COUNT(C.[C#]) FROM C)
      

  3.   

    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)