1. 程式人生 > 其它 >MySQL中的where和having的區別

MySQL中的where和having的區別

場景:

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的場景

select
user_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 having
ag > 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只是根據前面查詢出來的是什麼就可以後面接什麼;