SQLの記述順と論理的な処理順は異なります。FROMで取得し、絞込み、グループ化、計算、整列を行います。
SQLの論理的処理順序シミュレータ
1. 条件を変更
2. 処理を1段階ずつ進める
上の2行は記述順と処理順です。同じ句がどこにあるか比較してください。
処理1FROM
処理2WHERE
処理3GROUP BY
処理4HAVING
処理5SELECT
処理6ORDER BY
処理7LIMIT
WHEREとHAVINGの違い
WHEREはグループ化前の行を、HAVINGはグループを絞ります。集計関数はHAVINGで使います。行単位の条件をWHEREに置けば、グループ化するデータを減らせます。
別名はSELECTで導入される
averageやheadcountはSELECTで作る別名です。後続のORDER BYでは使えます。MySQLなどはGROUP BYやHAVINGでも許すため、DBごとの規則を確認してください。
コーディング試験では
部署の平均給与に条件を課すならGROUP BY+HAVING、特定給与以上の社員だけを集計するならWHERE+GROUP BYです。行の条件か集計の条件かを区別しましょう。