mysql中join使用on、where范围

MySQL UPDATE JOIN实战:语法、优化与踩坑记录 数据库运维中,多表数据同步与批量修正常常需要高效可靠的更新方案。面对订单快照同步、聚合统计回写等业务场景,单表更新难以处理关联逻辑,逐行子查询又容易引发严重的性能瓶颈。MySQL的UPDATE JOIN语法,能够通过表关联直接在一条SQL中完成多表更新,简化数据订正流程的同时,大幅降低了数据库压力。理解其执行原理、JOIN顺序对结果一致性带来的影响,以及索引和锁策略的选择,是高效应用的关键。从基础语法入手,拆解字段同步、LEFT JOIN兜底、CTE封装子查询等实践案例,并梳理一对多匹配、ON与WHERE混 阅读详情

例如存在两张表A,B表数据如下:
这里写图片描述

SQL 1:

select  A.ID as AID, B.ID as BID   from A left join B on A.ID = B.ID where B.ID<3  

SQL 2:

select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID and  B.ID<3    

以上两个语句的查询结果是否一致。
我们看看实际结果
SQL 1的查询结果
这里写图片描述

SQL 2的查询结果
这里写图片描述

发现两个查询存在差异。
为什么会存在差异,这和on与where查询顺序有关。
我们知道标准查询关键字执行顺序为 from->where->group by->having->order by
left join 是在from范围类所以 先on条件筛选表,然后两表再做left join。
而对于where来说在left join结果再次筛选。
SQL 1 语句查询过程如下等价于:
1:先是left join

select  A.ID as AID, B.ID as BID   from A left join B on A.ID = B.ID  

查询结果如下
这里写图片描述
2:再查询结果中将B.ID即BID<3筛选出来。
也就是我们上面看到的结果。

SQL2语句查询过程如下等价于:
1:先按照on条件B.ID<3筛选表等价于先筛选B表:
这里写图片描述

2:已上查询结果与A表做left join,这也是为什么我们看到第二个查询的sql会保留A表的原因。

ON与where的使用一定要注意场所:

1):ON后面的筛选条件主要是针对的是关联表【而对于主表刷选条件不适用】。
2):对于主表的筛选条件应放在where后面,不应该放在ON后面。
3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件放置于ON后。如果是想在连接完毕后才筛选就应把条件放置于where后面。
4): 对于关联表我们其实可以先做子查询再做join
所以第二个sql等价于

select  A.ID as AID, B1.ID as BID  

from A left join  ( select B.ID from B  where B.ID <3 )B1 on A.ID = B1.ID  
MySQL批量UPDATE优化:从WHERE IN到JOIN,避免锁表与主从延迟 在数据库运维中,批量更新是常见操作,但不当的UPDATE语句可能导致锁表、主从延迟甚至死锁。理解MySQL的锁机制与索引原理是关键:当WHERE条件命中索引时,InnoDB使用行锁,否则可能升级为表锁;同时,大事务会阻塞从库同步。通过合理分批、利用临时表JOIN或CASE WHEN,可以显著提升性能。这些技术广泛应用于数据订正、状态流转和库存扣减等场景。本文深入探讨MySQL一次更新多条记录的优化技巧,涵盖WHERE IN、CASE WHEN、JOIN临时表及INSERT ON DUPLICATE KEY 阅读详情

相关推荐

MySQL查询优化与表设计避坑指南:JOIN、索引、事务全解析

在数据库应用开发中,SQL查询性能与表结构设计直接决定系统稳定性。理解SELECT执行顺序、索引失效场景、事务隔离级别等基础原理,是提升数据操作效率的关键。合理使用JOIN与子查询、遵循最左前缀原则、区分WHERE与HAVING的过滤时机,都能有效避免深分页、锁等待等常见问题。无论是OLTP业务建模,还是复杂统计报表,掌握索引优化、规范化与反规范化的平衡,以及CRUD安全操作习惯,都能显著降低生产环境故障率。本文从SQL执行逻辑与索引底层机制入手,结合真实易错场景,系统梳理从单表查询到多表关联、从表设计到事

