MySQL中having和where的区别及应用详解

这篇文章主要给大家详细介绍了MySQL中having和where的区别以及他们的使用方法,文中有相关的代码示例,具有一定的参考价值,需要的朋友可以参考下

目录

having 和 where 区别

  • having是对一个表的数据进行分组之后,对组信息进行相应条件筛选
  • having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定
  • having子句与where子句一样,都是用于条件判断
  • where是判断数据从磁盘读入内存的时候
  • having是判断分组统计之前的所有条件
  • having子句中可以使用字段别名,而where不能使用
  • having能够使用统计函数,而where不能使用

having 和 where 应用

在 MySQL 中,HAVINGWHERE 是用于筛选数据的两个关键字,它们有以下区别和用法:

用途:

  • WHEREWHERE 子句用于在执行查询之前筛选行。它可用于过滤 SELECTUPDATEDELETE 语句中的行,根据指定的条件选择要操作的数据行。
  • HAVINGHAVING 子句用于在执行聚合查询后筛选结果集。它仅能在包含聚合函数(如 SUMCOUNTAVG 等)的 SELECT 语句中使用,并在查询结果进行聚合操作后,对聚合结果进行筛选。

位置:

  • WHEREWHERE 子句通常出现在 SELECTUPDATEDELETE 语句的 FROM 子句之后、GROUP BY 子句之前。
  • HAVINGHAVING 子句通常出现在 GROUP BY 子句之后、ORDER BY 子句之前。

过滤条件:

  • WHEREWHERE 子句用于指定过滤条件,其中可以使用比较操作符(如 =, <>, <, >, BETWEEN, IN 等)和逻辑操作符(如 AND, OR, NOT)。
  • HAVINGHAVING 子句用于指定对聚合结果的过滤条件,其中可以使用比较操作符和逻辑操作符,也可以使用聚合函数。

示例: 假设有一个名为 orders 的表,其中包含 customer_id(客户ID)和 total_price(总价格)字段。我们希望查找每个客户的总价格大于 100 的订单。

使用 WHERE 子句的示例:

|-----------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | sqlCopy code SELECT customer_id, ``SUM``(total_price) ``AS total FROM orders GROUP BY customer_id HAVING total > 100; |

使用 HAVING 子句的示例:

|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | sqlCopy code SELECT customer_id, ``SUM``(total_price) ``AS total FROM orders GROUP BY customer_id HAVING SUM``(total_price) > 100; |

在上述示例中,WHERE 子句无法直接使用聚合函数,因此我们使用 GROUP BY 子句将结果按客户ID分组,并在 HAVING 子句中筛选出总价格大于 100 的订单。

总结:

  • WHERE 子句用于在执行查询之前筛选行,而 HAVING 子句用于在执行聚合查询后筛选结果集。
  • WHERE 出现在 FROM 子句之后,GROUP BY 子句之前;而 HAVING 出现在 GROUP BY 子句之后、ORDER BY 子句之前。
  • WHERE 可以使用比较操作符和逻辑操作符来指定过滤条件,而 HAVING 不仅可以使用比较操作符和逻辑操作符,还可以使用聚合函数。
相关推荐
Quincy_Freak7 小时前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
至乐活着8 小时前
MySQL索引底层原理与查询优化实战:从B+树到执行计划
mysql·b+树·查询优化·sql性能·索引原理
2601_962683899 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
酱学编程10 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
shushangyun_11 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
华山令狐虫12 小时前
DBAPI AI 写 SQL:支持动态 SQL 与参数占位符,自然语言一键生成
数据库·人工智能·sql·dbapi
IvorySQL12 小时前
PG 技术日报|2026-07-04
数据库·人工智能·postgresql·开源
Hoxy.R13 小时前
KingbaseES读写分离高可用集群扩容、备库重建与故障切换实战
运维·数据库
IvorySQL13 小时前
IvorySQL HTAP 实时湖仓接入引擎
数据库·postgresql·开源·htap·ivorysql
忧郁的紫菜13 小时前
WCF+JSON+实体对象与WebService+DataSet效率大比拼
数据库·oracle·json