WHERE 和 HAVING 子句在 SQL 中均用于过滤数据,但作用范围不同:WHERE 子句过滤单行,HAVING 子句过滤分组后的结果集。WHERE 子句在分组前应用,影响聚合函数的结果行;HAVING 子句在分组后应用,影响分组行而不是单个行。WHERE 子句可以过滤任何列,而 HAVING 子句只能过滤聚合函数的结果。

WHERE 和 HAVING 子句的区别
在 SQL 查询中,WHERE 和 HAVING 子句用于过滤数据行,但它们有不同的作用范围和用途。
WHERE 子句
- 应用于表的单个行上。
- 用于过滤出满足指定条件的行。
- 在数据分组之前应用。
- 影响聚合函数的结果行。
HAVING 子句
- 应用于分组后的结果集上。
- 用于过滤出满足指定条件的分组。
- 在数据分组之后应用。
- 影响分组行而不是单个行。
对比表
DM建站系统汽车保养维修HTML5网站模板,DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务器
| 特征 | WHERE 子句 | HAVING 子句 |
|---|---|---|
| 作用范围 | 单行 | 分组 |
| 应用时机 | 分组前 | 分组后 |
| 影响 | 聚合函数结果行 | 分组行 |
示例
以下查询使用 WHERE 子句过滤出销售额超过 1000 的订单:
SELECT * FROM orders WHERE sales_amount > 1000;
以下查询使用 HAVING 子句过滤出平均销售额超过 1000 的所有客户:
SELECT customer_id, AVG(sales_amount) AS avg_sales FROM orders GROUP BY customer_id HAVING avg_sales > 1000;
注意事项
- WHERE 子句可以过滤任何列,而 HAVING 子句只能过滤聚合函数的结果。
- HAVING 子句通常与 GROUP BY 子句一起使用,而 WHERE 子句可以独立使用。









