MySQLのwhereとhavingの違いを正しく理解する
2581 ワード
以前学校でSQLserverデータベースを勉強したことがありますが、勉強しているのはすべて毛皮であることに気づきました.今日はMySQLのwhereとhavingの違いを正しい姿勢で話します.
誤区:havingとgroupbyを組み合わせて使用しなければならないと勘違いしないでください.
次の例で具体的に説明します.
1.whereもhavingも使えるシーン
上のhavingが使える前提はgoodsをフィルタリングしたことです.priceフィールドは、この場合whereの効果と等価ですが、select goods_がなければpriceは間違いを報告します!!havingは以前にフィルタされたフィールドからフィルタされ、whereはデータテーブルのフィールドから直接フィルタされるからです.
2.whereのみ、havingを使用できない場合
3.havingのみ、whereを使用できない場合
各goodsを検索category_id商品の価格平均値は、平均価格が1000元以上の商品情報を取得する
注意:whereの後に続くのはデータテーブルのフィールドで、agをavg(goods_price)に変えるのも間違っています!表にこのフィールドがないからです.havingは前に調べたものが何なのかだけで、後に何を受け取ることができます.
誤区:havingとgroupbyを組み合わせて使用しなければならないと勘違いしないでください.
次の例で具体的に説明します.
1.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
上のhavingが使える前提はgoodsをフィルタリングしたことです.priceフィールドは、この場合whereの効果と等価ですが、select goods_がなければpriceは間違いを報告します!!havingは以前にフィルタされたフィールドからフィルタされ、whereはデータテーブルのフィールドから直接フィルタされるからです.
2.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 // !!! goods_price
3.havingのみ、whereを使用できない場合
各goodsを検索category_id商品の価格平均値は、平均価格が1000元以上の商品情報を取得する
select goods_category_id , avg(goods_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 // !! from sw_goods ag
注意:whereの後に続くのはデータテーブルのフィールドで、agをavg(goods_price)に変えるのも間違っています!表にこのフィールドがないからです.havingは前に調べたものが何なのかだけで、後に何を受け取ることができます.