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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号姓名的主要内容,如果未能解决你的问题,请参考以下文章

50条SQL查询技巧查询语句示例

50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

MySQL练习题

day11-mysql 练习题

mysql练习题

mysql 练习