以下是本人的總結,希望能為您提供一定的幫助!謝謝大家,批評指正!
inner join:是優化的where 多表查詢,是系預設的。把兩個表連接配接在一起,傳回兩個表中相比對的記錄,是其交集,傳回的是笛卡爾積結果。
outer join:查詢兩表時,如果第二個表沒有滿足連接配接的條件的記錄,則在第二個表的對應字段填入空值, 即保證生成的記錄中一定有滿足條件的第一個表的記錄。
舉個例子:
假設a表和b表的資料是這樣的。
a b
id name id stock
1 a 1 15
2 b 2 50
3 c
select * from a inner join b on a.id=b.id
這個文法是連接配接查詢中的内連接配接,它産生的結果是
兩個表相比對的記錄出現在結果清單中
根據上面的表,出現的結果是這樣的
a.id name b.id stock
1 a 1 15
2 b 2 50
----------------------------
select * from a,b where a.id=b.id
這個文法是内連接配接的另外一種寫法,其執行結果與inner join一樣.。
-----------------------------------------------------------------------------------------------------------------------------------------------------
left join && right join: left join就是指的左連接配接,其他的以此類推。 舉例來說,左連接配接就是指包含第一個表與第二個表之間關于關鍵字段相同的紀錄。 簡單的來說就是以左面的表為基準,去選擇右面表中與之相關的紀錄!!!
例如:
A left join B 的連接配接的記錄數與A表的記錄數同
A right join B 的連接配接的記錄數與B表的記錄數同
A left join B 等價B right join A
table A:
Field_K, Field_A
1 a
3 b
4 c
table B:
Field_K, Field_B
1 x
2 y
4 z
select a.Field_K, a.Field_A, b.Field_K, b.Field_B
from a left join b on a.Field_K=b.Field_K
Field_K Field_A Field_K Field_B
---------- ---------- ---------- ----------
1 a 1 x
3 b NULL NULL
4 c 4 z
select a.Field_K, a.Field_A, b.Field_K, b.Field_B
from a right join b on a.Field_K=b.Field_K
Field_K Field_A Field_K Field_B
---------- ---------- ---------- ----------
1 a 1 x
NULL NULL 2 y
4 c 4 z
----------------------------------------------------------------------------------------------------------
Left outer join && right outer join:
Left outer join,左側表所有的記錄都傳回,右側比對的記錄傳回,沒有比對的傳回Null
right outer join相反,右側的記錄傳回,左側傳回比對的記錄,沒有比對傳回Null
Full outer join :兩表的 并集
Cross join : 兩個表的笛卡兒積,傳回所有可能的值,不允許有連接配接條件!