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. 当模式设计对联接表的列 ...
随机推荐
- 以简御繁介绍IOC
1.IOC的理论背景 大家开发理念,一直都是奔着架构稳定.低耦合性.而IOC初衷,就是为了解决模块依赖问题,理解<六大设计原则(SOLID)> 如图所示,在我们开发中,业务的实现,就是靠着 ...
- CS5213高性价比替代AG6200芯片|兼容台湾AG6200芯片|CS5213Capstone
CS5213是一款HDMI转VGA带音频信号转出的芯片方案,CS5213支持HDCP协议,且外围电路比台湾安格AG6200要少,且本身CS5213芯片成本比AG6200要低,整个方案设计简单性价比较高 ...
- 浅谈JVM内存分配与垃圾回收
大家好,我是微尘,最近又去翻了周志明老师的<深入理解Java虚拟机>这本书.已经看了很多遍了,每次都感觉似乎看懂了,但没过多久就忘了.这次翻了第三章的垃圾收集器与内存分配策略,感觉有了新的 ...
- 搞一下vue生态,从vuex开始
Vuex vuex 是专门帮助vue管理的一个js库,利用了vue.js中细粒度数据响应机制来进行高效的状态更新. vuex核心就是store,store就是个仓库,这里采用了单一的store状态树, ...
- Java EE数据持久化框架 • 【第4章 MyBatis动态SQL】
全部章节 >>>> 本章目录 4.1 MyBatis动态标签 4.1.1 MyBatis动态标签介绍 4.1.2 < if >标签 4.1.3 update语 ...
- Android开发 ListView(垂直滚动列表项视图)的简单使用
效果图: 使用方法: 1.在布局文件中加入ListView控件: <?xml version="1.0" encoding="utf-8"?> &l ...
- 你还不了解SpringSecurity吗?快来看看SpringSecurity实战总结~
SpringSecurity简介: 权限管理中的相关概念 主体 principal: 使用系统的用户或设备或从其他系统远程登录的用户等等,简单说就是谁使用系统谁就是主体. 认证 authentic ...
- Arrays.sort实现原理
Collections.sort方法底层就是调用的array.sort方法 比较器的方式 TimSort static void sort(Object[] a, int lo, int hi, Ob ...
- Shell 中的 expect 命令
目录 expect 介绍 expect 安装 expect 语法 自动拷贝文件到远程主机 示例一 示例二 示例三 示例四 expect 介绍 借助 expect 处理交互的命令,可以将交互过程如 ss ...
- java 方法 compareTo()的正确使用
总结:(1)如果比较的是数字 则结果大于则为1 等于则为0 小于则为-1(2)如果比较的是字符[串] 则按照从左到右排序找对应不一样的字符第一个字符, 然后将字符装对应的ASCLL码数字,做减法运算, ...