本質的區別就是where篩選的是數據庫表里面本來就有的字段,而having篩選的字段是從前篩選的字段篩選的。
where和having都可以使用的場景:
select goods_price,goods_name from sw_goods where goods_price>100
select goods_price,goods_name from sw_goods having goods_price>100
原因:goods_price作為條件也出現在了查詢字段中。
只可以使用where,不可以使用having的情況:
select goods_name,goods_number from sw_goods where goods_price>100
select goods_name,goods_number from sw_goods having goods_price>100(X)
原因:goods_price作為篩選條件沒有出現在查詢字段中,所以就會報錯。
having的原理是先select 然后從select出來的進行篩選。而where是先篩選在select。
只可以使用having,不可以使用where的情況:
select goods_category_id,avg(good_price) as ag from sw_goods group by goods_category having ag>1000
select goods_category_id,avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category(X)報錯,這個表里沒有這個ag這個字段。
where子句中一般不使用聚合函數那種情況。