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:测试数据

  • 相关阅读:
    Luogu_P3435 [POI2006]OKR-Periods of Words KMP
    NOIP2019游记
    []記錄容易出錯的地方和一些知識
    [题解]luogu_P3939_数颜色(vector二分
    [题解]luogu_P4819_杀人游戏(缩点
    [题解]NOIP2018_赛道修建(二分/树形dp/set/贪心
    [题解]luogu_P4161_(排列/lcm
    [题解]luogu_P4886_快递员(点分治
    [题解]luogu_P3523(树上覆盖
    [题解]luogu_P2466(区间dp
  • 原文地址:https://www.cnblogs.com/hbuwyg/p/7095216.html
Copyright © 2011-2022 走看看