join on 后跟or有什么用_left join on 后and 和 where 的区别

left join on 后and 和 where 的区别

俩者放置相同条件,但是结果集不同,就是由于优先级不同,on的优先级高于where的。

首先得明确俩个概念使用 left join 会返回左表中所有的数据,及时右表中没有匹配的行。

俩个表关联查询时,首先生成一张临时表,然后再将这张临时表返回。

俩者的区别and 是在生成临时表时候起作用的,不管条件是否成立,都会返回左表中的全部数据。

where 是在生成临时表之后起作用的,那么就会对临时表中的数据过滤。

案例

创建表1 teacher 和表2 student 如下图

SELECT * from teacher t LEFT JOIN student s ON t.id = s.teacher_id and s.`name` = '韩信';

SELECT * from teacher t LEFT JOIN student s ON t.id = s.teacher_id WHERE s.`name` = '韩信';

第一条语句结果集:

第二条语句结果集:

第一条语句执行的时候 (t.id = s.teacher_id and s.name = '韩信' )是一个整体 ,找到 student 表中符合的行于teacher 表中匹配 , 及时teacher 中有不符合的数据也会生成临时表返回。

第二条语句执行的时候 先执行了 (t.id = s.teacher_id) 生成临时表返回,然后where 条件过滤,所以存在丢失teacher 中的数据。

结论如果左标中的数据全部返回 left join 后要用 and。

where 会对左表中的数据过滤会丢失。

t.id = s.teacher_id and s.name = '韩信' )是一个整体,这样就很好理解俩者的区别。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值