50個查詢系列-第六個查詢:查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名


查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名:

 

 

我的寫法:

第一步:先查出來學過“001”並且也學過編號“002”課程的同學的學號:

SELECT t11.t1sid t33id
FROM 
(SELECT t1.StuId t1sid FROM tblscore t1 WHERE t1.CourseId='001')t11,-- 001的學生的id
(SELECT t1.StuId  t2sid FROM tblscore t1 WHERE t1.CourseId='002')t22-- 002的學生的id
WHERE 
t11.t1sid=t22.t2sid

查詢的結果是:

第二步:根據查出來的學生的id去查學生的姓名,學號

SELECT 
tblstudent.StuId,tblstudent.StuName
FROM
(
SELECT t11.t1sid t33id
FROM 
(SELECT t1.StuId t1sid FROM tblscore t1 WHERE t1.CourseId='001')t11,-- 001的學生的id
(SELECT t1.StuId  t2sid FROM tblscore t1 WHERE t1.CourseId='002')t22-- 002的學生的id
WHERE 
t11.t1sid=t22.t2sid
)t33-- 查出來的是學過“001”並且也學過編號“002”課程的同學的學號
,
tblstudent
WHERE tblstudent.StuId=t33.t33id

查詢結果:

 

 

 

 

 

 

答案的寫法是:

 SELECT StuId,StuName FROM tblStudent st
  WHERE (SELECT COUNT(*) FROM tblScore s1 WHERE s1.StuId=st.StuId AND s1.CourseId='001')>0
   AND
   (SELECT COUNT(*) FROM tblScore s2 WHERE s2.StuId=st.StuId AND s2.CourseId='002')>0

我們看一些這個寫法:

 

他的主表是學生表(tblstudent)

 

 

SELECT COUNT(*) FROM tblScore s1 WHERE s1.StuId=st.StuId AND s1.CourseId='001'
這句話是說遍歷tblstudent的每一條數據和tblscore里面的每一條數據,要求tblstudent的stuid和tblscore的數據一致:
這么一來的話候選項是:

然后

s1.CourseId='001'這么一來的話:就只剩一條數據了。
如果滿足
(SELECT COUNT(*) FROM tblScore s1 WHERE s1.StuId=st.StuId AND s1.CourseId='001')>0能查詢出來的話就表示滿足學過001的課程。
同理
(SELECT COUNT(*) FROM tblScore s2 WHERE s2.StuId=st.StuId AND s2.CourseId='002')>0能查詢出來的話就表示滿足學過002的課程。

同時滿足這兩個條件的學生就是同時上過兩門課的學生。




 


免責聲明!

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



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