表a 表b 表c
學號(pk) 班級(pk) 課目id
班級(fk) 課目id(不可以為null) 課名
課目id(可以為null)
查某生課名,可以直接通過表a的課目id,但是該課表id為空時,需要從表b查出課表id,再進行查詢。
select a.學號,課名 =case
(when a.課目id is null then c1.課名
else c2. 課名
end)
from 表a as a
left join 表b as b
on a.班級=b.班級
left join 表c as c1
on a.課目id=c1.課目id
left join 表c as c2
on b.課目id=c2.課目id
關於左外連線和右外連線
當使用left join的時候 select from a left join b on a.id b.id 這時候a表中的資料會全部查詢出來,而b表中相匹配的也會出來如果沒有匹配的用null填充。a表在前b表在後。如果a b反過來,也是同樣道理。當使用right join select from ...
關於外連線和內連線
先說背景 曾經一直認為左連線和左外連線是不一樣的,在學校學習的時候這概念都很模糊,畢業的時候又基本都交給老師了,現在才知道原來左連線是左外連線的簡寫。下面詳細的介紹一下自己的理解吧。如果有錯,請大家指正。首先sql的多表連線分為兩大部分 外連線和內連線,外連線又分為左連線,右連線,全外連線 左右連線...
關於外連線的提醒
記得我剛入門sql的時候老師和書上都說left join做外連線就是左邊的表的數量就是查詢結果的數量,其實這是不對的。今天突然想起一定要提向大家。我知道老師是為了讓學生快些入門,因為這句話只考慮了右表沒有與左表關聯資料的情況但是如果右表有多條與左表關聯的資料呢?所以查詢結果應該是大於等於左表記錄條數...