where 子句過(guò)濾行,應(yīng)用于分組前;having 子句過(guò)濾組,應(yīng)用于分組后且可使用組聚合函數(shù)的結(jié)果。
WHERE 與 HAVING 子句的區(qū)別
在 MySQL 中,WHERE 和 HAVING 子句都用于過(guò)濾數(shù)據(jù)集,但它們?cè)谧饔梅秶褪褂梅绞缴洗嬖谥饕町悺?/p>
WHERE 子句
作用在 SELECT 語(yǔ)句的 FROM 子句中。
用于過(guò)濾行,只能基于表中的列。
在對(duì)行進(jìn)行分組之前應(yīng)用。
HAVING 子句
作用在 SELECT 語(yǔ)句的 GROUP BY 子句之后。
用于過(guò)濾組,可以基于組聚合函數(shù)的結(jié)果。
在對(duì)行進(jìn)行分組之后應(yīng)用。
使用示例
WHERE 子句:
<code class="sql">SELECT * FROM customers WHERE age > 30;</code>
登錄后復(fù)制
此查詢從 customers 表中選擇所有年齡大于 30 的客戶。
HAVING 子句:
<code class="sql">SELECT city, COUNT(*) AS customer_count FROM customers GROUP BY city HAVING customer_count > 100;</code>
登錄后復(fù)制
此查詢從 customers 表中選擇所有客戶數(shù)量超過(guò) 100 個(gè)的城市。
總結(jié)
WHERE 子句用于過(guò)濾行,在分組之前應(yīng)用。
HAVING 子句用于過(guò)濾組,在分組之后應(yīng)用,并且可以使用組聚合函數(shù)的結(jié)果。