SQL 中 HAVING 與 WHERE 子句的差異詳解
在 SQL 中,HAVING
和 WHERE
關鍵字用於過濾數據,但作用不同。兩者都用於條件選擇,但其應用取決於 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>
關鍵區別
HAVING
和 WHERE
的根本區別在於它們的執行時間。 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中文網其他相關文章!