weixin_30768881的博客 220

HiveSQL中的JOIN ON条件,你理解对了吗?

HiveSQL很常用的一个操作就是关联(Join)。Hive为用户提供了多种JOIN类型,可以满足不同的使用场景。但是,对于不同JOIN类型的语义,或许有些人对此不太清晰。简单的问题,往往是细节问题,而这些问题恰恰也是重要的问题。本文将围绕不同的JOIN类型,介绍JOIN的语义,并对每种JOIN类型需要注意的问题进行剖析,希望本文对你有所帮助。JOIN类型类型含义Inner Join输出符合关联条...

大数据星球-浪尖 2818

二进制部署的K8s集群,如何对到期证书更新

一年前搭建的k8s集群,突然不能够正常访问,出现502错误,首先怀疑容器没起来,先对问题进行排查,排查响应的容器有没有正常启动,状态一切正常,访问容器地址也可以正常访问,于是访问node port地址,发现无法正常访问,确定问题出现在svc中。 由于其他的应用、系统也无法提供正常的服务,应该是k8s的问题,非单个应用的原因。查看服务状态,kubectl describe svc xxx,endp...

时光旅行者 3771

数据库mysql:输入两个工资范围,列出这个范围工资的员工是哪些

-- 示例: 输入两个工资范围,列出这个范围工资的员工是哪些 drop procedure if exists test; delimiter $$ create procedure test( in min_sal int(5) , in max_sal int(5) ) begin select ename , sal from emp where sal between min_sal and max_sal ; end $$ call test( 10000 , 16000 );.

XG_17_38241417116的博客 678

Unipush2.0 App消息推送(在线+离线推送)

使用unipush2.0进行消息推送,包含在线跟离线

weixin_50251467的博客 3699

机器学习篇-KNN算法实现鸢尾花模型和手写数字识别模型

一个样本最相似的k个样本中的大多数属于某一个类别, 则该样本也属于这个类别类似于: 近朱者赤近墨者黑回归机器建模流程:数据获取数据基本处理(空值和非法值)特征工程(特征提取, 特征预处理(归一化, 标准化), 特征降维, 特征选择, 特征组合)模型训练模型预测模型评估# 1. 定义函数 dm01_load_iris(), 用于加载 鸢尾花数据集, 并简单查看下数据集的各部分.# 1. 加载数据集.​# 2. 打印iris_data, 发现其实是1个: 字典.​。

m0_60916732的博客 2403

sql 语句left join on

left join 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 select column_name(s) from table_name1 left join table_name2 on table_name1.column_name=table_name2.column_nam...

hello_cmy的博客 1273

手把手教你打造CTF动态靶场

公司想搞一个CTF比赛,需要一个竞赛靶场,于是这个任务就落在了我的身上,平台是利用CTFd框架,基于docker搭建的动态靶场,搭建过程中遇到的坑比较多,这里我会把每一个遇到的坑都指出来。我搭建的是CTFd的3.X的版本。第一次搭建的话,搭建的过程会有些痛苦,但是搭建完成后会越来越熟练,这个平台的可用性还是很高的。由于搭建的过程中遇到的坑太多了,各种各样的问题,所以决定写下这篇文章,把所有的坑都指出来,也算为后边想搭这个平台的小伙伴指一条路。Taps:资源来源:星海安全实验室如果你也对网络安全&黑客。

Python栈 4934

sql(join中on与where区别)

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。 right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。 inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。 full join:外连接,返回两个表中的行:left join + right join。 cross join:结果是笛卡尔积

hoken的专栏 2871

VIPER22A实战:从零搭建15W非隔离电源,附BUCK电路调试心得

本文详细介绍了使用VIPER22A芯片从零搭建15W非隔离电源的全流程,重点解析BUCK电路设计与调试技巧。通过核心参数计算、PCB布局优化和效率提升方案,帮助工程师快速掌握DC-DC电源设计要点,实现高效稳定的电源转换。

