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 就返回那个查询结果。

原文地址:https://www.cnblogs.com/shenxiaoquan/p/6119698.html