摘要:面试必问的SQL陷阱!LEFT JOIN条件写在ON和WHERE后,查询结果天差地别!程序员必看,避免深夜踩坑!
面试必问的SQL陷阱!LEFT JOIN条件写在ON和WHERE后,查询结果天差地别!程序员必看,避免深夜踩坑!
大家好,今天分享一个SQL中极易出错的知识点——Left Join条件放在ON和WHERE后的区别!这个问题在面试中经常被问到,实际开发中更是坑过无数程序员!
先看一个震撼的对比实验
假设我们有两张表:
users用户表(id, name)orders订单表(id, user_id, amount)查询需求: 找出所有用户及其订单金额大于100的订单
写法1:条件放在ON后面
SELECT u.name, o.amountFROM users uLEFT JOIN orders o ON u.id = o.user_id AND o.amount > 100;写法2:条件放在WHERE后面
SELECT u.name, o.amountFROM users uLEFT JOIN orders o ON u.id = o.user_id WHERE o.amount > 100;猜猜看,两种写法的结果一样吗?
答案:完全不一样! 这就是90%程序员都会踩的坑!
终极区别解析
✅ ON后面的条件:在连接时生效,影响连接过程,但不会过滤主表记录
主表所有记录都会保留只影响从表的匹配结果❌ WHERE后面的条件:在连接后生效,会对最终结果集进行过滤
会过滤掉主表中不符合条件的记录实际上把Left Join变成了Inner Join!一句话总结:
ON条件:影响怎么连(连接过程)WHERE条件:影响连完怎么筛(结果过滤)实际效果对比
场景
ON条件
WHERE条件
主表记录
全部保留
可能被过滤掉
从表匹配
只连接符合条件的数据
先连接后过滤
结果集大小
主表记录数
可能小于主表记录数
实战建议
如果要保留主表所有记录,用ON如果要过滤最终结果,用WHERE关联条件放ON,过滤条件根据需求选择现在明白了吗?下次写SQL时可别再踩这个坑了!如果你也觉得这个知识点很有用,记得点赞收藏,转发给需要的同事!
SQL优化 #数据库 #程序员面试 #后端开发 #技术干货 #编程技巧 #LeftJoin
#SQL优化# #数据库# #Left join#
来源:志泽教育