redis7keeper的博客 669

【个人成长笔记】在Ubuntu中安装RTL8188GU USB无线网卡驱动(Driver for Linux RTL8188GU)

这篇笔记提供了在Ubuntu系统中安装RTL8188GU无线网卡驱动的完整指南。主要内容包括:驱动程序的官方来源(Github链接)、详细安装步骤(通过git下载、编译安装等命令),以及将设备转换为USB网卡模式的关键指令。特别提醒每次开机都需要执行模式转换命令,因为设备默认会以U盘模式启动。文章以简洁的技术文档形式呈现,适合Linux用户快速查阅和操作。

yuhuasheng1997的博客 1827

join on 的用法

一、内连接和外连接    内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录,语法如下:   Oracle代码 select table1.column,table2.column from table1 [inner|left|right|full]join table2 on table1.colum

qfljg的专栏 4万+

Mac安装Claude Code的3种方式及5类报错解决方案

介绍在Mac上安装Claude Code的3种实测可行方式(官方dmg、Homebrew+ARM原生构建、Docker容器化),并针对Gatekeeper签名验证失败、Rosetta 2内存对齐崩溃、Python ABI兼容性冲突等5类高频报错提供根因分析与可复现解决方案,覆盖M1–M3及Intel

weixin_28728443的博客 361

mysql 多表查询 join on_mysql多表查询

在做连表查询的时候,可以在联合的字段上面,分别加上索引字段,这样有加快搜索的速度左右连表查询时条件放在on后面和where后面的执行时机是不一样的例如test1表test2表执行SELECT * FROM test1 t1 LEFT JOIN test2 t2ON t1.no=t2.no AND t2.name='aaa';结果为SELECT * FROM test1 t1 LEFT JOIN t...

weixin_32816821的博客 628

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SQL关于left join的重复问题和连接条件where on筛选问题

datediff为null的时候,左表结果为7,右表为0,其他的以此类推,和前面的结果是一样的。这样我们就知道了,没有达到预期的根源在于存在空的日期。可以看到最终得到了想要的结果,以最后一行为例,它表示,距离2019-09-29 5天的那天(也就是2019-09-24)活跃的人数有5个,那些人在2019-09-29仍然活跃的有2人,你可以看一下明细数据核对一下。a表有6条记录,b表有3条记录,且关键的键是唯一的,因此最终结果以a表为准有6条记录,b表有3条关联不上,相应的记录中,b表所有的字段都为空。

Java后端技术栈 4793

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MySQL连表查询JOIN详解:从原理到实战,彻底搞懂ON与WHERE

在数据库查询中,理解表与表之间的关系是编写高效SQL的前提。JOIN(连接查询)作为多表数据关联的核心机制,其本质是笛卡尔积经过连接条件过滤的过程。掌握INNER JOIN、LEFT JOIN等不同连接类型的语义,以及ON与WHERE执行顺序的差异,能帮助开发者避免数据缺失或结果膨胀等问题。在实际业务中,无论是订单统计、用户画像还是报表分析,合理运用JOIN并结合索引优化,可显著提升查询性能。本文通过真实电商表结构,系统拆解MySQL中五种JOIN的用法与踩坑点,助你夯实连表查询基本功。

weixin_33483304的博客 267

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

mysql的函数执行顺序+sql优化

核心优化逻辑:基于执行顺序,把过滤逻辑尽可能前置(ON/WHERE 阶段),减少后续分组、排序的数据量,是提升复杂查询性能的关键;索引是基础:WHERE/GROUP BY/ORDER BY 的核心字段必须建索引,避免全表扫描、文件排序等耗时操作;简化计算:减少不必要的字段、分组、聚合嵌套,结合 LIMIT 缩小处理范围,避免深分页。

Jack_2085 575

mysql where条件执行顺序_mySql的执行顺序和执行计划

一、mySql的执行顺序mysql执行sql的顺序从 From 开始,以下是执行的顺序流程1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp12、JOIN table2 所以先是确定表,再确定关联条件3、ON table1.column = table2.column 确定表的绑定条件 由Temp1产生中间表Tem...

