现在的位置: 首页 > 综合 > 正文

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

2013年08月18日 ⁄ 综合 ⁄ 共 578字 ⁄ 字号 评论关闭
这是在论坛发的一个帖子,没人回答就先放这里。。。

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#])) 

抱歉!评论已关闭.