首页 > 代码库 > 50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号、姓名
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 就返回那个查询结果。
50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号、姓名