內連接(INNER JOIN)(典型的連接運算,使用像 = 或 <> 之類的比較運算符)。包括相等連接和自然連接。內連接使用比較運算符根據每個表共有的列的值匹配兩個表中的行
左連接(LEFT JOIN 或 LEFT OUTER JOIN)是右左邊表中的數據爲基準,若左表有數據右表沒有數據,否則顯示左表中的數據右表中的數據顯示爲空
右連接(RIGHT JOIN 或 RIGHT OUTER JOIN)是以右邊表中的數據爲基準,若右表有數據左表沒有數據,否則顯示右表中的數據左表中的數據顯示爲空
全連接( FULL JOIN 或 FULL OUTER JOIN) 完整外部連接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。
下面用幾個實例來詳細說明
兩個表:
A (id, name)
數據:
id | name |
---|---|
1 | 張三 |
2 | 李四 |
3 | 王五 |
B (id, name)
數據:
id | name |
---|---|
1 | 學生 |
2 | 老師 |
3 | 校長 |
內連接結果:
SELECT A.\*, B.\* FROM A INNER JOIN B ON A.id=B.id;
id | name | id | name |
---|---|---|---|
1 | 張三 | 1 | 學生 |
2 | 李四 | 2 | 老師 |
左連接結果:
SELECT A.\*, B.\* FROM A LEFT JOIN B ON A.id=B.id;
id | name | id | name |
---|---|---|---|
1 | 張三 | 1 | 學生 |
2 | 李四 | 2 | 老師 |
3 | 王五 | NULL | NULL |
右連接結果:
SELECT A.\*, B.\* FROM A RIGHT JOIN B ON A.id=B.id;
id | name | id | name |
---|---|---|---|
1 | 張三 | 1 | 學生 |
2 | 李四 | 2 | 老師 |
NULL | NULL | 4 | 校長 |
全連接結果 :
SELECT A.\*, B.\* FROM A FULL JOIN B ON A.id=B.id;
id | name | id | name |
---|---|---|---|
1 | 張三 | 1 | 學生 |
2 | 李四 | 2 | 老師 |
3 | 王五 | NULL | NULL |
NULL | NULL | 4 | 校長 |
補充:下面這種情況就會用到外連接
比如有兩個表一個是用戶表,一個是交易記錄表,如果我要查詢每個用戶的交易記錄就要用到左外外連接,因爲不是每個用戶都有交易記錄。
用到左外連接後,有交易記錄的信息就會顯示,沒有的就顯示NULL,就像上面我舉得例子一樣。
如果不用外連接的話,比如【王五】沒有交易記錄的話,那麼用戶表裏的【王五】的信息就不會顯示,就失去了查詢所有用戶交易記錄的意義了。
看一下結果就能明白各種連接的區別了。