"选修了全部课程的学生"的查询语句的疑问

这是在论坛发的一个帖子,没人回答就先放这里。。。

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#])) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值