where和having的使用区别(及sql的执行顺序)

sql的执行顺序

1.from
2.where
3.group by
4.聚合函数 count(), sum(), min()
注意聚合函数 是在group by 之后having之前
5. having
6.select
7.order by

1. 使用角度

说起它俩的区别, 不得不说起聚合函数; where是在聚合函数之前执行, having是在聚合函数之后执行

2. 具体实现

(1). 相同点
select id, name,age from stu where age>18;
select id, name,age from stu having age>18;

可用having的原因是已经筛选出age字段,在这种情况下是和where效果一样。

(2)不同点 – 只能使用where 不能使用having
select id, name from stu having age>18; 这种时候使用having就会报错(unknown column ‘age’ in having)。 所以这种情况

(3)不同点 – 只能用having 不能用where

select stuNo, avg(score) from stu group by stuNo having avg(score)>60; 正确

select stuNo, avg(score) from stu group by stuNo where avg(score)>60; 错误
这里where不管放在group by前还是后,都是错的, 看下文章开头的sql执行顺序就明白了

猜你喜欢

转载自blog.csdn.net/weixin_42915457/article/details/124248787