msSQL中having的用处详解


当前第2页 返回上一页

为什么是这样呢?

首先,group by作用是将数据进行按条件分组,having的作用是对聚合计算操作后的数据进行筛选

因此,没有前面的分组,也就没办法聚合计算了,那更没有对聚合结果的筛选操作了

结论:having出现的地方,前面必须有group by,而反过来则不一定(有group by,不一定需要having...)

具体执行顺序的梳理

首先肯定是数据来源开始,数据都在数据库中,对数据库中数据进行筛选的是Where,那where肯定第一个执行

把数据拿出来之后,直接比较?肯定不是,要按条件进行分类(即分组),最后才是聚合计算,having过滤的是聚合计算的结果。

换句话说,where查询完数据库,数据已经到了设备的内存当中了,group by 和 having 都是在内存中进行的!相当于数据被筛选了两次,计算了一次,这一次计算夹在两次筛选之间,而计算前还有一次分组的过程。

这里也可以看出来,where和having都是过滤数据,前者是过滤数据库中数据,后者是过滤聚合计算后的数据!

举一个简单例子理解这里的执行顺序

一个不会举例子的程序员是没有前途的....

比如公司给员工发福利之分零食,首先肯定要把零食从超市或仓库里拿出来(购买或拿肯定有一个筛选过程,就是where了),然后再按人员或部门进行分发(Group by),最后领导说,统计一下那些人分的少于3包

(随便规定一个条件),这里就用到了having,这里就筛选出来领的少的员工,然后进行补偿....这整个顺序大致分三步:拿零食、分零食、找少的;它的顺序肯定是不可颠倒的,总不能先找少的?还没分呢,先分,那零食还没拿出来或买回来,怎么分....

好了既然执行顺序理清了,拿写法也是相当人性化,就按照执行顺序来写就行了,好理解,书写时也符合我们的思维逻辑。

总结

到此这篇关于msSQL中having用处详解的文章就介绍到这了,更多相关msSQL中having用处内容请搜索

更多SQL内容来自木庄网络博客


标签:SQL

返回前面的内容

相关阅读 >>

mysql sql服务器模式介绍

将图片储存在mysql数据库中的几种方法

go第三方库sqlx操作mysql及orm原理

sql server中数据行批量插入脚本的存储实现

sqlserver2005 行列转换实现方法

sql注入原理与解决方法代码示例

如何查看sql server版本

惊!一行sql语句竟然这么多锁..

pandas操作mysql的方法详解

sqlserver 跨库查询实现方法

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...