以前在学校里学习过SQL Server数据库,发现学习的都是皮毛,今天以正确的姿态谈一下 MySQL 中 where 和 having 的区别。
误区:不要错误的认为 having 和 group by 必须配合使用。
一、where 和 having 都可以使用的场景
selectgoods_price,goods_namefromsw_goodswheregoods_price>100selectgoods_price,goods_namefromsw_goodshavinggoods_price>100
解释:上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情况下和where的效果是等效的,但是如果我没有select goods_price 就会报错!因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。
二、只可以用 where,不可以用 having 的情况
selectgoods_name,goods_numberfromsw_goodswheregoods_price>100selectgoods_name,goods_numberfromsw_goodshavinggoods_price>100//报错!因为前面并没有筛选出goods_p
三、只可以用 having,不可以用 where 情况
查询每种goods_category_id商品的价格平均值,获取平均价格大于1000元的商品信息
selectgoods_category_id , avg(goods_price) asagfromsw_goodsgroupbygoods_categoryhavingag>1000selectgoods_category_id , avg(goods_price) asagfromsw_goodswhereag>1000groupbygoods_category//报错!因为from sw_goods 这张数据表里面没有ag这个字段
注意:where 后面要跟的是数据表里的字段,如果我把ag换成avg(goods_price)也是错误的!因为表里没有该字段。而 having 只是根据前面查询出来的是什么就可以后面接什么。