首頁 > 資料庫 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板