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






