MySQL查詢學生表 - 詳解選擇一個課程未選其他課程的情況


筆者sql知識有限,歡迎大家提供更好的方法建議

相關表如下

student:

sc:

course:

 1,選擇‘01’課程未選02課程的姓名,學科名稱,該科成績

SELECT s.Sname,c.`
Cname`,sc.score
FROM (student s LEFT JOIN sc ON s.`S#`=sc.`S#`)
LEFT JOIN course c ON c.`C#`=sc.`C#`
WHERE sc.`S#`=(SELECT sc.`S#` FROM sc
WHERE sc.`C#`='01' AND sc.`S#` NOT IN
(SELECT sc.`S#` FROM sc WHERE sc.`C#`='02'))

解析:篩選步驟

1.在sc表中先將選02課程的學生編號篩選出來

SELECT sc.`S#` FROM sc WHERE sc.`C#`='02'

 可以看到,這些結果都是已選02課程的學生編號,我們將這個結果命名為table_02

2,篩選出選擇了01課程,但是s#學生編號未在table_02中

SELECT *
FROM sc
WHERE sc.`C#`='01'  AND sc.`S#` NOT IN 
(SELECT sc.`S#` FROM sc WHERE sc.`C#`='02')

篩選出了,選擇01課程,未選02課程的S#為06的學生

3,將3個表左連接起來,加上第二步驟中的篩選條件選出我們需要的字段

SELECT s.Sname,c.`
Cname`,sc.score
FROM (student s LEFT JOIN sc ON s.`S#`=sc.`S#`)
LEFT JOIN course c ON c.`C#`=sc.`C#`
WHERE sc.`S#`=(SELECT sc.`S#` FROM sc
WHERE sc.`C#`='01' AND sc.`S#` NOT IN
(SELECT sc.`S#` FROM sc WHERE sc.`C#`='02'))

結果為。編號為06的吳蘭,選了01課程,但是未選02課程,01語文課程成績為31,03英語課程為34


免責聲明!

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



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