mysql left join on 与 where 筛选的差异

mysql left join   on 与 where 筛选的差异

准备两张表:
  1. a表:  
  2. id       a  
  3. 1       a1  
  4. 2       a2  
  5. 3       a3  
  6.   
  7. b表:  
  8. id       b  
  9. 1       b1  
  10. 2       b2  

1.没有条件
SELECT * FROM a
LEFT JOIN b ON a.id = b.id;
------------------------------
id       a    id1    b
1    a1    1    b1
2    a2    2    b2
3    a3

2.WHERE
SELECT * FROM a
LEFT JOIN b ON a.id = b.id
WHERE b.b = 'b1';
------------------------------
id       a    id1    b
1    a1    1    b1    

3.ON(AND)
SELECT * FROM a
LEFT JOIN b ON a.id = b.id
AND b.b = 'b1';
------------------------------
id       a    id1    b
1    a1    1    b1
2    a2    
3    a3

发现left join 语句 on和 where有差异,
和标准查询关键字执行顺序有关;

left join 是在from范围类,所以先on条件筛选表,然后两表再做left join。
而对于where来说在left join结果再次筛选

where等价于:
1>SELECT * FROM a LEFT JOIN b ON a.id = b.id;
2>在查询结果中将b.b = 'b1'筛选出来

on(and)等价于:
1>select * from b where b.b = 'b1'
2>再将查询结果与A表做left join

*********************************************    
* 对于主表的筛选条件应放在where后面
* 对于关联表的筛选条件应放到on后面


对于关联查询,其实可以先做子查询,再join
SELECT * FROM a
LEFT JOIN (SELECT * from b where b.b = 'b1') b ON a.id = b.id
where a.a = 'a1'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值