查看: 285|回复: 7

[原创] 技术贴——MySQL的左连接(知识点分享)

[复制链接]
论坛徽章:
0
发表于 2019-5-16 18:57 | 显示全部楼层 |阅读模式
大家好~今天Amy要给大家分享一些关于MySQL左连接的知识点,以Amy多年的经验来看可以说是非常实用了,可以帮助大家有效的避免一些误区。对分布式事务数据库感兴趣的也可以翻一翻之前的文章哦。闲言少叙,我们直接上干货!
论坛徽章:
0
 楼主| 发表于 2019-5-16 18:58 | 显示全部楼层
【现象】
Ecbil项目中使用左联接的SQL语句,几乎全部存在如图1-1所示的不当写法:

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

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-16 18:58 | 显示全部楼层
【语法】
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……


使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-16 18:59 | 显示全部楼层
【特性】
ON字句连接条件,用于把2表中等值的记录连接在一起,但是不影响记录集的数量。若是left_table中的某记录,无法在表right_table找到对应的记录,则此记录依然显示在记录集钟,只表 right_table需要在查询显示的列的值用NULL替代;
ON字句连接条件中表right_table. columnname=XXX用于控制right_table表是否有符合要求的列值还是用NULL替换的方式显示在查询列中,不影响记录集的数量;
WHERE字句控制记录是否符合查询要求,不符合则过滤掉;


使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-16 18:59 | 显示全部楼层
【总结】
ON字句控制right_table的列值符合显示,还是不符合就用NULL替换,不影响最终符合查询要求的记录集;WHERE字句是控制那些记录是显示在最终的记录集中。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-16 18:59 | 显示全部楼层
【常见错误用法的左连接】
错把限制表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 | 06440350@qq.com | 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 | 02026078@qq.com | NULL | NULL |
| 7 | 03990516@qq.com | NULL | NULL |
| 9 | 05301926@qq.com | NULL | NULL |
| 1 | 06440350@qq.com | 817 | 39 |
| 4 | 16752438@qq.com | NULL | NULL |
| 2 | 25173782@qq.com | NULL | NULL |
| 10 | 56599949@qq.com | NULL | NULL |
| 3 | 66328120@qq.com | NULL | NULL |
| 5 | 92117196@qq.com | NULL | NULL |
| 8 | 93677961@qq.com | NULL | NULL |
±—±----------------±-----------±-------+

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-16 19:00 | 显示全部楼层
以上就是Amy为大家带来的知识分享,有什么不足指出欢迎大家指出,感兴趣的可以看一下之前的帖子——分布式事务数据库开发规范

使用道具 举报

回复
认证徽章
论坛徽章:
222
2010新春纪念徽章
日期:2010-03-01 11:20:51ITPUB元老
日期:2019-04-25 13:46:07至尊黑钻
日期:2015-08-13 13:38:12至尊黑钻
日期:2015-02-15 09:47:472015年中国系统架构师大会纪念徽章
日期:2015-07-31 17:48:202015中国数据库技术大会纪念徽章
日期:2015-05-15 14:08:23管理团队2007贡献徽章
日期:2015-01-19 09:48:27海蓝宝石
日期:2015-02-03 10:23:39红宝石
日期:2015-02-03 10:26:04会员2007贡献徽章
日期:2015-02-03 10:26:41
发表于 2019-5-17 16:36 | 显示全部楼层
图呢?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表