mssql sqlserver 正确理解where和having 关键字之间的区别及应用


摘要:
下文主要讲述where having 关键字的用途及区别


where having 关键字可以同时应用于限定条件中,
where 关键字:过滤列,作为列条件进行使用
having 关键字:过滤聚合列,作为聚合列的限定条件进行使用
having功能:过滤聚合列,所以having 关键字常常同group by关键字一起应用
having关键字需放入 group by 后,作为限定聚合操作后数据过滤使用
————————————————-
例:

   create table A(name varchar(20),qty int)
go
insert into A(name,qty)values('maomao365.com',10)
insert into A(name,qty)values('maomao365.com',30)
insert into A(name,qty)values('maomao365.com',80)
go
----用法1:可以使用where,禁止使用having 
select name,qty  from A where qty >10 
go
select name,qty  from A 
   having qty >10  --HAVING 子句中的列 'A.qty' 无效,
   ----因为该列没有包含在聚合函数或 GROUP BY 子句中
go
---用法2:不可以使用where ,但可以使用having
select name,sum(qty) as qtyall from A  where qtyall>20 group by name 
---会提示qtyall 列不存在
go
select name,sum(qty) as qtyall from A  group by name  having qtyall>20

go
drop table A