Where
是一个约束声明,使用
Where
约束来
自数据库的数据,
Where
是在结果返回之前起作用的,
Where
中不能使用聚合函数。
Having 是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在 Having 中可以使用聚合函数。
Having 是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在 Having 中可以使用聚合函数。
在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。相反,HAVING 子句总是包含聚集函数。
- select deparment, avg(salary) as average from salary_info
- group by deparment having average > 3000
- select deparment, count(*) as c from salary_info
- where salary > 3000 group by deparment