相同点:HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法。
不同点:
1.执行时机不同:
where是分组之前进行过滤,不满足where条件,不参与分组;
having是分组之后对结果进行过滤。
2.判断条件不同:
where不能对聚合函数进行判断,而having可以
具体细讲它们的差异:
1.一般情况下,where 用于过滤数据行,而 having 用于过滤分组。
2.where 查询条件中不可以使用聚合函数,而 having 查询条件中可以使用聚合函数。
3.where 在数据分组前进行过滤,而 having 在数据分组后进行过滤 。
4.where 针对数据库文件进行过滤,而 having 针对查询结果进行过滤。也就是说,where
根据数据表中的字段直接进行过滤,而 having 是根据前面已经查询出的字段进行过滤。
5.where 查询条件中不可以使用字段别名,而 having 查询条件中可以使用字段别名。
总结:
1.having和group by搭配使用,having后跟聚合函数,(where 后面不能跟聚合函数),在查询字段中要有该聚合函数,没有group by就用where过滤。
2..having后的可以使用字段别名,where不可以用字段别名。