Mysql中left join中where和on的区别

本文详细探讨了MySQL中LEFT JOIN操作时,WHERE子句与ON子句在使用上的区别。LEFT JOIN主要用来连接两个表,即使在右表中没有匹配的记录,也会返回左表的所有记录。WHERE主要用于过滤结果集,而ON则用于指定连接条件。理解两者的区别对于写出高效的SQL查询至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

left join中关于whereon条件的几个知识点:

1.多表left join是会生成一张临时表,并返回给用户

2.where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记录,是真正的不符合就过滤掉。

3.on件是对left join的右表进行条件过滤,但依然返回左表的所有行,右表中没有的补为NULL

4.on条件中如果有对左表的限制条件,无论条件真假,依然返回左表的所有行,但是会影响右表的匹配值。也就是说on中左表的限制条件只影响右表的匹配内容,不影响返回行数。(下面测试04)

# 主表:A、关联表:B、关联条件:A.od=B.a_id、筛选条件:B.id=1
A left join B on A.id=B.a_id and B.id=1

1.表 A 和表 B 的连接依靠关联条件
2.主表的筛选条件,应该放置在 where 条件后
3.on 后面的筛选条件是针对于关联表
4.关联表的筛选条件,如果放置在 on 后面,那么 A 和 B 的连接顺序为:B 表先按条件查询,再与 A 表连接,即先筛选再连接;如果放置在 where 后面,那么 A 和 B 的连接顺序为:A 与 B 连接后,再从连接表中筛选,即先连接再筛选
5.where 后面的条件是对连接后的数据进行筛选
6.如果存在多个left join on,请注意on后面的条件与哪个表关联。这一条统计的SQL很重要!例如表A,B,C,A left join B on A.x = B.x left join C on A.x = C.x,B和C的都要和A建立关联,B和C之间是没有任何数据上的关系。但是 如果把A.x = C.x改成B.x = C.x,那么B和C的表数据先建立关联并过滤数据,再与A表数据进行关联,这样可能会出现数据丢失!

 

测试:

创建两张表:

CREATE TABLE t1(id INT,name VARCHAR(20));

insert  into `t1`(`id`,`name`) values (1,'a11');

insert  into `t1`(`id`,`name`) values (2,'a22');

insert  into `t1`(`id`,`name`) values (3,'a33');

insert  into `t1`(`id`,`name`) values (4,'a44');



CREATE TABLE t2(id INT,local VARCHAR(20));

insert  into `t2`(`id`,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值