MySQL中的where和having的區別
阿新 • • 發佈:2022-03-25
場景:
1、where和having都可以使用的場景
select user_name,user_age from users where user_age > 10
select user_name,user_age from users having user_age > 10
分析:上面的having可以用的前提已經篩選出了user_age欄位,在這種情況下和where的效果是等效的,但是如果我沒有 user_age欄位 就會報錯!因為having是從前篩選的欄位再篩選,而where是從資料表中的欄位直接進行的篩選;
2、只能用where,而不可用having的場景
selectuser_name,user_age from users where user_salary > 500 select user_name,user_age from users having user_salary > 5000 //報錯!!!因為前面並沒有篩選出user_salary 欄位
3. 只可用having,而不可where的場景
例子:查詢每種goods_category_id商品的價格平均值,獲取平均價格大於5000元的商品資訊
select goods_category_id , avg(goods_price) as ag from goods group by goods_category havingag > 1000 select goods_category_id , avg(goods_price) as ag from goods where ag>1000 group by goods_category //報錯!因為from goods 這張資料表裡面沒有ag這個欄位
注意:where 後面要跟的是資料表裡的欄位,如果我把ag換成avg(goods_price)也是錯誤的!因為表裡沒有該欄位;而having只是根據前面查詢出來的是什麼就可以後面接什麼;