MSSQL中having存在的意义是什么,有哪些运用
Admin 2022-08-03 群英技术资讯 1321 次浏览
这篇文章主要讲解了“MSSQL中having存在的意义是什么,有哪些运用”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。要说having,首先要说一下where,这个语句非常常用且重要。
在我们查询数据库时,不可能每一次都把所有数据拿出来(上亿的数据量,啥服务器也扛不住啊)
通常都是取出前10条,按时间取前30条,按名称、年龄、金额等数据表中有的字段的值进行筛选;也有可能筛选后数据还是比较多,会进行一个分页处理。
这里where的作用就必不可少了!只要是表中存在的字段值类型,写成布尔值结果的表达式即可,多条件与、或、非运算都可以。
可以说,项目中用到的SQL语句,99.9%都包含Where语句的,实用程度可想而知。
但是它却有无法实现的一些功能,这时,having就要出场了~
SQL语句中,如果需要计算总数、累加、求均值等聚合运算,并筛选出总数未达到或达到的部分集合
Where语句无法替代的,比如
在Where 中使用 Count时,异常报错如下

图片内容翻译: Where中不能出现聚合运算,只能写到having或者select中
因此,可以这么说,having可以做到where做不到的效果
通常有having的地方都有聚合运算,
SELECT
CompanyName
FROM Company
GROUP BY CompanyName
HAVING count(1) > 1
例如: 公司里2021年度总收入 < 120000 的员工筛选出来(然后涨工资~)
SELECT * FROM Payroll WHERE DATEPART(Year, CreateTime) = 2021 GROUP BY EmployeeId HAVING SUM(Wages) < 120000
通过上面的两个简单例子,可以看出,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,这里就筛选出来领的少的员工,然后进行补偿....这整个顺序大致分三步:拿零食、分零食、找少的;它的顺序肯定是不可颠倒的,总不能先找少的?还没分呢,先分,那零食还没拿出来或买回来,怎么分....
好了既然执行顺序理清了,拿写法也是相当人性化,就按照执行顺序来写就行了,好理解,书写时也符合我们的思维逻辑。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
SQL ROUND() 函数用于把数值字段舍入为指定的小数位数,有不少朋友对于SQL ROUND() 函数比较感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
前言经过前几篇的分析,其实大体已经初窥到SQLServer统计信息的重要性了,所以本篇就要祭出这个神器了。该篇内容会很长,坐好板凳,瓜子零食之类…不废话,进正题技...
sql怎么创建约束?在SQL Server中有五种约束,分别是Primary Key约束、Foreign Key约束、Unique约束、Default约束和Check约束。对于新手来说,不是很了解约束的创建和使用,对此,下面就给大家介绍一下。
这篇文章主要为大家介绍了SQLServer数据库的设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
SQL MID() 函数用于从文本字段中提取字符,有不少朋友对于SQL MID函数比较感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008