本文來源:https://www.cnblogs.com/ljf-Sky/p/9024683.html
本質(zhì)的區(qū)別就是where篩選的是數(shù)據(jù)庫表里面本來就有的字段,而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作為條件也出現(xiàn)在了查詢字段中。
只可以使用where,不可以使用having的情況:
select goods_name,goods_number from sw_goods where goods_price>100
select goods_name,goods_number from sw_goods where goods_price>100(X)
原因:goods_price作為篩選條件沒有出現(xiàn)在查詢字段中,所以就會(huì)報(bào)錯(cuò)。
having的原理是先select 然后從select出來的進(jìn)行篩選。而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)報(bào)錯(cuò),這個(gè)表里沒有這個(gè)ag這個(gè)字段。
where子句中一般不使用聚合函數(shù)那種情況。