SQL语句中where和having的区别
where是一个约束声明,是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据。where字句中不能包含聚组函数。where语句显示特定的行。
having是一个过滤声明,是筛选满足条件的组,即在分组之后过滤数据。having字句中可以包含聚组函数。having语句显示特定的组。
例1:查询平均工资大于200000的部门
此时只能使用having,而不能使用where。一来,我们要使用聚合语句avg;二来,我们要对聚合后的结果进行筛选(average > 3000),因此使用where会被告知sql有误。
例2:查询每个部门工资大于30000的员工个数
where在group by之前执行,having 在group by 之后执行。
where和having 可以同时存在一个SQL语句中。