1. 程式人生 > >資料庫表的連線(Left join , Right Join, Inner Join)用法詳解

資料庫表的連線(Left join , Right Join, Inner Join)用法詳解

表A記錄如下: 
aID        aNum 
1           a20050111
2           a20050112
3           a20050113
4          a20050114
5           a20050115
 

表B記錄如下: 
bID        bName 
1            2006032401
2            2006032402
3           2006032403
4           2006032404
8           2006032408

實驗如下: 
1.    left join 
sql語句如下: 
SELECT * FROM A
LEFT JOIN 
ON A.aID = B.bID
結果如下: 
aID        aNum                 bID           bName
1            a20050111      1                2006032401
2             a20050112         2               2006032402
3             a20050113         3               2006032403
4            a20050114         4               2006032404
5            a20050115         NULL        NULL
 
(所影響的行數為 5 行)

結果說明:
left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜尋條件的記錄(例子中為: A.aID = B.bID).
B表記錄不足的地方均為NULL.
 

2.    right join 
sql語句如下: 
SELECT * FROM A
RIGHT JOIN 
ON A.aID = B.bID
結果如下: 
aID        aNum                 bID           bName
1            a20050111      1                2006032401
2             a20050112         2               2006032402
3             a20050113         3               2006032403
4            a20050114         4               2006032404
NULL     NULL                 8              2006032408
 
(所影響的行數為 5 行)

結果說明:
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.
 

3.inner join 
sql語句如下: 
SELECT * FROM A
INNERJOIN B 
ON A.aID = B.bID
結果如下: 
aID        aNum                 bID           bName
1            a20050111      1                2006032401
2             a20050112         2               2006032402
3             a20050113         3               2006032403
4            a20050114         4               2006032404
 

結果說明:
很明顯,這裡只顯示出了 A.aID = B.bID的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.