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