下面以一個例子來具體的講解:spa
1. where和having均可以使用的場景class
1)select addtime,name from dw_users where addtime> 1500000000select
2)select addtime,name from dw_users having addtime> 1500000000im
解釋:上面的having能夠用的前提是我已經篩選出了addtime字段,在這種狀況下和where的效果是等效的,可是若是我沒有select addtime就會報錯!!由於having是從前面篩選的字段再篩選,而where是從數據表中的字段直接進行的篩選的。數據
2. 只能夠用where,不能夠用having的狀況查詢
1) select addtime,name from dw_users where addtime> 1500000000vi
2) select phone,name from dw_users having addtime> 1500000000 //報錯!!!由於前面並無篩選出addtime字段time
3. 只能夠用having,不能夠用where狀況錯誤
查詢每種category_id商品的價格平均值,獲取平均價格大於100元的商品信息
1)select category_id , avg(price) as ag from dw_goods group by goods_category having ag > 100
2)select category_id , avg(price) as ag from dw_goods where ag>100 group by goods_category //報錯!!由於from dw_goods 這張數據表裏面沒有ag這個字段
注意:where 後面要跟的是數據表裏的字段,若是我把ag換成avg(price)也是錯誤的!由於表裏沒有該字段。而having只是根據前面查詢出來的是什麼就能夠後面接什麼。