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