技术专题——MySQL的左连接(知识点分享)

大家好~今天Amy要给大家分享一些关于MySQL左连接的知识点,以Amy多年的经验来看可以说是非常实用了,可以帮助大家有效的避免一些误区。对分布式事务数据库感兴趣的也可以翻一翻之前的文章哦。闲言少叙,我们直接上干货!

MySQL左连接

【现象】
Ecbil项目中使用左联接的SQL语句,几乎全部存在如图1-1所示的不当写法:

技术专题——MySQL的左连接(知识点分享)_第1张图片

为便于更多的技友快速读懂、理解,只讨论2张表对象进行连接操作的情况,大于2张表对象进行的连接操作原理也是一样的。

【语法】
SELECT M.columnname……,N.* columnname……
FROM left_table M LEFT JOIN right_table N ON M. columnname_join=N. columnname_join AND N. columnname=XXX
WHERE M.columnname=XXX……

【特性】
ON字句连接条件,用于把2表中等值的记录连接在一起,但是不影响记录集的数量。若是left_table中的某记录,无法在表right_table找到对应的记录,则此记录依然显示在记录集钟,只表 right_table需要在查询显示的列的值用NULL替代;
ON字句连接条件中表right_table. columnname=XXX用于控制right_table表是否有符合要求的列值还是用NULL替换的方式显示在查询列中,不影响记录集的数量;
WHERE字句控制记录是否符合查询要求,不符合则过滤掉;

【总结】
ON字句控制right_table的列值符合显示,还是不符合就用NULL替换,不影响最终符合查询要求的记录集;WHERE字句是控制那些记录是显示在最终的记录集中。

【常见错误用法的左连接】
错把限制表right_table的条件,从ON 子句中放到WHERE字句中的SQL及数据(编号:SQL_8)
root@localhost : eugene 03:49:57> SELECT M.ID,M.username,N.CollectNum,N.BuyNum
-> FROM left_table M LEFT JOIN right_table N ON M.ID=N.UID
-> WHERE M.ID<=6 AND N.SearchNum>300;
±—±----------------±-----------±-------+
| ID | username | CollectNum | BuyNum |
±—±----------------±-----------±-------+
| 1 | [email protected] | 817 | 39 |
±—±----------------±-----------±-------+

错把限制表left_table或称影响最终记录集的条件,从WHERE子句中放到ON字句中的SQL及数据(编号:SQL_9)
root@localhost : eugene 03:54:14> SELECT M.ID,M.username,N.CollectNum,N.BuyNum
-> FROM left_table M LEFT JOIN right_table N ON M.ID=N.UID AND M.ID<=6 AND N.SearchNum>300;
±—±----------------±-----------±-------+
| ID | username | CollectNum | BuyNum |
±—±----------------±-----------±-------+
| 6 | [email protected] | NULL | NULL |
| 7 | [email protected] | NULL | NULL |
| 9 | [email protected] | NULL | NULL |
| 1 | [email protected] | 817 | 39 |
| 4 | [email protected] | NULL | NULL |
| 2 | [email protected] | NULL | NULL |
| 10 | [email protected] | NULL | NULL |
| 3 | [email protected] | NULL | NULL |
| 5 | [email protected] | NULL | NULL |
| 8 | [email protected] | NULL | NULL |
±—±----------------±-----------±-------+

以上就是Amy为大家带来的知识分享,有什么不足指出欢迎大家指出,感兴趣的可以继续关注一下我哦~

你可能感兴趣的:(技术专题——MySQL的左连接(知识点分享))