SQL學習梳理 之 Join關鍵字1

LEFT JOIN

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回全部的行,即便在右表 (table_name2) 中沒有匹配的行。數據庫

LEFT JOIN 關鍵字語法spa

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

註釋:在某些數據庫中, LEFT JOIN 稱爲 LEFT OUTER JOIN。.net

例子:blog

"Persons" 表:it

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:io

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

如今,咱們但願列出全部的人,以及他們的訂單號 - 若是有的話。table

您能夠使用下面的 SELECT 語句:ast

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

結果集:select

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

LEFT JOIN 關鍵字會從左表 (Persons) 那裏返回全部的行,即便在右表 (Orders) 中沒有匹配的行。語法

 

RIGHT JOIN

RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回全部的行,即便在左表 (table_name1) 中沒有匹配的行。

SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

實例

如今,咱們但願列出全部的定單,以及定購它們的人 - 若是有的話。

您能夠使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

結果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

RIGHT JOIN 關鍵字會從右表 (Orders) 那裏返回全部的行,即便在左表 (Persons) 中沒有匹配的行。

 

FULL JOIN

只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。

SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

註釋:在某些數據庫中, FULL JOIN 稱爲 FULL OUTER JOIN。

實例

如今,咱們但願列出全部的人,以及他們的定單,以及全部的定單,以及定購它們的人。

您能夠使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

結果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  
    34764

FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裏返回全部的行。若是 "Persons" 中的行在表 "Orders" 中沒有匹配,或者若是 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行一樣會列出。

注意:MySQL不支持全外鏈接,因此能夠採起關鍵字UNION來聯合左、右鏈接的方法

網上找到的一種解決方案(並不適用全部場景):
由於MySQL不支持 FULL JOIN ,替代方法 left join + union(可去除重複數據)+ right join
select * from A left join B on A.id = B.id (where 條件)union select * from A right join B on A.id = B.id (where條件);
引用自:https://blog.csdn.net/jklfjsdj79hiofo/article/details/40399265

 

INNER JOIN

在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

註釋:INNER JOIN 與 JOIN 是相同的。

實例:

如今,咱們但願列出全部人的定購。

您能夠使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

結果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。若是 "Persons" 中的行在 "Orders" 中沒有匹配,就不會列出這些行。

相關文章
相關標籤/搜索