where 子句在 select 語句中篩選行,根據行條件過濾基礎數據。having 子句在 group by 語句中篩選組,根據組的聚合結果過濾組。主要區別:where 處理單個行,評估行的條件;having 處理組,評估組的聚合結果;where 影響哪些行包含在結果中,having 影響哪些組包含在結果中。
WHERE 和 HAVING 子句在 SQL 中的用法
WHERE 和 HAVING 子句在 SQL 中用于過濾數據集,但它們在處理上下文和目標方面有所不同:
WHERE 子句:
WHERE 子句用于在 SELECT 語句的 FROM 之后篩選行。
它根據每個行的條件對基礎表或視圖中的行進行評估。
它用于過濾基礎數據,從而影響哪些行被包括在最終結果中。
示例:
<code class="sql">SELECT * FROM employees WHERE salary > 50000;</code>
登錄后復制
此查詢返回所有工資大于 50,000 美元的員工。
HAVING 子句:
HAVING 子句用于在 GROUP BY 語句中篩選組。
它根據組的聚合結果對組進行評估。
它用于過濾組,從而影響哪些組被包括在最終結果中。
示例:
<code class="sql">SELECT department, SUM(salary) AS total_salary FROM employees GROUP BY department HAVING total_salary > 100000;</code>
登錄后復制
此查詢返回所有部門的總工資,其中總工資大于 100,000 美元。
主要區別:
處理上下文:WHERE 子句處理單個行,而 HAVING 子句處理組。
評估目標:WHERE 子句評估單個行的條件,而 HAVING 子句評估組的聚合結果。
結果影響:WHERE 子句影響哪些行被包括在結果中,而 HAVING 子句影響哪些組被包括在結果中。