SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN區別

轉載:http://www.javashuo.com/article/p-ztklijsi-ec.htmlhtml

SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN區別

sql中的鏈接查詢有inner join(內鏈接)、left join(左鏈接)、right join(右鏈接)、full join(全鏈接)四種方式,它們之間其實並無太大區別,僅僅是查詢出來的結果有所不一樣。 
例如咱們有兩張表: java

Orders表經過外鍵Id_P和Persons表進行關聯。mysql

1.inner join,在兩張表進行鏈接查詢時,只保留兩張表中徹底匹配的結果集。

咱們使用inner join對兩張表進行鏈接查詢,sql以下:sql

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 INNER JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName
查詢結果集:


此種鏈接方式Orders表中Id_P字段在Persons表中找不到匹配的,則不會列出來。post

2.left join,在兩張表進行鏈接查詢時,會返回左表全部的行,即便在右表中沒有匹配的記錄。

咱們使用left join對兩張表進行鏈接查詢,sql以下:spa

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 LEFT JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName
查詢結果以下:

能夠看到,左表(Persons表)中LastName爲Bush的行的Id_P字段在右表(Orders表)中沒有匹配,但查詢結果仍然保留該行。3d

3.right join,在兩張表進行鏈接查詢時,會返回右表全部的行,即便在左表中沒有匹配的記錄。

咱們使用right join對兩張表進行鏈接查詢,sql以下:code

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 RIGHT JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName

查詢結果以下:htm

Orders表中最後一條記錄Id_P字段值爲65,在左表中沒有記錄與之匹配,但依然保留。blog

4.full join,在兩張表進行鏈接查詢時,返回左表和右表中全部沒有匹配的行。

咱們使用full join對兩張表進行鏈接查詢,sql以下:

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 FULL JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName

查詢結果以下: 

查詢結果是left join和right join的並集。

mysql中沒有full join,能夠經過left join union right join 實現full join功能

相關文章
相關標籤/搜索