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 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章