LEFT JOIN中ON后加条件 与 主表WHERE后加条件的区别

本文通过实例解析了在MySQL中,关联查询时将限制条件置于`leftjoin`后的`on`子句与置于`where`子句的区别。前者不影响A表记录展示,仅筛选B表;后者先联接再过滤,对主表记录数量有影响。
摘要由CSDN通过智能技术生成

引出问题

朋友甩过来一张图片
问我这两个查询有什么区别
仔细一看
这不就是问: 把限制条件放在关联表left join [tableName] on后面与放在主表where后面的区别
在这里插入图片描述

创建实例

环境 mysql 5.7
创建表A和表B并插入数据,以id为对应关系
在这里插入图片描述

不加限制条件关联查询,所有记录以id为对应关系展示
select * from table_A A left join table_B B on A.id_A = B.id_B;
在这里插入图片描述

对比差异

把关联条件条件放在关联表的on后面
select * from table_A A left join table_B B on A.id_A = B.id_B and b.id_B = 1;
在这里插入图片描述

把关联条件放到主表where后面
select * from table_A A left join table_B B on A.id_A = B.id_B where b.id_B = 1;
在这里插入图片描述

结论


    很容易发现,from A left join B on […] and […] 中的and不会过滤结果记录条数,只会根据and后的条件判断是否显示B表的记录,A表的记录一定会显示

    不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。


    而 from A left join B on […] where […] 不控制B表数据的展示,但会对主表的记录条数进行过滤。 其实就是在两张表关联生成临时表之后,根据where条件过滤出结果。


这种简单的sql并不难懂
可能
对于那种很复杂的sql [你] 又懵了
不要慌
所有复杂的sql都是从简单sql延伸出来的
一定能从里面看出来 [你] 熟悉的语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值