mysql left join on 与 where 筛选的差异


mysql left join   on 与 where 筛选的差异

准备两张表:
a表:
id       a
1       a1
2       a2
3       a3

b表:
id       b
1       b1
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';


  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值