• 找出没有选修过“李明”老师讲授课程的所有学生姓名


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

  • 相关阅读:
    Android在代码中获取应用签名
    Android之密码的显示与隐藏
    如何把本地项目上传到Github
    Android之移动热修复
    Android之apk优化
    Android之内存泄漏
    Java类加载顺序
    mysql系列-⼀条SQL查询语句是如何执⾏的?
    java操作redis(jedis)常用方法示例
    mybatis拦截器实现通用权限字段添加
  • 原文地址:https://www.cnblogs.com/hbuwyg/p/7095216.html
Copyright © 2020-2023  润新知