MySQLのwhereとhavingの違いを正しく理解する

2581 ワード

以前学校でSQLserverデータベースを勉強したことがありますが、勉強しているのはすべて毛皮であることに気づきました.今日はMySQLのwhereと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は前に調べたものが何なのかだけで、後に何を受け取ることができます.