SQL教程
  • SQL 是什么
  • SQL 语法
  • SQL 数据类型
  • SQL 运算符
  • SQL 创建数据库
  • SQL 删除数据库
  • SQL 重命名数据库
  • SQL 选择数据库
  • SQL 表Table
  • SQL 创建表
  • SQL 删除表
  • SQL 重命名表
  • SQL Truncate表
  • SQL 复制表
  • SQL 临时表
  • SQL 修改表结构
  • SQL Select语句
  • SQL Select Unique
  • SQL Select Distinct
  • SQL Select Count
  • SQL Select Top
  • SQL Select First
  • SQL Select Last
  • SQL Select Random
  • SQL Select In
  • SQL Select 多表查询
  • SQL Select Date
  • SQL Select Sum
  • SQL Select Null
  • SQL Where
  • SQL And
  • SQL Or
  • SQL With
  • SQL As
  • SQL Having
  • SQL Order By
  • SQL Order By Asc
  • SQL Order By Desc
  • SQL Order By Random
  • SQL Order By Limit
  • SQL Order By 多字段排序
  • SQL Insert语句
  • SQL Insert多行记录
  • SQL Update语句
  • SQL Update Join 更新连接
  • SQL 更新日期时间
  • SQL Delete语句
  • SQL 删除一条记录
  • SQL 删除所有记录
  • SQL 删除重复记录
  • SQL 删除视图
  • SQL DELETE JOIN 删除连接
  • SQL Join 连接
  • SQL Outer Join 外连接
  • SQL Left Join 左连接
  • SQL Right Join 右连接
  • SQL Full Join 全连接
  • SQL Cross Join 交叉连接
  • SQL Primary Key 主键
  • SQL Foreign Key 外键
  • SQL Composite Key 复合键
  • SQL Unique Key 唯一键
  • SQL Alternate Key 备用键
  • SQL 注入问题
  • SQL INTERSECT 相交
  • SQL 存储过程
  • GROUP BY 与 ORDER BY区别
  • WHERE 和 HAVING区别
  • SQL 与 NoSQL区别
  • IN 与 EXISTS区别
  • SQL 中的 Where条件
  • 什么是 Web SQL
  • SQL 提交 和 回滚
  • SQL 修改列
  • SQL Comment注释
  • SQL Formatter格式化
  • SQL Group By语句
  • 如何在 SQL 中使用 ANY
  • 如何在 SQL 中使用 CHECK
  • 如何在 SQL 中使用 DEFAULT
  • 如何在 SQL 中使用 NOT NULL
  • 如何在 SQL 中使用 BETWEEN
  • 如何在 SQL 中使用 UNION
  • 如何在 SQL 中使用 IN
  • 如何在 SQL 中使用 HAVING
  • 如何在 SQL 中使用 ALL
  • SQL 常见函数和运算符

WHERE 和 HAVING区别

本文深入讨论了 WHERE 和 HAVING 子句。它们还用于过滤 SQL 查询中的记录。WHERE 和 HAVING 子句之间的区别是面试期间最常见的问题。它们之间的主要区别在于,WHERE 子句用于在进行任何分组之前指定过滤记录的条件,而 HAVING 子句用于指定从组中过滤值的条件。在进行比较之前,我们首先要了解这些 SQL子句。

一、Where 语句

MySQL 中的 WHERE 子句与 SELECT、 INSERT、 UPDATE和 DELETE

查询一起使用,以过滤表或关系中的数据。 它描述了使用JOIN 子句从单个表或多个表中检索记录时的特定条件。如果满足指定条件,则从表中返回特定值。 WHERE 子句将条件放在选定的列上。

MySQL 中的 WHERE 子句还可以实现逻辑连接词  AND、 OR和 NOT 。它们被称为布尔条件,必须为真才能检索数据。逻辑连接表达式使用比较运算符作为其操作数,如 <、<=、>、>=、= 和 <>。比较运算符通常用于比较字符串和算术表达式。

Where语法

SELECT column_lists,     
FROM table_name  
WHERE conditions  
GROUP BY column_lists;  

让我们举个例子来理解这个语句。假设我们有一个名为employees的表,其中包含以下数据:

如果我们想获取工作时间大于 9 的员工明细,那么我们可以使用如下语句:

mysql> SELECT * FROM employees  
WHERE working_hour > 9;  

我们将获得以下输出,我们可以在其中看到工作时间大于 9 的员工详细信息:

如果我们将上述查询与GROUP BY子句一起使用,我们会得到不同的结果:

mysql> SELECT * FROM employees  
WHERE working_hour > 9  
GROUP BY name;  

输出结果为:

二、Having 语句

MySQL中的 HAVING 子句与 GROUP BY 语句结合使用,使我们能够指定过滤哪些组结果出现在结果中的条件。它仅返回满足特定条件的最终结果中的组中的那些值。我们还可以在选择过程中同时使用 WHERE 和 HAVING 子句。在这种情况下,WHERE 子句首先过滤单个行,然后对行进行分组,执行聚合计算,最后是 HAVING 子句过滤组。

此语句将条件放在由 GROUP BY 子句创建的组上。当 SQL 语句不使用 GROUP BY 关键字时,它的行为类似于 WHERE 子句。我们可以使用 SUM等聚合(分组)函数、MIN、MAX、AVG和 COUNT

只有两个子句:SELECT 和 HAVING。

