文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

msSQL中的having有什么作用

2023-06-30 17:04

关注

这篇文章主要介绍“msSQL中的having有什么作用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“msSQL中的having有什么作用”文章能帮助大家解决问题。

where过滤数据

要说having,首先要说一下where,这个语句非常常用且重要。

在我们查询数据库时,不可能每一次都把所有数据拿出来(上亿的数据量,啥服务器也扛不住啊)

通常都是取出前10条,按时间取前30条,按名称、年龄、金额等数据表中有的字段的值进行筛选;也有可能筛选后数据还是比较多,会进行一个分页处理。
这里where的作用就必不可少了!只要是表中存在的字段值类型,写成布尔值结果的表达式即可,多条件与、或、非运算都可以。

可以说,项目中用到的SQL语句,99.9%都包含Where语句的,实用程度可想而知。

但是它却有无法实现的一些功能,这时,having就要出场了~

having存在的意义

SQL语句中,如果需要计算总数、累加、求均值等聚合运算,并筛选出总数未达到或达到的部分集合

Where语句无法替代的,比如

在Where 中使用 Count时,异常报错如下

msSQL中的having有什么作用

图片内容翻译: Where中不能出现聚合运算,只能写到having或者select中

因此,可以这么说,having可以做到where做不到的效果

having的日常运用

通常有having的地方都有聚合运算,

having查重

SELECT    CompanyNameFROM Company GROUP BY CompanyName HAVING count(1) > 1

having统计筛选:达到某一指标的集合

例如: 公司里2021年度总收入 < 120000 的员工筛选出来(然后涨工资~)

SELECT * FROMPayrollWHERE DATEPART(Year, CreateTime) = 2021GROUP BY EmployeeIdHAVING SUM(Wages) < 120000

必须group by后使用

通过上面的两个简单例子,可以看出,having都是写在group by后面

为什么是这样呢?

首先,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有什么作用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