简单解释:
其实你的关键在于两点a、not exists b、嵌套
1、not exists表示相应的子查询(subquery)没有结果,也就是没查到一条记录
2、嵌套是指从最里层的subquery一层一层往外执行,对于每一个“主查询”(我自定义的)的记录,子查询都要执行一次。

解决方案 »

  1.   


    SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.SNO=S.SNO AND SC.CNO=C.CNO))是说没有一个学生选修任何课程的班级(没有学生选修的班级)
    SELECT SN FROM S WHERE NOT EXISTS
           (SELECT * FROM C WHERE NOT EXISTS
           (SELECT * FROM SC WHERE SC.SNO=S.SNO AND SC.CNO=C.CNO))
    就可理解为不存在有学生不选修的班级,
    总之,打印全班都选修课程的班级的学生姓名
      

  2.   

    众位大哥:我明白这是说不存在一门课程不被学生所选,就是这个意思,但是在最后一句:
       select * from sc where sc.sno=s.sno and sc.cno=c.cno
      这是如何理解呀,他为什么要在sc中检索,为什么还要把 那两个连接
      能不能给我解释一下where 要是翻译成中文做什么最容易理解!!
      我不明白那两个连接的实质是什么?是不是就是建立一个映射?
      

  3.   

    where :满足一下条件的
    sc存放学生选课信息,通过此表将课程和学生建立联系
      

  4.   

    选课的信息都在sc表中了,不在它中选在哪选。
    这个连接我个人以为应该看成AXB比较合适