where子句和having子句区别
感谢大佬:https://blog.csdn.net/XiaopinOo/article/details/78305008
where子句和having子句的区别:
1.where 不能放在group by后面
2.having 是跟group by连在一起用的,放在group by 后面,此时的作用相当于where
3.where 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。
一、where子句
where子句:where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选,where子句中允许使用比较运算符和逻辑运算符
二、having子句
having子句:having子句通常是与order by子句一起使用的,因为having的作用是对使用group by 进行分组统计后的结果进行进一步的筛选。
三、下面通过where子句和having子句的对比,更进一步的理解他们
在查询过程中聚合函数(SUM,MIN,MAX,AVG,COUNT)要比having子句优先执行,简单的理解为只有有了统计结果后我才能执行筛选。where子句在查询过程中执行优先级别优先于聚合函数(SUM,MIN,MAX,AVG,COUNT),因为他是一句一句筛选的,HAVING子句可以让我们筛选成组后的对各组数据筛选。而WHERE子句在聚合前筛选记录,如:现在我们想要部门号不等于10的部门并且工资总和大于8000的部门编号?
分析:通过where子句筛选除部门编号不为10的部门,然后对部门工资进行统计,然后使用having子句对统计结果进行筛选。
select deptno,sum(sa1) from emp
where deptno!='10' group by deptno
having sum(sa1)>8000;
四、异同点
他们的相同之处就是定义搜索条件,不同之处是where子句为单个筛选而having子句和组有关,而不是与单个的行有关
最后:理解having子句和where子句最好的方法就是基础select 语句中的那些句子的处理次序:where子句只能接受from子句输出的数据,而having子句则可以接受来自group by ,where或者from子句的输入。
having子句会在分组后对分组形成的结果进行过滤。
这个过程需要聚合、排序、因此如果通过where子句限制记录而省略掉having子句,是可以提升性能的。
总结:
where子句:是在分组之前使用,表示从所有数据中筛选出部分数据,以完成分组的要求,
在where子句中不允许使用统计函数,没有group by子句也可以使用。
having子句:是在分组之后使用的,表示对分组统计后的数据执行再次过滤,可以使用
统计函数,有group by子句之后才可以出现having子句。
where子句和having子句区别的更多相关文章
- where 子句和having子句中的区别
1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数 ...
- oracle中where 子句和having子句中的区别
1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数 ...
- 在oracle中where 子句和having子句中的区别
在oracle中where 子句和having子句中的区别 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用 ...
- oracle中where子句和having子句中的区别
1.where 不能放在GROUP BY 后面2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE3.WHERE 后面的条件中不能有聚集函数 ...
- SQL语句中的Having子句与where子句
一.介绍 聚合函数如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条记录上.而通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于 ...
- MySQL学习笔记(四)——分组数据group by子句和having子句
分组允许把数据分为多个逻辑组,以便对每个组进行聚集计算. 例如我们查下每个系里有多少名学生: 在使用group by 子句之前,还需要知道一些规定: 1. group by 子句可以包含任意数目的列, ...
- Mysql查询语句的 where子句、group by子句、having子句、order by子句、limit子句
Mysql的各个查询语句 一.where子句 语法:select *|字段列表 from 表名 where 表达式.where子句后面往往配合MySQL运算符一起使用(做条件判断) 作用:通过限定 ...
- ON 子句和 WHERE 子句的不同
原文: https://www.cnblogs.com/zjfjava/p/6041445.html 即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学 ...
- Mysql ON子句和USING子句
Mysql ON子句和USING子句 Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name. 当模式设计对联接表的列 ...
随机推荐
- <学习opencv>跨平台和本机windows
/*=========================================================================*/ // 跨平台和本机Windows /*=== ...
- CH7511|LT7211|PS8625替代方案 CS5211 设计EDP转LVDS优势方案原理图+PCB板设计
CH7511|LT7211|PS8625这三款都是专门用于设计EDP转LVDS转接板或者屏转换方案板,CH7511.LT7211.PS8625目前这几款都是出于缺货状态,台湾瑞奇达Capstone 新 ...
- Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装. Dapper的用法比较接近ADO.NET所以性能也是比较快.所以我们先来看看使用A ...
- 图解四种 IO 模型
最近越来越认为,在讲解技术相关问题时,大白话固然很重要,通俗易懂,让人有想读下去的欲望.但几乎所有的事,都有两面性,在看到其带来好处时,不妨想想是否也引入了不好的地方. 例如在博客中,过于大白话的语言 ...
- git -remote: Support for password authentication was removed on August 13, 2021
克隆代码时,报错: Support for password authentication was removed on August 13, 2021. Please use a personal ...
- Linux上天之路(一)之Linux前世今生
0. Linux的前世今生 linux是什么 linux是一个计算机的操作系统,与windows类似,是一款系统软件 操作系统 说到操作系统其实我们首先要思考三个问题: 1)操作系统是什么? 2)操作 ...
- 你不得不了解的Python3.x新特性
从 3.0 到 3.8,Python 3 已经更新了一波又一波,但似乎我们用起来和 2.7 没有太大区别?以前该怎么写 2.7 的代码现在就怎么写,只不过少数表达方式变了而已.在这篇文章中,作者介绍了 ...
- vue3.0+vite+ts项目搭建(报错处理)
报错一 warning package.json: No license field$ vue-tsc --noEmit && vite build 解决方案,添加这两行,只添加一个是 ...
- docker的安装以及使用命令
docker的安装 安装docker https://docs.docker.com/install/linux/docker-ce/centos/#set-up-the-repository 从 2 ...
- 在asp.net webfrom 中完成用户自定义导出
asp.net原生控件实现自定义列导出功能 自定义列实现 最近负责开发公司内部使用的人事信息化系统时,有一个需求是这样的,需要在页面中可以用户每次导出Excel时自定义需要导出哪些列,经过半天的琢磨和 ...