left join条件放在on后面和where后面的区别

on后面的条件:

  • 对于左表来说,不管on的条件是否为真,左表都会全部返回
  • 对于右表来说,当on的条件为假时,左表数据用null返回

where后面的条件:

  • 对连接后的结果表进行过滤 

如果将右表的过滤条件放在了where中,就可能会出现左连接后部分数据丢失的情况。

举个例子

有两个表,leader和department

 

下面看这两个SQL执行结果的区别

select * from department d LEFT JOIN leader l on d.departmentID=l.departmentID and l.departmentID is not null;

 

select * from department d LEFT JOIN leader l on d.departmentID=l.departmentID where l.departmentID is not null; 

 

再看下面这两个SQL的区别

select * from leader l LEFT JOIN department d on l.departmentID=d.departmentID and l.departmentID is not null;
 

select * from leader l LEFT JOIN department d on l.departmentID=d.departmentID where l.departmentID is not null; 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值