メインコンテンツへスキップ
見出し画像

【基本情報】SQL入門|SELECT・JOIN・GROUP BYをゼロから攻略

    集計の結果を自分で確かめるなら:WHERE・GROUP BY・HAVINGの無料例題で、同じ表からどの行・グループが残るか練習できます。まずこの下の入門で命令の役割を確認し、次に結果表を紙へ書いてください。

    基本情報技術者試験のデータベース分野で、避けて通れないのがSQLです。

    SQLを見ると、

    「SELECTはなんとなく分かるけど、WHEREやGROUP BYが混ざると分からない…」

    「JOINが出てくると急に難しく感じる…」

    という方も多いのではないでしょうか。

    でも、基本情報で問われるSQLは、それぞれの命令が何をしているのかを順番に理解すれば、かなり読みやすくなります。

    この記事では、

    • SELECT

    • FROM

    • WHERE

    • ORDER BY

    • DISTINCT

    • GROUP BY

    • HAVING

    • 集約関数

    • JOIN

    といった頻出ポイントを、SQL初心者向けにゼロから整理します。

    ⸻

    1. そもそもSQLとは?

    SQLは、

    データベースを操作するための言語

    です。

    たとえば、ECサイトに次のような商品テーブルがあるとします。

    画像

    このデータから、

    「商品名だけ表示したい」

    「1万円以上の商品だけ取り出したい」

    「価格が高い順に並べたい」

    といった操作をするときにSQLを使います。

    ⸻

    2. まずはSELECTを覚える

    SQLの基本中の基本がSELECT文です。

    SELECT 商品名
    FROM 商品;

    意味は、

    商品テーブルから商品名を取得する

    です。

    SQLを見るときは、

    SELECT → 何を表示する?
    FROM   → どこから取得する?

    と考えましょう。

    ⸻

    3. SELECTとFROM

    基本形はこちらです。

    SELECT 列名
    FROM テーブル名;

    たとえば、

    SELECT 商品名, 価格
    FROM 商品;

    なら、

    画像

    のように、指定した列だけ取得できます。

    ⸻

    4. 「*」は全ての列

    すべての列を取得したい場合は、

    SELECT *
    FROM 商品;

    と書きます。

    * は、

    すべての列

    という意味です。

    試験でも頻繁に登場するので覚えておきましょう。

    ⸻

    5. WHEREで条件を指定する

    次に重要なのがWHEREです。

    WHEREは、

    条件に一致する行だけを取り出す

    ために使います。

    たとえば、

    SELECT 商品名, 価格
    FROM 商品
    WHERE 価格 >= 10000;

    とすると、

    価格が10,000円以上の商品

    だけ取得できます。

    結果は、

    画像

    となります。

    ⸻

    6. WHEREで使う比較演算子

    基本情報では比較演算子も重要です。

    画像

    たとえば、

    WHERE 価格 < 10000

    なら、

    価格が10,000円未満

    という意味です。

    ⸻

    7. AND・OR・NOT

    複数の条件を組み合わせることもできます。

    AND

    WHERE 価格 >= 5000
    AND 価格 <= 30000

    両方の条件を満たすデータを取得します。

    つまり、

    5,000円以上かつ30,000円以下

    です。

    OR

    WHERE カテゴリ = 'PC'
    OR カテゴリ = '周辺機器'

    どちらかの条件を満たせばOKです。

    NOT

    WHERE NOT カテゴリ = 'PC'

    指定した条件ではないデータを取得します。

    ⸻

    8. ORDER BYで並び替える

    データを並び替えるときは、

    ORDER BY

    を使います。

    SELECT 商品名, 価格
    FROM 商品
    ORDER BY 価格;

    基本は昇順です。

    つまり、

    3,000
    8,000
    30,000
    120,000

    のように小さい順になります。

    ⸻

    9. ASCとDESC

    並び順は次のように指定できます。

    画像

    たとえば、

    ORDER BY 価格 DESC;

    なら、

    価格が高い順

    になります。

    120,000
    30,000
    8,000
    3,000

    です。

    覚え方は、

    ASC  → 小さい → 大きい
    DESC → 大きい → 小さい

    でOKです。

    ⸻

    10. DISTINCTで重複を除く

    重複したデータを除きたい場合は、

    DISTINCT

    を使います。

    SELECT DISTINCT カテゴリ
    FROM 商品;

    元のデータに、

    PC
    周辺機器
    周辺機器
    周辺機器

    とあっても、結果は

    PC
    周辺機器

    となります。

    つまり、

    DISTINCT = 重複を除く

    です。

    ⸻

    11. SQLで重要な集約関数

    ここから少しレベルアップします。

    複数のデータをまとめて計算するときに使うのが集約関数です。

    基本情報では次の5つを優先して覚えましょう。

    画像

    ⸻

    12. COUNT

    データの件数を数えるときは、

    SELECT COUNT(*)
    FROM 商品;

    とします。

    商品が4件なら、

    4

    が返されます。

    COUNT = 数える

    と覚えましょう。

    ⸻

    13. SUM

    合計を求める場合は、

    SELECT SUM(価格)
    FROM 商品;

    です。

    価格の合計が求められます。

    ⸻

    14. AVG

    平均を求める場合は、

    SELECT AVG(価格)
    FROM 商品;

    です。

    AVG = Average = 平均

    なので覚えやすいですね。

    ⸻

    15. MAXとMIN

    最大値は、

    SELECT MAX(価格)
    FROM 商品;

    最小値は、

    SELECT MIN(価格)
    FROM 商品;

    です。

    ここまでを整理すると、

    COUNT → 件数
    SUM   → 合計
    AVG   → 平均
    MAX   → 最大
    MIN   → 最小

    です。

    この5つはセットで覚えてしまいましょう。

    ⸻

    16. GROUP BYとは?

    SQL初心者がつまずきやすいポイントが、

    GROUP BY

    です。

    GROUP BYは、

    同じ値を持つデータをグループにまとめる

    ために使います。

    たとえば、

    画像

    というデータがあるとします。

    ⸻

    17. カテゴリごとの件数を求める

    SELECT カテゴリ, COUNT(*)
    FROM 商品
    GROUP BY カテゴリ;

    すると、

    画像

    となります。

    イメージは、

    PC
     └ ノートPC
    
    周辺機器
     ├ マウス
     ├ キーボード
     └ モニター

    です。

    つまり、

    GROUP BY → グループに分けて集計する

    と覚えると分かりやすいです。

    ⸻

    18. GROUP BYと集約関数はセットで考える

    GROUP BYは、

    COUNT
    SUM
    AVG
    MAX
    MIN

    などと一緒に登場することが多いです。

    たとえば、

    SELECT カテゴリ, AVG(価格)
    FROM 商品
    GROUP BY カテゴリ;

    なら、

    カテゴリごとの平均価格

    を求めています。

    問題文に、

    「○○ごとの」

    と書かれていたら、GROUP BYを疑いましょう。

    たとえば、

    部署ごとの人数
    商品カテゴリごとの平均価格
    都道府県ごとの売上

    などです。

    ⸻

    19. WHEREとHAVINGの違い

    ここは基本情報でも重要です。

    どちらも条件指定に使いますが、対象が違います。

    画像

    たとえば、

    SELECT カテゴリ, COUNT(*)
    FROM 商品
    GROUP BY カテゴリ
    HAVING COUNT(*) >= 2;

    なら、

    商品が2件以上あるカテゴリだけ表示する

    という意味です。

    ⸻

    20. WHEREとHAVINGをイメージで理解

    処理のイメージは、

    元データ
       ↓
    WHERE
       ↓
    必要な行だけ残す
       ↓
    GROUP BY
       ↓
    グループ化
       ↓
    HAVING
       ↓
    必要なグループだけ残す

    です。

    ここはかなり重要。

    WHERE → 行

    HAVING → グループ


    と覚えておきましょう。

    ⸻

    21. JOINとは?

    ここからSQLの大きな山場、

    JOIN

    です。

    JOINは、

    複数のテーブルを結合する

    ために使います。

    たとえば、

    社員テーブル

    画像

    部署テーブル

    画像

    があります。

    この2つを、

    部署ID

    を使って結び付けます。

    ⸻

    22. INNER JOIN

    代表的なのが、

    INNER JOIN(内部結合)

    です。

    SELECT 社員.氏名, 部署.部署名
    FROM 社員
    INNER JOIN 部署
    ON 社員.部署ID = 部署.部署ID;

    結果は、

    画像

    となります。

    重要なのは、

    ON 社員.部署ID = 部署.部署ID

    です。

    これは、

    どの列を使ってテーブル同士を結び付けるのか

    を指定しています。

    ⸻

    23. JOINを図で理解する

    イメージすると、

    画像

    と考えます。

    JOINが苦手な場合は、

    「共通している列はどれ?」

    を最初に探すのがおすすめです。

    ⸻

    24. INNER JOINとOUTER JOIN

    結合にはいくつか種類があります。

    まず押さえたいのは、

    INNER JOIN
    LEFT OUTER JOIN
    RIGHT OUTER JOIN

    です。

    INNER JOIN

    両方のテーブルに対応するデータがあるものだけ

    取得します。

    LEFT OUTER JOIN

    左側のテーブルをすべて残す

    結合です。

    対応するデータが右側になくても、左側の行は残ります。

    RIGHT OUTER JOIN

    反対に、

    右側のテーブルをすべて残す

    結合です。

    ⸻

    25. INNER JOINとLEFT JOINの違い

    ここはイメージで覚えましょう。

    画像

    LEFT JOINでは、対応するデータがなくても左側は残るのがポイントです。

    ⸻

    26. NULLとは?

    SQLでは、

    NULL

    も重要です。

    NULLは、

    値が存在しない・不明

    という状態を表します。

    ここで注意。

    WHERE 列名 = NULL

    とは通常書きません。

    NULLかどうか調べる場合は、

    WHERE 列名 IS NULL

    を使います。

    NULLではない場合は、

    WHERE 列名 IS NOT NULL

    です。

    ⸻

    27. LIKEで文字列を検索する

    文字列のパターン検索には、

    LIKE

    を使います。

    たとえば、

    WHERE 商品名 LIKE 'ノート%'

    とすると、

    「ノート」で始まる商品名

    を検索できます。

    % は、

    0文字以上の任意の文字列

    を表します。

    たとえば、

    LIKE '%PC%'

    なら、

    途中に「PC」を含む文字列

    を検索できます。

    ⸻

    28. BETWEEN

    範囲を指定するときには、

    WHERE 価格 BETWEEN 5000 AND 30000

    のように書けます。

    これは、

    5,000以上30,000以下

    という意味です。

    ⸻

    29. IN

    複数候補のいずれかに一致するか調べる場合は、

    WHERE カテゴリ IN ('PC', '周辺機器')

    と書けます。

    これは、

    WHERE カテゴリ = 'PC'
    OR カテゴリ = '周辺機器'

    に近い意味になります。

    ⸻

    30. SQLは「書かれている順番」と「考える順番」が違う

    SQLで混乱しやすいポイントです。

    たとえば、

    SELECT カテゴリ, COUNT(*)
    FROM 商品
    WHERE 価格 >= 5000
    GROUP BY カテゴリ
    HAVING COUNT(*) >= 2
    ORDER BY COUNT(*) DESC;

    と書かれていたとします。

    SQL上の記述は、

    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    ORDER BY

    ですが、問題を理解するときは、

    FROM
    ↓
    WHERE
    ↓
    GROUP BY
    ↓
    HAVING
    ↓
    SELECT
    ↓
    ORDER BY

    のように、データがどう絞られ、まとめられていくかを考えると理解しやすくなります。

    ※厳密なDBMS内部の物理実行順序ではなく、SQLを学ぶ際の論理的な理解方法です。

    ⸻

    31. SQL問題を解くときの5ステップ

    SQL問題が出たら、いきなり選択肢を見るのではなく、次の順番で確認しましょう。

    STEP1:どのテーブルを使う?

    FROM

    を確認します。

    STEP2:どの行を使う?

    WHERE

    を確認します。

    STEP3:グループ化する?

    GROUP BY

    を確認します。

    STEP4:何を表示する?

    SELECT

    を確認します。

    STEP5:どう並べる?

    ORDER BY

    を確認します。

    複数テーブルなら、

    JOIN
    ON

    も確認します。

    ⸻

    32. JOIN問題の解き方

    JOINが出たら、まず、

    「どの列とどの列を結ぶ?」

    を確認します。

    たとえば、

    FROM 社員
    INNER JOIN 部署
    ON 社員.部署ID = 部署.部署ID

    なら、

    社員.部署ID
          ↓
         結合
          ↑
    部署.部署ID

    です。

    テーブル全体を一気に理解しようとせず、

    結合キーを先に探す

    のがコツです。

    ⸻

    33. GROUP BY問題の解き方

    GROUP BYが出たら、

    「何ごとに分ける?」

    を考えます。

    GROUP BY カテゴリ

    なら、

    カテゴリごと

    です。

    そのあと、

    COUNT(*)
    AVG(価格)
    SUM(売上)

    などを確認します。

    つまり、

    GROUP BY
    ↓
    何ごと?
    集約関数
    ↓
    何を計算する?

    です。

    ⸻

    34. よくある間違い① WHEREとHAVING

    混同しやすいので、これだけ覚えましょう。

    WHERE
    ↓
    グループ化する前
    
    HAVING
    ↓
    グループ化した後

    問題文に、

    「平均○円以上のカテゴリ」

    のような条件が出たらHAVINGが候補になります。

    ⸻

    35. よくある間違い② ORDER BY

    ORDER BY 価格 DESC

    を見て、

    「DESCって昇順だっけ?」

    となりやすいです。

    覚え方は、

    ASC  ↑ 昇順
    DESC ↓ 降順

    です。

    ⸻

    36. よくある間違い③ COUNTとSUM

    COUNT → 数える
    SUM   → 足す

    です。

    たとえば、

    商品数を求める

    ならCOUNT。

    売上合計を求める

    ならSUM。

    問題文から判断しましょう。

    ⸻

    37. よくある間違い④ NULL

    NULLは普通の値とは少し違います。

    = NULL

    ではなく、

    IS NULL

    を使うことを覚えておきましょう。

    ⸻

    38. よくある間違い⑤ JOINの結合条件

    JOINでは、

    ON

    の条件が重要です。

    たとえば、

    ON 社員.部署ID = 部署.部署ID

    なら、

    部署IDが一致するデータを対応付ける

    という意味です。

    JOIN問題では必ずONを確認しましょう。

    ⸻

    39. 頻出SQLを一気に整理

    画像

    まずはこの表を覚えるだけでも、SQL問題がかなり読みやすくなります。

    ⸻

    40. SELECT文の基本形を覚える

    最後に、この形を覚えておきましょう。

    SELECT 列
    FROM テーブル
    JOIN 別テーブル
      ON 結合条件
    WHERE 行の条件
    GROUP BY グループ化する列
    HAVING グループの条件
    ORDER BY 並び替える列;

    全部が毎回登場するわけではありません。

    重要なのは、

    SELECT   → 何を取得?
    FROM     → どこから?
    JOIN     → 何と結合?
    ON       → 何をキーに結合?
    WHERE    → どの行?
    GROUP BY → 何ごと?
    HAVING   → どのグループ?
    ORDER BY → どう並べる?

    と意味を対応させることです。

    ⸻

    41. ミニ問題①

    次のSQLは何を取得するでしょうか?

    SELECT 商品名
    FROM 商品
    WHERE 価格 >= 10000
    ORDER BY 価格 DESC;

    答え
    価格が10,000円以上の商品について、商品名を価格の高い順に取得する。

    見るポイントは、

    SELECT 商品名
    WHERE 価格 >= 10000
    ORDER BY 価格 DESC

    です。

    ⸻

    42. ミニ問題②

    次のSQLは何を求めているでしょうか?

    SELECT カテゴリ, COUNT(*)
    FROM 商品
    GROUP BY カテゴリ;

    答え
    カテゴリごとの商品数

    です。

    GROUP BY カテゴリ
    ↓
    カテゴリごと
    COUNT(*)
    ↓
    件数

    と考えましょう。

    ⸻

    43. ミニ問題③

    SELECT 部署.部署名, COUNT(*)
    FROM 社員
    INNER JOIN 部署
    ON 社員.部署ID = 部署.部署ID
    GROUP BY 部署.部署名;

    何を求めているでしょうか?

    答え
    部署ごとの社員数

    です。

    この問題では、

    JOIN
    ↓
    社員と部署を結合
    GROUP BY
    ↓
    部署ごと
    COUNT
    ↓
    社員数を数える

    と分解すると読みやすくなります。

    ⸻

    44. 試験直前チェックリスト

    SQL対策では、次を確認しておきましょう。

    ◻︎SELECTの意味が分かる
    ◻︎FROMの意味が分かる
    ◻︎WHEREで条件を指定できる
    ◻︎AND・OR・NOTを理解している
    ◻︎ASCとDESCを区別できる
    ◻︎DISTINCTの意味が分かる
    ◻︎COUNT・SUM・AVG・MAX・MINを区別できる
    ◻︎GROUP BYの意味が分かる
    ◻︎WHEREとHAVINGを区別できる
    ◻︎INNER JOINの意味が分かる
    ◻︎LEFT JOINの意味が分かる
    ◻︎ONで結合条件を確認できる
    ◻︎NULLにはIS NULLを使うと分かる
    ◻︎LIKEの意味が分かる
    ◻︎SQLを処理の流れに沿って読める

    ⸻

    45. 最後にこれだけ覚える

    試験直前なら、まずこの8個を優先してください。

    SELECT
    → 何を取得する?
    
    FROM
    → どのテーブル?
    
    WHERE
    → どの行?
    
    GROUP BY
    → 何ごとにまとめる?
    
    HAVING
    → どのグループ?
    
    ORDER BY
    → どう並べる?
    
    JOIN
    → どのテーブルを結合する?
    
    ON
    → 何を使って結合する?

    そして集約関数は、

    COUNT → 件数
    SUM   → 合計
    AVG   → 平均
    MAX   → 最大
    MIN   → 最小

    です。

    ⸻

    まとめ

    SQLは最初に見ると英単語や記号が多く、難しそうに感じます。

    でも、基本情報対策では一つずつ役割を分解して考えることが重要です。

    特に、

    SELECT・WHERE・GROUP BY・HAVING・JOIN

    は優先して理解しておきましょう。

    SQL問題で迷ったら、

    ① どのテーブル?
            ↓
    ② どの行?
            ↓
    ③ グループ化する?
            ↓
    ④ 何を取得する?
            ↓
    ⑤ どう並べる?

    の順番で整理してみてください。

    JOINがあれば、

    「どの列とどの列を結ぶ?」

    も確認します。

    SQLは丸暗記するより、実際のテーブルを見ながら「このSQLを実行すると何が残る?」と追いかける練習をするのがおすすめです。

    最初はSELECTとWHEREだけ。

    次にGROUP BY。

    最後にJOIN。

    この順番で理解していけば、SQLは十分得点源にできます🔥

    この記事は無料なので、SQL対策の復習用として保存して繰り返し使ってみてください!

    あなたへのおすすめ