mssql sqlserver中sql脚本编写-where having关键字区别及应用


摘要:
下文主要讲述sql脚本编写中,where及having 关键的用法区别,如下所示:
实验环境:sqlserver 2008



where having 关键字功能简介

where : 对检索数据进行过滤操作,where返回给用户的数据时,已经进行了where 过滤,where关键字不能使用聚合函数过滤
having : 对已查询出的数据,进行聚合函数过滤
————————————————————————–
where同having关键字之间的区别:
where 应用于行集数据过滤 –在数据聚合前先过滤
having 应用于聚合数据过滤 —在数据聚合后再进行过滤操作
在使用having关键字的地方,一定存在使用group by关键字的分组操作



where having 关键举例说明

create table A(name varchar(30),qty int)
go
insert into A(name,qty)values('maomao365.com',30)
insert into A(name,qty)values('maomao365.com',80)
insert into A(name,qty)values('maomao365.com',90)
go
----用法1:可以使用where,禁止使用having 
select name,qty  from A where qty >30 
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>50 group by name 
---会提示qtyall 列不存在
go
select name,sum(qty) as qtyall from A  group by name  having qtyall>50

go
drop table A