zoukankan      html  css  js  c++  java
  • 找出没有选修过“李明”老师讲授课程的所有学生姓名

    Select S.Sno,S.Sname 
    from S 
    where Sno not in 
    (select distinct( SC.Sno) 
    from SC,C,T
    where  SC.Cno=C.Cno and T.Tno=C.Tno and T.Tname='李明'); 
    Select S.Sno,S.Sname 
    from S 
    where  not exists 
    (select *
    from SC,C,T
    where  S.Sno=SC.Sno and SC.Cno=C.Cno and T.Tno=C.Tno and T.Tname='李明'); 

    以上两种方法都是正确的。


    类似于!= '李明' 的方法不可以。

    因为如果一个学生同时选择了李明和张勇的课,虽然排除了选修的李明的课,但因为该生选修有张勇的课,该学生仍旧会在结果记录中。
    很明显,这个同学也选了李明的课,不符合题目条件。
    同样道理,类似的解法都不对。
    这样的方法只是排除了只选修了李明老师课的同学。
    错误1:
    Select S.Sno,S.Sname 
    from S 
    where Sno  in 
    (select distinct( SC.Sno) 
    from SC,C,T
    where  SC.Cno=C.Cno and T.Tno=C.Tno and T.Tname!='李明'); 

    错误2:

    Select distinct S.Sno,S.Sname 
    from S,SC,C,T
    where  S.Sno=SC.Sno and SC.Cno=C.Cno and T.Tno=C.Tno and T.Tname!='李明'; 

    附录1:建表语句
    Create table S 
    (Sno char(9) PRIMARY KEY,   
     Sname char(20),
     Sage int,   
     Ssex char(2))  
          
    Create table T
    (Tno char(5) PRIMARY KEY,    
     Tname char(20))               
              
    Create table C
    (Cno char(4) PRIMARY KEY,   
     Cname char(40),  
     Tno char(5),
     FOREIGN KEY(Tno) REFERENCES T(Tno))              
           
    Create table SC
    (Sno char(9),  
    Cno char(4),  
    Score int,
    PRIMARY KEY (Sno,Cno),  
    FOREIGN KEY(Sno) REFERENCES S(Sno),
    FOREIGN KEY(Cno) REFERENCES C(Cno))

     附录2:测试数据

  • 相关阅读:
    hdu6314 容斥+数学
    后缀数组+指针
    F. Dominant Indices
    牛客网挑战赛19 B,C,F
    拓展欧几里得理论基础(含一定证明)
    数字
    vue的自定义树形列表组件(及数据格式转换)
    Activiti实现会签功能
    7种单例模式
    MySQL中数据类型(char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别)(转)
  • 原文地址:https://www.cnblogs.com/hbuwyg/p/7095216.html
Copyright © 2011-2022 走看看