where条件是一个结果集_left join on 后and 和 where 的区别

1d7c8dfd87e10942a1097f9a06d267c0.png

left join on 后and 和 where 的区别


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

首先得明确俩个概念

  1. 使用 left join 会返回左表中所有的数据,及时右表中没有匹配的行。
  2. 俩个表关联查询时,首先生成一张临时表,然后再将这张临时表返回。

俩者的区别

  1. and 是在生成临时表时候起作用的,不管条件是否成立,都会返回左表中的全部数据。
  2. where 是在生成临时表之后起作用的,那么就会对临时表中的数据过滤。

案例

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

c4fe7eb1a8cd65c59761bdb3dedbd186.png

76216811391066af72da0607f87585e4.png
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` = '韩信';

第一条语句结果集:

34f42a84dd3549f8fe39f6d026f13cb1.png

第二条语句结果集:

b6b841b871bbd1f1eb8bae06d9961f0b.png

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

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

结论

  1. 如果左标中的数据全部返回 left join 后要用 and。
  2. where 会对左表中的数据过滤会丢失。
  3. t.id = s.teacher_id and s.name = '韩信' )是一个整体,这样就很好理解俩者的区别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值