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 就返回那個查詢結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM