區別1
where是從數據表中的字段直接進行的篩選的。
having是從 前面篩選的字段再篩選
eg: select goods_price,goods_name from goods having goods_price > 100
等價於
select goods_price,goods_name from goods where goods_price > 100
select goods_name,goods_number from goods having goods_price > 100
// 報錯!!!因爲前面並沒有篩選出 goods_price 字段
區別2
having子句中可以使用字段別名,而where不能使用
區別3
having能夠使用統計函數,先分組,再判斷(having),但是where不能使用
用的地方不一樣
where可以用於select、update、delete和insert into values(select * from table where ..)語句中。
having只能用於select語句中
執行的順序不一樣
where的搜索條件是在執行語句進行分組之前應用
having的搜索條件是在分組條件後執行的
即如果where和having一起用時,where會先執行,having後執行
子句有區別
where子句中的條件表達式having都可以跟,而having子句中的有些表達式where不可以跟;having子句可以用集合函數(sum、count、avg、max和min),而where子句不可以。
總結
1.WHERE 子句用來篩選 FROM 子句中指定的操作所產生的行。
2.GROUP BY 子句用來分組 WHERE 子句的輸出。
3.HAVING 子句用來從分組的結果中篩選行