zoukankan      html  css  js  c++  java
  • 50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号、姓名

    效果是:

    我们查出来叶平的教的课的id是002和016.我们选出的学生同时有这两门课。

    如下:

     -------------------------------------------------------------------------------------------------------------------------------------------------

    具体的做法:


    第一步:查找叶平的id

    select  tblteacher.TeaId from tblteacher where tblteacher.TeaName='叶平'-- 查出叶平老师的id

    第二步:查找叶平上的课的id

    select  tblcourse.CourseId from tblcourse where tblcourse.TeaId=
    (
    select  tblteacher.TeaId from tblteacher where tblteacher.TeaName='叶平'-- 查出叶平老师的id
    )-- 叶平老师上的课的课程id

    结果:

     然后就碰到了问题卡在这里了。

    遇到的问题是:

    我们要查的是上过这两门课的人(001,016)就是说这个人是这样的:

    怎么去查呢?

    语句:
    select st.StuId,st.StuName from tblstudent st where 
    
    NOT EXISTS
    (
    /*
    要满足的条件是:
    1:查叶平的id(两个)
    2:叶平的两个id(看做一个整体)不能包含在我学生对应的查出来的成绩表中的课程id
    */
    select  tblcourse.CourseId from tblcourse where tblcourse.TeaId=
    (
    select  tblteacher.TeaId from tblteacher where tblteacher.TeaName='叶平'-- 查出叶平老师的id
    ) and tblcourse.CourseId nOT IN(
    SELECT TBLSCORE.CourseId FROM TBLSCORE WHERE tblscore.StuId=st.StuId
    
    )
    )

    这里对NOT EXISTS说明一下。

     NOT EXISTS(。。。。。)

    。。。查出来有结果那么就返回true,但是因为NOT,所以又变成了false,那么select就不返回任何东西。

    。。。查出来没有结果那么返回就是false。但是因为NOT.所以又变成了true,那么select 就返回那个查询结果。

  • 相关阅读:
    Linux系统下ZIP文件解压和压缩命令
    解析XML文件
    数组和集合之间的转换
    数据库密码到期修改密码
    Linux系统中启动jar程序
    JSONArray依赖包
    多态性
    接口----interface
    抽象类
    final关键字
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/6119698.html
Copyright © 2011-2022 走看看