left join on 后and 和 where 的区别

背景

平常SQL功底较浅,公司也推崇我们能java处理的数据,尽可能用java处理。所以比较容易忽略一些基础的东西。

遇到的问题

left join 的时候数据在结果集,where 筛选之后 左边的数据也被筛掉。自己考虑可能是放在where后对整个查询结果集进行筛选的原因。

查资料

看了一些网上的资料,发现如果是把条件放在on后,mysql会建立一个临时表,在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。

但是如果放在where后的话,就是对整个临时表进行筛选了。

所以要根据自己的业务需求来看。

总结

如果是on后的条件筛选,则左边的表行都会在结果集
如果是where后的条件筛选,会对整个结果集进行筛选

你可能感兴趣的:(sql,数据库,mysql)