mysql left join中where和on条件的区别

left join中关于where和on条件的几个知识点:

多表left join是会生成一张临时表,并返回给用户

  • where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记录,是真正的不符合就过滤掉。
  • on条件是对left join的右表进行条件过滤,但依然返回左表的所有行,右表中没有的补为NULL
  • on条件中如果有对左表的限制条件,无论条件真假,依然返回左表的所有行,但是会影响右表的匹配值。也就是说on中左表的限制条件只影响右表的匹配内容,不影响返回行数。

结论:

  • 对左表限制只能放到where条件,不能放到on后面(否则:无论条件真假,依然返回左表的所有行,但是会影响右表的匹配值)
  • where条件中对右表限制,放到on后面,会有数据行数差异,比原来行数要多

left join 关联inner join 使用:

select * from A a
left join B b
on a.id=b.id
inner join C c
on c.name = b.name

如果A表中有100条数据,B表和A表关联上50条数据,那么返回总数据条数为100条,其中50条B表中数据为null,此时B表inner join C表,如果关联匹配数据为0条,那么返回总条数不变还是100条,其中B表和C表数据全部为null

posted @ 2019-11-06 15:56  尘、世美  阅读(640)  评论(0编辑  收藏  举报