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

本文详细解析SQL中where和having的区别,重点在于where用于聚合函数前筛选,having用于聚合后的条件筛选。通过实例说明了它们在不同场景下的使用和限制,帮助理解SQL语句的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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执行顺序就明白了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值