where 子句過濾行級別數(shù)據(jù),而 having 子句過濾組級別數(shù)據(jù)。where 子句在 from 關(guān)鍵字后應(yīng)用,而 having 子句在 group by 關(guān)鍵字后應(yīng)用。
MySQL 中 WHERE 和 HAVING 子句的關(guān)系
WHERE 和 HAVING 是用于過濾 MySQL 數(shù)據(jù)集的兩個(gè)子句。它們的區(qū)別在于 WHERE 子句用于過濾行,而 HAVING 子句用于過濾組。
WHERE 子句
WHERE 子句寫在 FROM 關(guān)鍵字之后,用于根據(jù)給定條件過濾行。它只考慮每個(gè)行的值,不考慮組中的其他行。WHERE 子句可以用來過濾不滿足條件的行。
HAVING 子句
HAVING 子句寫在 GROUP BY 關(guān)鍵字之后,用于根據(jù)組中的數(shù)據(jù)過濾組。它考慮組中的匯總值,并根據(jù)這些值過濾組。HAVING 子句可以用來過濾不滿足條件的組。
關(guān)系
WHERE 和 HAVING 子句主要用于解決不同的問題:
WHERE 子句用于過濾行級別的數(shù)據(jù)。
HAVING 子句用于過濾組級別的數(shù)據(jù)。
示例
下面的示例顯示了 WHERE 和 HAVING 子句之間的區(qū)別:
<code class="sql">SELECT * FROM sales WHERE product_id = 1; -- WHERE 過濾行</code>
登錄后復(fù)制
此查詢將返回產(chǎn)品 ID 為 1 的所有銷售記錄。
<code class="sql">SELECT product_id, SUM(quantity) AS total_quantity FROM sales GROUP BY product_id HAVING total_quantity > 100; -- HAVING 過濾組</code>
登錄后復(fù)制
此查詢將返回產(chǎn)品 ID 及其銷售總數(shù)大于 100 的所有產(chǎn)品組。
理解 WHERE 和 HAVING 子句之間的差異很重要,以便在 MySQL 查詢中有效地過濾數(shù)據(jù)。