筆者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