1、Where关键字的作用是过滤,选取符合条件的记录,而Having关键字的作用则是,为聚合结果指定条件。即:Where 子句是用来指定 "行" 的条件的,而Having 子句是指定 “组” 的条件的。

2、where子句在Where子句和Having子句都可以使用的时候,从语句的执行效率来看,最好写在Where子句中。因为在使用Count函数等对表中的数据进行聚合操作时,DBMS内部会进行排序处理,而排序操作会增加机器的负担,减少排序的行数,可以增加处理速度。而where子句是先过滤再排序,having子句则是先排序再过滤。

3、可以对Where子句指定条件所对应的列创建索引,这样可以大幅提高处理速度。

4、Where子句中不能使用聚合函数,而Having子句中可以。