结论:On > Where > 聚合函数 > Having
On
用于表关联(left join,right join ...),生成临时表时的过滤条件,On条件生效后生成临时表,但主表记录不会被过滤,没有匹配条件的主表记录的对应列都会显示null而已。
Where
表关联情况下,On条件生效后生成临时表,这时如果有Where条件,会根据该条件过滤临时表的所有记录,此时无论是主表还是join表都会根据条件进行过滤。
Having
因为Having执行时机在最后,所以可以把聚合函数当做条件进行过滤。
使用
- On条件用于表关联,生效最快,但仍然会返回主表所有记录,其次是Where条件生效,可以筛选出想要的结果数据,如果有统计等聚合函数,Having会在最后生效。
- 如果非表关联查询,那么On则无法使用,如果涉及到的过滤条件也没有涉及到计算统计后的字段,那么此时Having和Where的作用是一样的,但是Where的效率较高。
网友评论