Mysql數據庫——幾個join的區別


創數據庫多表查詢之 where & INNER JOIN

幾個join的區別

通過一個例子來說明幾個join:

在這裏插入圖片描述
目標:列出lastName+FirstName+OderNo
如圖
在這裏插入圖片描述

也就是找到全名並且找到該用戶對應的訂購號,只列出匹配的行。

實現這個目標我們可以使用where條件,比如

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

可以滿足目標,但是我們也可以使用join來得到結果。

inner join (join)

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

在這裏插入圖片描述
可以看到查找到的結果,id_p=2的人沒有對應的order所以就不列出來。

left join

如果我們想得到的是以第一個人名錶爲基準的呢,也就是說我要列出所有人的訂購order,即使他沒有order我也列出來,也就是說以左表爲基準。這時我們只使用left join

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

在這裏插入圖片描述
當然即使左表有重複的行,也都會返回,也就是說結果>=左表所有數據。
ps:條件和主鍵無關,只要兩個表能夠匹配上的條件即可。

right join

如果我們想列出所有order呢,即使這個order沒有人訂購,我們關注點不是人,而是order,使用right join也就是以右表爲基準

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

在這裏插入圖片描述

full join

現在我想列出兩個表全部的數據不管是否有對應的字段。

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

在這裏插入圖片描述

秒數轉化爲時間格式
(Round四捨五入時間)

SEC_TO_TIME( ROUND( message_reply_time.reply_duration / 1000 ) ) AS r_duration 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章