左连接left join条件放on和where后,90%的人搞错!

B站影视 电影资讯 2025-09-28 11:31 1

摘要:面试必问的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#

来源:志泽教育

相关推荐