“Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”;
“Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。
本质的区别就是where筛选的是数据库表里面本来就有的字段,而having筛选的字段是从前筛选的字段筛选的。
比如我的条件是
金额的平均值大于300, 平均值需要我们先求出来,所以要用having,
而金额大于300 金额这个就在表中,不需要再求,所以用where
where 在group by 前面
having 在group by 后面
where 不能使用别名,因为执行顺序是,先执行FROM 子句,然后执行WHERE 子句,最后执行SELECT 所以Select 子句后的别名,在where条件中不能使用