热线电话:13121318867

登录
2020-08-19 阅读量: 1278
Where和having之间的区别

按照执行顺序进行书写。

Select语句的执行顺序:

1. FROM, 2. WHERE, 3. GROUP BY, 4.HAVING, 5.SELECT,6.ORDER BY, 7.LIMIT

having作用于组,where作用于表。

例:

select deptno,job ,count(*) as 员工数

from emp

group by deptno,job; -- 先执行from后面的字段

select deptno,job,avg(sal) as 平均工资

from emp

group by deptno,job having job='clerk'; ---先分组再筛选

select deptno,job,avg(sal) as 平均工资

from emp

where job='clerk'

group by deptno; ---先筛选再分组进行聚合运算(where的效率更高,计算量更小)

having存在的意义:where只能存现在from的后面,where中不能出现聚合函数,不能出现在group by(在分组的同事进行聚合运算)后面,否则会出现书写顺序错误。

select deptno, avg(sal) as 平均工资

from emp

group by deptno

having avg(sal)>2000; -- 对分好的组进行筛选只能使用having。

select deptno, avg(sal) as 平均工资

from emp

group by deptno

where avg(sal)>2000; -- 报错:书写顺序不正确。

select deptno, avg(sal) as 平均工资

from emp

where avg(sal)>2000,

group by deptno -- 报错:where子句中不能用聚合函数,先执行where,再执行group by和聚合运算。

select deptno, avg(sal) as 平均工资

from emp

group by deptno

having 平均工资>2000; --having中用平均工资(即在select定义好的别名,在MySQL5.7之后的版本)。


27.8568
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子