weixin_40002846的博客 2778

SQL高效实现基于JOIN的交叉分析_多表关联实现多维统计

JOIN顺序影响执行计划与性能,应将过滤后结果集最小的表作驱动表,避免ON中使用函数导致索引失效,改用范围条件。PostgreSQL 虽有代价估算,但小样本统计信息下也容易选错驱动表。把过滤条件最严、结果集最小的表放在 FROM 后第一位(即驱动表),例如用户表 users 有千万级,但加了 WHERE status = 'active' 后只剩 2 万,就该让它当驱动表避免在 ON 条件里写函数,比如 ON DATE(created_at) = DATE(other_date) 会失效索引;

HHHHH1010HHHHH的博客 196

mysql语句执行方式ref_Mysql语句执行步骤以及mysql优化

Mysql 中的语句执行步骤 对于索引的建立很有用FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1ON: 对虚表VT1进行ON筛选,只有那些符合的行才会被记录在虚表VT2中。JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以...

weixin_30564447的博客 621

表关联JOIN也要遵循最左匹配原则吗?用EXPLAIN看清索引利用真相

在MySQL性能调优中,联合索引的最左匹配原则是单表查询的核心规则,但表关联JOIN场景下,很多人却忽略了这一原则的重要性。理解B+树的复合排序结构,是掌握最左连续前缀生效机制的基石;而Nested Loop Join执行模型则揭示了被驱动表的关联条件如何直接决定索引能否命中。当ON条件与WHERE条件合并后,被驱动表的查找条件依然需要遵循最左匹配,否则极易引发全表扫描,导致慢查询。通过EXPLAIN执行计划,可以清晰辨别type为ref还是ALL,从而快速定位索引失效的根因。无论是后端开发排查慢SQL,还

weixin_33393017的博客 182

MySQL UPDATE详解:从基础语法到生产级避坑指南

在数据库日常运维中,SQL更新操作(UPDATE)是最常见也最具风险的数据变更方式。了解其底层执行原理,如InnoDB的行锁机制与事务隔离,是避免生产事故的关键。从基础单表SET语法到多表JOIN关联更新,从批量CASE WHEN优化到死锁排查,掌握这些技巧能显著提升开发效率与系统稳定性。本文围绕MySQL UPDATE的完整知识体系,结合真实踩坑案例,覆盖语法、事务、锁、性能调优与误操作自救,适合后端开发与DBA阅读参考。

weixin_31188927的博客 170

MySQL关联left join 条件on与where不同

MySQL关联left join 条件on与where不同 2010-05-18 14:14 佚名 博客园 我要评论(2) 字号:T | T 我们今天主要向大家讲述的是MySQL关联left join 条件on与where 条件的不同之处,以下就是文章的具体内容描述,望你会有所收获。 AD:2013云计算架构师峰会超低价抢票中   以下的文章主要讲...

iteye_5347的博客 140

mysql查询语句join、on、where执行顺序

MySQL 的执行顺序 一、典型SELECT语句完整的执行顺序 1)from子句组装来自不同数据源的数据; 2)使用on进行join连接的数据筛选 3)where子句基于指定的条件对记录行进行筛选; 4)group by子句将数据划分为多个分组; 5)cube, rollup 6)使用聚集函数进行计算; 7)使用having子句筛选分组; 8)计算所有的表达式; 9)计算select的字段; 10)使用distinct 进行数据去重 11)使用order by对结果集进行排序。 12)选择TOPN的数据 二

lihongbao80的专栏 1万+

mysql中join后on、where的区别

可能只看这两个关键字看不出任何的问题。那我们使用实际的例子来说到底有没有差异。      例如存在两张表A,B表数据如下:  语句一 Sql代码 select  A.ID as AID, B.ID as BID   from A left join B on A.ID = B.ID where B.ID<3    语句二 Sql代码

末路狂奔》》》》 1万+
上一篇: hive优化
下一篇: Mysql索引
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值