記得我剛入門sql的時候老師和書上都說left join做外連線就是左邊的表的數量就是查詢結果的數量,其實這是不對的。今天突然想起一定要提向大家。我知道老師是為了讓學生快些入門,因為這句話只考慮了右表沒有與左表關聯資料的情況但是如果右表有多條與左表關聯的資料呢?所以查詢結果應該是大於等於左表記錄條數才對而不是等於。
下面用例項說明問題:
table a(使用者資訊)
uid username
1 張三
2 李四
3 王五
table b(使用者登入記錄)
uid time
2 2010-10-28 13:58:40
2 2010-10-28 13:58:48
2 2010-10-28 13:58:54
3 2010-10-28 13:58:59
3 2010-10-28 13:59:05
select a.*,b.time from a left join b
一共是6條記錄
uid username time
1 張三 null
2 李四 2010-10-28 13:58:40
2 李四 2010-10-28 13:58:48
2 李四 2010-10-28 13:58:54
3 王五 2010-10-28 13:58:59
3 王五 2010-10-28 13:59:05
當右表沒有記錄的時候用null和左表匹配,當右表有記錄而且是多條記錄的時候左表記錄要重複以匹配右表的記錄。其實這樣是有用的自己想想看哦。
關於外連線
表a 表b 表c 學號 pk 班級 pk 課目id 班級 fk 課目id 不可以為null 課名 課目id 可以為null 查某生課名,可以直接通過表a的課目id,但是該課表id為空時,需要從表b查出課表id,再進行查詢。select a.學號,課名 case when a.課目id is null...
關於左外連線和右外連線
當使用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的多表連線分為兩大部分 外連線和內連線,外連線又分為左連線,右連線,全外連線 左右連線...