left join、right join、inner join、full join的區別
left join(左聯接) | 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 |
right join(右聯接) | 返回包括右表中的所有記錄和左表中聯結字段相等的記錄 |
inner join(等值連接) | 只返回兩個表中聯結字段相等的行 |
full join(全連接) | 返回包括左表和右表中聯結字段相等的記錄 |
舉例如下:
--------------------------------------------
表A記錄如下:
|
表B記錄如下:
|
(一)、left join(左聯接)
sql語句如下:
select * from A left join 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 |
5 |
a20050115 |
NULL |
NULL |
--------------------------------------------
(所影響的行數為5行)
結果說明:
(1)left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的。
(2)換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為:A.aID=B.bID)。
(3)B表記錄不足的地方均為NULL。
(二)、right join(右聯接)
sql語句如下:
select * from A right join 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 |
NULL |
NULL |
8 |
2006032408 |
--------------------------------------------
(所影響的行數為5行)
結果說明:
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充。
(三)、inner join(等值連接)
sql語句如下:
select * from A inner join B on A.aID=B.bID |
等價:select * from A join B on A.aID=B.bID |
等價:select * from A,B where A.aID=B.bID |
結果如下:
aID |
aNum |
bID |
bName |
1 |
a20050111 |
1 |
2006032401 |
2 |
a20050112 |
2 |
2006032402 |
3 |
a20050113 |
3 |
2006032403 |
4 |
a20050114 |
4 |
2006032404 |
--------------------------------------------
(所影響的行數為4行)
結果說明:
很明顯,這裏只顯示出了A.aID=B.bID的記錄。這說明inner join並不以誰為基礎,它只顯示符合條件的記錄。
(四)、full join(全連接)
sql語句如下:
select * from A full join 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 |
5 |
a20050115 |
NULL |
NULL |
NULL |
NULL |
8 |
2006032408 |
--------------------------------------------
結果說明:
理解為“全連接”,兩張表中所有數據都顯示,實際就是inner +(left-inner)+(right-inner)。
註意:
LEFT JOIN操作用於在任何的FROM子句中,組合來源表的記錄。使用LEFT JOIN運算來創建一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中並沒有相符值的記錄。
語法:SELECT * FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
說明:table1,table2參數用於指定要將記錄組合的表的名稱。
field1,field2參數指定被聯接的字段的名稱。且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不需要有相同的名稱。
compopr參數指定關系比較運算符:“=”,“<”,“>”,“<=”,“>=”或“<>”。
如果在INNER JOIN操作中要聯接包含Memo數據類型或OLE Object數據類型數據的字段,將會發生錯誤。
left join、right join、inner join、full join的區別