1. 程式人生 > >left join、right join、inner join、full join的區別

left join、right join、inner join、full join的區別

tab 即使 記錄組 field pop 數據類型 nbsp 沒有 sel

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join(等值連接) 只返回兩個表中聯結字段相等的行
full join(全連接) 返回包括左表和右表中聯結字段相等的記錄

舉例如下:

--------------------------------------------

表A記錄如下:

aID

aNum

1

a20050111

2

a20050112

3

a20050113

4

a20050114

5

a20050115

表B記錄如下:

bID

bNum

1

2006032401

2

2006032402

3

2006032403

4

2006032404

8

2006032408

(一)、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的區別