首页 > 数据库 > mysql教程 > SQL 中的 WHERE 与 HAVING:何时使用每个子句?

SQL 中的 WHERE 与 HAVING:何时使用每个子句?

Patricia Arquette
发布: 2025-01-14 17:26:44
原创
640 人浏览过

WHERE vs. HAVING in SQL: When to Use Each Clause?

SQL 中 HAVING 和 WHERE 子句的差异详解

在 SQL 中,HAVINGWHERE 关键字用于过滤数据,但作用不同。两者都用于条件选择,但其应用取决于 GROUP BY 子句的存在与否。

WHERE 子句

WHERE 子句在聚合操作之前执行,根据各个行的值选择特定行。例如,以下查询检索年龄大于 20 的所有学生姓名:

<code class="language-sql">SELECT Name
FROM Students
WHERE Age > 20;</code>
登录后复制

HAVING 子句

相反,HAVING 子句在应用聚合函数之后执行。它根据聚合值过滤行组,这在需要检查聚合结果的场景中非常有用。

例如,以下查询检索每个城市的平均学生年龄,然后过滤结果以仅显示平均年龄大于 25 的城市:

<code class="language-sql">SELECT City, AVG(Age) AS AvgAge
FROM Students
GROUP BY City
HAVING AvgAge > 25;</code>
登录后复制

关键区别

HAVINGWHERE 的根本区别在于它们的执行时间。WHERE 在聚合之前过滤行,而 HAVING 在聚合之后过滤组。这意味着 HAVING 用于检查聚合值的条件,而 WHERE 用于检查单个行值的条件。

示例

考虑以下包含示例数据的表:

City Age
Boston 22
Boston 25
New York 28
New York 30
Los Angeles 23
Los Angeles 29

使用 WHERE 的查询:

<code class="language-sql">SELECT City, COUNT(*) AS Count
FROM Students
WHERE Age > 25;</code>
登录后复制

输出:

City Count
New York 2

使用 HAVING 的查询:

<code class="language-sql">SELECT City, COUNT(*) AS Count
FROM Students
GROUP BY City
HAVING COUNT(*) > 1;</code>
登录后复制

输出:

City Count
Boston 2
New York 2

在此示例中,WHERE 子句检索年龄大于 25 的学生人数,而 HAVING 子句检索每个城市中学生人数超过 1 的城市。

以上是SQL 中的 WHERE 与 HAVING:何时使用每个子句?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板