Mysql中join和left join的比较及代码实例

Mysql中join和left join的比较


我使用的是Mysql 8.0版本,join的官方手册定义链接 1
https://dev.mysql.com/doc/refman/8.0/en/join.html
注:以下均为我自己的理解和笔记,如果有错误欢迎指正。

Join

Join指合并两个或多个包含同个属性的table。如果这个属性中的元素在一个表有而另一个表没有,那么join后的结果中会忽略掉。
在Mysql中,单独使用join等价于cross join 和 inner join,但是在Standard sql中这三者不一样。

代码实例

书上的数据库样例,水手sailors, 船boats 和 租借记录reserves 三个表。其中sailors 和reserves如下:
在这里插入图片描述
*** join ‘sailors’ 和 ‘reserves’ 表的sql语句:***

select * from sailors S inner join reserves R on S.sid=R.sid;

结果:
在这里插入图片描述
这里将表Sailors 和 Reserves 结合,但join的方式是通过合并共有的sid列,如果一方有而另一方没有,则忽略掉。
可见在sailor中没有租借记录的人,即在reserves表中没有记录的人,就不会在结果表中有记录。

Left join

left join 会以第一个合并的table为首,保留合并其他table的列的所有intance,如果该信息不存在,则显示为null。所以不同的left join顺序也会导致最后的table结果不同。

代码实例

Left join ‘sailors’, ‘reserves’ 和 ‘boats’ 三个表:

  1. Left Join boats, reserves, sailors
select * from boats as B left join (reserves R,sailors S) on (R.sid = S.sid and B.bid = R.bid);

结果:
在这里插入图片描述
2. Left Join reserves, boats, sailors

select * from reserves as R left join (Boats B,sailors S) on (R.sid = S.sid and B.bid = R.bid);

结果:
在这里插入图片描述

  1. Left join sailors, boats, reserves
select * from sailors S left join (Boats B,reserves R) on (R.sid = S.sid 
and B.bid = R.bid);

结果:
在这里插入图片描述

上述三种left join的结果均不同,这主要是left join的顺序不一致,最后也会按照第一个表的最左边列来补齐整个结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值