MySql 连接查询中 on 和 where 的区别
MySql 连接查询时,on 后面跟的是连接条件,再跟 and 关键就可以继续加过滤条件,这样看来是不是可以免用 where 增加过滤条件了呢?开始我也是这样以为的(老师是这么教的,且使用 on 的情况下不能使用 where)
当时存疑但没有深究,多次网上看帖写的连接查询用了 on,还用 where,所以了解了一下,现在做一个输出:
首先,老师教错了...(diss~)on 和 where 之间并没有冲突,随都用作设立条件,但有区别:
-
on 后跟连接条件,这是规范。其次,如果再加筛选条件只针对关联表!没错,是关联表的筛选条件
执行顺序:从表按照条件筛选,然后再进行连接;即先筛选再连接
-
where 则针对连接后产生的临时表进行筛选
执行顺序:先连接再筛选
所以,on 后跟关联表(从表)的过滤条件,where 后跟主表或临时表的筛选条件(左连接为例,主表的数据都会查询到,所以临时表中必定包含主表所有的字段,需要给主表加什么筛选条件,直接给临时表加效果相同)
注意:所有的连接条件都必须放在 on 后面,否则无论是 left 还是 right 连接都将不起作用(where 作用的是连接后的临时表,与连接已经无关)
因为 on 会首先过滤掉不符合条件的行,然后再进行其他运算,按理说 on 更快,允许的条件下,用 on 进行最大限度的筛选,后面 where 就避免重复筛选重复的数据,从而提升效率。还有一个重要特征:on 后的筛选条件筛选掉不符要求的字段后,对于主表中 null 结果的记录是没办法筛选掉的;而 where 则可以(关键就是 on 的筛选条件先筛选再连接,筛选时还不知道主表中的一些数据,自然没办法筛选)
作者: "无问西东"
出处:https://www.cnblogs.com/csyh/p/12969068.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!