首先说一下having子句的作用:having子句主要用于过滤分组。
分组函数也叫组函数也叫多行函数。
(1)having子句的使用
求平均工资大于2000点部门
select deptno , avg(sal) from emp group by deptno having avg(sal)>2000;
(2)where与having点区别
不能在where子句中使用组函数,但是可以在having子句中使用组函数
不含分组函数时where和having是可以通用的
(3)错误示例
select deptno,avg(sal) from emp where avg(sal) > 2000 group by deptno;
(4)where和having可以通用的情况
查询10号部门的平均工资
select deptno,avg(sal) from emp group by deptno having deptno = 10;
select deptno,avg(sal) from emp where deptno=10 group by deptno;
(5)注意:从SQL优化的角度尽量使用where
原因:having先分组后过滤,where先过滤后分组
where使得分组记录数大大降低,从而提高效率