码迷,mamicode.com
首页 > 其他好文 > 详细

50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号、姓名

时间:2016-11-30 23:09:39      阅读:402      评论:0      收藏:0      [点我收藏+]

标签:from   alt   lte   course   false   --   技术分享   div   姓名   

 

效果是:

我们查出来叶平的教的课的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个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号、姓名

标签:from   alt   lte   course   false   --   技术分享   div   姓名   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!