0
0

【初心者向け】SQLクエリの句 抽出順番について

Posted at

今回の記事は「SQLの抽出順番を理解することでそれぞれの句の意味がすんなり理解できるかも」というお話。

まずSQLの句ってどんなものがあるか見ていきましょう。
上から記載する順番に見ていきます。

句の種類について
①SELECT句: 抽出する列を指定
②FROM句: データを取得するテーブルを指定
③WHERE句: 行のフィルタリング条件を指定
④GROUP BY句: 行をグループ化する列を指定
⑤HAVING句: グループ化後にグループをフィルタリングする条件を指定
⑥ORDER BY句: 結果セットを並べ替える条件を指定

具体的なコード

SELECT 店舗名, SUM(売上) AS 総売上 --「店舗名」と「総売上」を表示する。
FROM 売上テーブル --「売上テーブル」から見つける。
WHERE 地域 = '関東' --「地域」というカラム(列)に「関東」と含まれている場所を見つける。
GROUP BY 店舗名 --「店舗名」の順番でグループ化。
HAVING SUM(売上) > 100000 --「総売上」は「100000」以上という条件。
ORDER BY 総売上 DESC; --売上が高い順で表示する。

コメントを見ると「なんとなくわかる」という状態だと思います。
しかし、実際に書いてみると「どの句からかいたらいいかわからない」という状態になると思います。自分はなりました。

そこで以下の方法で処理が進むと分かれば、記載のポイントを理解することが出来るのではないでしょうか?

処理の順番
①FROM --テーブルからデータを取る
②WHERE --データを取る場所
③GROUP BY --グループ化
④HAVING --フィルタリング条件を指定
⑤SELECT --表示する項目
⑥ORDER BY --表示する項目の順番

「まって、GROUP BY とHAVINGって同じじゃね?似てね?」
って僕は思いました。

説明すると、

GROUP BY はグループ化。
HAVING はグループ化後の結果に条件を設定。

つまり先程のSQL文で説明すると

単純なグループ化と集計:
店舗ごとに売上の合計を出したい → GROUP BY
集計結果に基づくフィルタリング:
売上の合計が特定の金額以上の店舗を知りたい → GROUP BYとHAVING

という感じです。
グループした後に覆うような形で更に条件を加える場合に「HAVING」を使うというイメージです。

以上、ご覧いただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0