where 子句過濾行,應用于分組前;having 子句過濾組,應用于分組后且可使用組聚合函數的結果。
WHERE 與 HAVING 子句的區別
在 MySQL 中,WHERE 和 HAVING 子句都用于過濾數據集,但它們在作用范圍和使用方式上存在主要差異。
WHERE 子句
作用在 SELECT 語句的 FROM 子句中。
用于過濾行,只能基于表中的列。
在對行進行分組之前應用。
HAVING 子句
作用在 SELECT 語句的 GROUP BY 子句之后。
用于過濾組,可以基于組聚合函數的結果。
在對行進行分組之后應用。
使用示例
WHERE 子句:
<code class="sql">SELECT * FROM customers WHERE age > 30;</code>
登錄后復制
此查詢從 customers 表中選擇所有年齡大于 30 的客戶。
HAVING 子句:
<code class="sql">SELECT city, COUNT(*) AS customer_count FROM customers GROUP BY city HAVING customer_count > 100;</code>
登錄后復制
此查詢從 customers 表中選擇所有客戶數量超過 100 個的城市。
總結
WHERE 子句用于過濾行,在分組之前應用。
HAVING 子句用于過濾組,在分組之后應用,并且可以使用組聚合函數的結果。