mysql 左连接查询记录数,MySQL左连接查询记录行数

最近修复一个数据问题,其中用到了左连接,我的意识里还以为A左连接B,查询出的记录数量会是A的记录数,然而实际操作后发现认知严重错。

网上关于左连接的一张图

eae0e1c8e43b6c4fe7d7ff67a8cf56da.png

摘自网上的一张图,图确实没毛病,但我却产生了误解,我会认为记录数量依然是A表的记录数量。

这里举个例子来说明问题

举个例子

student表数据如下

1

2

3

4

5id,name,address

1,stu_1,beijing

3,stu_3,dalian

22,alan,wuhan

55,alan,xinjiang

address表记录如下

1

2

3address,id,description

xinjiang,1,xinjiang真是美

xinjiang,2,xinjiang真是大

左连接操作如下

1

2

3select *

from student a

left join address b on a.address = b.address

最终结果集记录数为5,注意到address为xinjiang的数据有两条。WHY?因为address为xinjiang确实在address表中是两条记录。

结论

W3Schools中对于左连接是这么说的

The LEFT JOIN keyword returns all records from the left table (table1), and the matched records from the right table (table2). The result is NULL from the right side, if there is no match.

这句话应该完善下即table2中所有匹配的记录都会显示。

对于最终左连接的记录数量,一定是>=table1表记录数,因为即使关联条件在table2中没有找到相关记录也需要显示,但如果找到了且不唯一,那么这不唯一的多条也都要组合显示。

当然对于右链接,还是内连接,对于条件多条匹配情况,结果类似。

写在最后

问题虽然简单,但还是需注意下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值