Having语法

SELECT column_lists,     
aggregate_function (expression)    
FROM table_name  
WHERE conditions  
GROUP BY column_lists    
HAVING condition;  

让我们举个例子来理解这个语句。这里我们考虑使用同一张表的员工进行演示。

如果我们想得到每个工作时间大于 6 小时的员工的总工作时间,那么我们可以使用如下语句:

mysql> SELECT name, SUM(working_hour) AS "Total working hours"    
FROM employees    
GROUP BY name    
HAVING SUM(working_hour) > 6;    

我们将获得以下输出,我们可以在其中看到每个员工的总工作时间:

三、WHERE 和 HAVING 语句的主要区别

以下几点解释了WHERE 和 HAVING之间的主要区别:

  • WHERE 子句过滤单个行,而 HAVING 子句过滤组而不是一次过滤一行。
  • 我们不能将 WHERE 子句与聚合函数一起使用,因为它适用于过滤单个行。相反,HAVING 可以与聚合函数一起使用,因为它用于过滤组。
  • 行操作由 WHERE 子句处理,而 HAVING 子句处理对汇总行或组的列操作。
  • WHERE 位于 GROUP BY 之前,这意味着 WHERE 子句在执行聚合计算之前过滤行。HAVING 出现在 GROUP BY 之后,这意味着 HAVING 子句在执行聚合计算后过滤行。因此,HAVING 在效率方面比 WHERE 慢,应尽可能避免使用。
  • 我们可以在 SELECT 查询中将 WHERE 和 HAVING 子句组合在一起。在这种情况下,首先使用 WHERE 子句过滤各个行。然后对行进行分组,执行聚合计算,最后使用 HAVING 子句过滤组。
  • WHERE 子句根据指定条件检索所需数据。另一方面,HAVING 子句首先获取整个数据,然后根据指定的条件进行分离。
  • 如果没有 SELECT 语句,我们就不能使用 HAVING 子句。相反,我们可以将 WHERE 与 SELECT、UPDATE 和 DELETE 语句一起使用。
  • WHERE 子句是前置过滤器,而 HAVING 子句是后置过滤器。

四、WHERE 和 HAVING 比较表 

以下比较图表快速解释了它们的主要区别:

比较维度 WHERE  HAVING
定义 WHERE 用于对各个行执行过滤。 HAVING用于对组执行过滤。
原理 WHERE 在行操作中实现。 HAVING在列操作中实现。
数据获取 WHERE 子句根据指定条件从特定行中获取特定数据 HAVING 子句首先获取完整的数据。然后根据给定的条件将它们分开。
聚合函数 WHERE 子句不允许使用聚合函数。 HAVING 子句可以与聚合函数一起使用。
场景 WHERE 子句充当预过滤器。 HAVING 子句充当后过滤器。
使用规则 我们可以将 WHERE 子句与 SELECT、UPDATE 和 DELETE 语句一起使用。 HAVING 子句只能与 SELECT 语句一起使用。
Group By结合 GROUP BY 子句位于 WHERE 子句之后。 GROUP BY 子句位于 HAVING 子句之前。

五、结论

在本文中,我们对 WHERE 和 HAVING 语句进行了比较。在这里,我们得出结论,这两个子句在过滤数据方面的工作方式相同,除了一些附加功能使 HAVING 子句更受欢迎。我们可以在 HAVING 子句中有效地使用聚合函数,而 WHERE 不允许使用聚合函数。 

热门文章

优秀文章


  • AJAX Java
  • SQL Update语句
  • MySQL 获取今天的日期
  • SQL INSTR 函数
  • MySQL 查看表结构
  • MySQL 导出和导入数据库
  • .gitignore忽略文件
  • MySQL 删除数据库
  • Java StrictMath exp()方法
  • 实战-Swing实现简单爬虫
  • Java JTabbedPane
  • JavaFX GaussianBlur类
  • MongoDB NoSQL数据库
  • Java12 Switch表达式
  • Java DataInputStream readUTF()方法
  • java.time.OffsetDateTime atZoneSameInstant()方法
全部教程
  • Java技术
  • HTML/CSS
  • 浏览器脚本
  • 数据库
  • 开发工具
  • XML

玻璃钢生产厂家杭州商场美陈市场宜春玻璃钢抽象雕塑商场美陈收费标准丽江市玻璃钢雕塑设计怎么样广州动物造型玻璃钢卡通熊猫雕塑和田玻璃钢雕塑造型郑州玻璃钢雕塑制造厂革命主题玻璃钢人物雕塑火焰雕塑玻璃钢吉安玻璃钢雕塑哪家便宜玻璃钢雕塑定做加工邯郸玻璃钢人物雕塑制作环氧树脂玻璃钢雕塑寿命平顺玻璃钢花盆花器玻璃钢仿铜领袖雕塑价格浙江季节性商场美陈广东玻璃钢卡通雕塑熊出没户外玻璃钢雕塑施工萍乡玻璃钢雕塑市场元旦商场美陈方案上海商场美陈供应辽宁玻璃钢动物雕塑定制福建玻璃钢雕塑工作原理赤峰玻璃钢花盆伊犁校园玻璃钢雕塑定制阜阳商场美陈特装玻璃钢雕塑 彩色锻鞍山玻璃钢雕塑制作厂家马鞍山水果玻璃钢雕塑设计文登玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化