感谢大佬: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子句区别的更多相关文章

  1. where 子句和having子句中的区别

    1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数 ...

  2. oracle中where 子句和having子句中的区别

    1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数 ...

  3. 在oracle中where 子句和having子句中的区别

    在oracle中where 子句和having子句中的区别 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用 ...

  4. oracle中where子句和having子句中的区别

    1.where  不能放在GROUP BY 后面2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE3.WHERE  后面的条件中不能有聚集函数 ...

  5. SQL语句中的Having子句与where子句

    一.介绍 聚合函数如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条记录上.而通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于 ...

  6. MySQL学习笔记(四)——分组数据group by子句和having子句

    分组允许把数据分为多个逻辑组,以便对每个组进行聚集计算. 例如我们查下每个系里有多少名学生: 在使用group by 子句之前,还需要知道一些规定: 1. group by 子句可以包含任意数目的列, ...

  7. Mysql查询语句的 where子句、group by子句、having子句、order by子句、limit子句

    Mysql的各个查询语句 一.where子句   语法:select *|字段列表 from 表名 where 表达式.where子句后面往往配合MySQL运算符一起使用(做条件判断) 作用:通过限定 ...

  8. ON 子句和 WHERE 子句的不同

    原文: https://www.cnblogs.com/zjfjava/p/6041445.html 即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学 ...

  9. Mysql ON子句和USING子句

    Mysql ON子句和USING子句   Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name. 当模式设计对联接表的列 ...

随机推荐

  1. 『动善时』JMeter基础 — 61、使用JMeter监控服务器

    目录 1.监控插件安装 2.启动监控服务 3.使用JMeter监控服务器 (1)测试计划内包含的元件 (2)HTTP请求界面内容 (3)配置jp@gc-PerfMon Metrics Collecto ...

  2. CS5211替代CH7511B|设计DP转LVDS转接板|替代CH7511B

    CH7511B是一款DP转lvds屏转换芯片CH7511B是一款eDP转LVDS转换芯片.CH7511B将嵌入式DisplayPort信号转换为LVDS(低压差分信号).通过CH7511B的高级解码/ ...

  3. CS5210|低成本HDMI转VGA方案|CS5210参数说明

    Capstone最新推出的一款HDMI转VGA音视频转接线或者转换器方案芯片CS5210. 其设计的优势在于内置晶振,外围电路器件较少设计简单,芯片封装集成度较高,方案BOM成本低,相比其他方案产品更 ...

  4. partial write bypass PIE

    第一篇博客,请允许我水一下.BUUCTF上的一题:linkctf_2018.7_babypie 检查一下保护机制: 1 Arch: amd64-64-little 2 RELRO: Partial R ...

  5. 【Linux】Linux安装JDK

    1.下载linux版本的JDK1.8 链接:JDK下载链接 提取码:fxn4 链接:Xshell下载链接 提取码:439l 2.使用Xshell连接虚拟机,上传文件 在 /usr目录下创建一个新文件夹 ...

  6. Ubuntu16.04下,rabbimq集群搭建

    rabbitmq作为企业级的消息队列,功能很齐全,既可以作为单一的部署模式,又可以做集群的部署模式 单一部署就不说了,就是在一台服务器上部署rabbitmq消息队列,可以参考我的博客:Ubuntu16 ...

  7. 简单谈谈 TCP/IP

    1.前言 IP 或 ICMP.TCP 或 UDP.TELNET 或 FTP.以及 HTTP 等都属于 TCP/IP 协议. 他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分.TCP/I ...

  8. BeanUtils.copyProperties 选择性赋值字段

    BeanUtils.copyProperties 在字段赋值上有强大的功能,如果有两个的类,如果需要将相同的字段赋值,就可以直接赋制.而不需要每个字段都需要一个一个赋制. BeanUtils.copy ...

  9. JVM完整详解:内存分配+运行原理+回收算法+GC参数等

    不管是BAT面试,还是工作实践中的JVM调优以及参数设置,或者内存溢出检测等,都需要涉及到Java虚拟机的内存模型.内存分配,以及回收算法机制等,这些都是必考.必会技能. JVM内存模型 JVM内存模 ...

  10. ctfshow web2 web3

    ctfshow web2 1.手动注入题.先用万能密码admin' or 1=1%23,有回显 2.union select注入,2处有回显 3.依次查找数据库.表.字段 得到flag ctfshow ...