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


sql中的連接查詢有inner join(內連接)、left join(左連接)、right join(右連接)、full join(全連接)四種方式,它們之間其實並沒有太大區別,僅僅是查詢出來的結果有所不同。 
例如我們有兩張表: 
這里寫圖片描述

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

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

我們使用inner join對兩張表進行連接查詢,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表中找不到匹配的,則不會列出來。

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

我們使用left join對兩張表進行連接查詢,sql如下:

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表)中沒有匹配,但查詢結果仍然保留該行。

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

我們使用right join對兩張表進行連接查詢,sql如下:

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

 查詢結果如下:

這里寫圖片描述 
Orders表中最后一條記錄Id_P字段值為65,在左表中沒有記錄與之匹配,但依然保留。

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的並集。

這些連接查詢的區別也僅此而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM