例子:
select max(orgid) from auditresults where warningrulesid=100000021 having orgid>=100000737 group by orgid;
select max(orgid) from auditresults where warningrulesid=100000021 group by orgid having orgid>=100000737;
这两句sql,初看结果集是一模一样的。但是第一句在例子中比第二句快很多
一:
where是对所有数据表的所有行起作用,即对某一个表的所有行进行条件匹配过滤,是行级概念。having是对数据分组起作用,它对group by之后的某一组类型数据进行筛选,即过滤数据组,针对的是一个集合对象。一般来说用where速度相对较快。
但是having是相对于聚合查询,根据聚合后的数据集合中去排除的,在一定的业务下,还是要用到having的
二:一般使用下,我们通常把having 放在group by之后的,这仿佛是一个惯例,也符合了having与生俱来的作用。但是当我们把having放在group by之前呢,having还是像他定义的那样运行吗?
再看两句sql:
select max(orgid) from auditresults having orgid>=100000737 group by orgid order by orgid;
select max(orgid) from auditresults group by orgid having orgid>=100000737 order by orgid;
这个时候,第二句又比第一句快很多了。排序还是一样的。
看来having的使用还是要根据不同的情况了,在聚合时若非必须用到,就用where代替,毕竟行级的查询还是要比集合的筛选快一些的,having最好还是按照定义的那样去用,放在group by 后面去筛选。
分享到:
相关推荐
sql中where和havingsql中where和having区别
主要介绍了数据库SQL中having和where的用法区别的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
sql语言 where和having区别
何时使用having where,请遵照下面的说明:WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
给大家详细的介绍了SQL中Having与Where的区别,以及这两者的注意事项,文中还分享了Having与Where的示例代码,相信对大家的理解和学习很有帮助,感兴趣的朋友们可以参考借鉴,有需要的朋友们可以一起学习学习。
主要介绍了sql中的 where 、group by 和 having 用法解析,需要的朋友可以参考下
“Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”; “Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回...
SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between SQL Aliases SQL Join SQL Inner Join SQL Left Join SQL Right ...
T-SQL中where子句与having子句的对比分析.pdf
数据库之where与having
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句... (注意max(sal),job的job并非一定要出现,但有意义) 查询语句的select和groupby,having
在同一查询中使用 HAVING 子句和 WHERE 子句 在某些情况下,在对作为一个整体的组应用条件之前(使用 HAVING 子句),可能需要从组中排除个别的行(使用 WHERE 子句)。
详析SQL语言的WHERE子句与HAVING子句.pdf
主要给大家介绍了关于SQL中where子句与having子句的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选