1、作用对象不同:where子句作用于表(或视图)中得行,而having子句作用于形成的组;
where子句限定查找的行,having子句限定查找的组;
2、执行顺序不同:若查询语句中同时有where子句和Having子句,执行时先去掉不满足where条件的行,然后分组,分组后再去掉不满足having条件的组;
3、where自居不能直接使用聚合函数,having子句条件中可以包含聚合函数
having子句和where子句的区别在于:where子句的搜索条件在进行分组操作之前应用;而having搜索条件在进行分组操作之后。having子句语法和where子句语法类似,但在having子句中可以包含聚合函数。
例如:
select Dep_id, MAX(Wage) as 最高工资 from Employees group by Dep_id having MAX(Wage)>6000
select Dep_id, MAX(Wage) as 最高工资 from Employees where MAX(Wage)>6000 group by Dep_id
即可砍出区别
答:HAVING子句与WHERE子句之后都写条件表达式,而且都会根据条件表达式的结果筛选数据,它们是有区别的,主要区别如下。
(1)HAVING子句用于筛选组,而WHERE子句用于筛选记录。
(2)HAVING子句中可以使用聚合函数,而WHERE子句中不能使用聚合函数。
(3)HAVING子句中不能出现既不被GROUP BY子句包含,又不被聚合函数包含的字段,而WHERE子句中可以出现任意的字段。
having 后面可以跟聚合函数,比如having max(ID)>1
where 后面不能,会报错