SQL中WHERE与HAVING的区别

主要区别

where:

1、不可以使用聚合函数

2、在结果返回之前起作用

having:

1、可以使用聚合函数

2、在结果返回之后起作用

这里“聚合函数”的定义就不再赘述了,无非就是SUM、AVG、MAX等这些。

这里唯一有点理解难度的可能就是对于“结果返回”的理解,为了帮助理解,请看下面三个例子:

1、where与having都可以用

select goods_price,goods_name 
from sw_goods 
where goods_price > 100
select goods_price,goods_name 
from sw_goods 
having goods_price > 100

1)where直接从表sw_goods中查找符合goods_price>100条件的数据并返回goods_price与goods_name。

2)having是将表sw_goods中所有goods_price与goods_name返回,再再其中筛选满足goods_price>100条件的数据。

2、where可用而having不可用

select goods_name,goods_number 
from sw_goods 
where goods_price > 100
select goods_name,goods_number 
from sw_goods 
having goods_price > 100 //报错!!!

1)where直接从表sw_goods中查找符合goods_price>100条件的数据并返回goods_number与goods_name。

2)having报错的根本原因是因为,将表sw_goods中所有goods_number与goods_name返回,再用goods_price>100去判断,则找不到对应的属性。

3、having可用而where不可用

select goods_category_id , avg(goods_price) as ag 
from sw_goods 
group by goods_category 
having ag > 1000
select goods_category_id , avg(goods_price) as ag 
from sw_goods 
where ag>1000 
group by goods_category //报错!!

1)将表sw_goods中所有数据按照goods_category归类,并返回goods_category_id 与 avg(goods_price),having再通过条件avg(goods_price)>1000进行筛选

2)where中不能使用聚合函数故报错。

结论

设select中所有字段简称为A,where与having中的筛选条件为B

1)where则是先按照筛选条件B获得满足条件数据的字段A并返回。

2)having则是在表中所有数据组成的字段A的基础上再通过条件B进行筛选

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值