开发日常小结(38):MYSQL: left join / right join / join 的使用区别和联系

2018年10月19日

目录

1、JOIN 的概念

2、JOIN 使用场景

3、场景一:INNER JOIN

4、场景二: LEFT JOIN 

5、场景三:RIGHT JOIN

6、场景四:FULL JOIN

FULL JOIN 关键字语法


1、JOIN 的概念

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

 

2、JOIN 使用场景

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行(注释:INNER JOIN 与 JOIN 是相同的。
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

 

3、场景一:INNER JOIN

在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

表数据

Persons::

Orders:

现在,我们希望列出所有人的定购。

查询语句:【左边:Persons,右边:Orders】

select p.LastName,p.FirstName,o.OrderNo
from g01_admin.Persons p
	INNER JOIN g01_admin.Orders o
    ON p.Id_P = o.Id_p
    ORDER BY p.LastName;

查询结果:

 

4、场景二: LEFT JOIN 

在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。

查询语句:【左边:Persons,右边:Orders】

select p.LastName,p.FirstName,o.OrderNo
	from g01_admin.Persons p
		LEFT JOIN g01_admin.Orders o
        ON p.Id_P = o.Id_P
        ORDER BY p.LastName;

查询结果:

 

5、场景三:RIGHT JOIN

在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。

查询语句:【左边:Persons,右边:Orders】

select p.LastName,p.FirstName,o.OrderNo
	from g01_admin.Persons p
		RIGHT JOIN g01_admin.Orders o
        ON p.Id_P = o.Id_P
        ORDER BY p.LastName;

查询结果:

 

6、场景四:FULL JOIN

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行;在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。


FULL JOIN 关键字语法

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

现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。

BUT!!!!

今天用MySQL进行全联查询时报错了,才知道MySQL不支持FULL JOIN,只支持左右关联 可根据左右关联查询实现全联查询。 Mysql不支持FULL JOIN,但是我们可以通过RIGHT JOIN + LEFT JOIN 达到FULL JOIN 的目的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值