SQL初心者向けの実践問題10選!クエリ演習でスキルアップ

SQL & DB

「SQLを覚えたら、世界がちょっと変わりました。」

かつての私は、データと向き合うたびに「なんでこんなに手作業が多いの?」と嘆いていました。

エクセルのフィルタをポチポチ押しながら、膨大な情報を手作業で整理する日々…。

でも、SQLを操れるようになってからは、そんな悩みが一気に吹き飛びました。

「このクエリを書けば、すべて一瞬で解決する!」

まるで魔法を使えるようになったような気分。私は無敵になったのです。

データの整理?もう手作業には戻れません。

情報の分析?SQLを使えば、知りたいことがすぐに見える!

とはいえ、最初の一歩は誰だって不安なもの。

この記事では、そんな「SQL初心者だったころの私」が試行錯誤しながら身につけた、基本のクエリ10選 を演習しながら学べるようにまとめました!

最初の1行を書けば、あなたの世界も変わるかもしれません。さあ、一緒にSQLの魔法を使いこなしましょう!

  1. はじめに:SQLは“読むだけ”ではなく、手を動かして覚えよう
  2. 第1章:データを取得!基本のSELECT文をマスターしよう
    1. SELECTの基本構文
    2. 実践①:全部見たい!SELECT *
    3. 実践②:条件をつけてデータを絞り込む(WHERE)
    4. 実践③:データを並べ替えたい!(ORDER BY)
    5. プチ課題:SQLレストランをオーダーしてみよう
  3. 第2章:データを操作!INSERT, UPDATE, DELETEの演習
    1. INSERT:データを1件、そっとテーブルに追加してみよう
    2. UPDATE:あ、部署移動!?データを書き換えよう
    3. DELETE:うっ…退職!?データを削除する勇気
    4. ミニ演習:入れて、直して、消してみよう!
    5. まとめ:テーブルは編集できてこそ、面白くなる!
  4. 第3章:応用クエリを試してみよう!(JOIN・ORDER BY・GROUP BY)
    1. JOIN:別々のテーブルをつなぐ、データ界のハグ技術
    2. ORDER BY:整列することで、見える世界が変わる
    3. GROUP BY:データをまとめて、傾向を“見える化”
    4. プチ演習:あなただけの“集計クエリ”に挑戦!
    5. まとめ:応用クエリは“情報を活かす技術”
  5. 第4章:SQLの実践力をアップ!ミニ課題で腕試し
    1. データベース設定(想定テーブル)
      1. ミニ課題リスト
      2. “解く楽しさ”が、理解をぐっと深めてくれる!
      3. 答え合わせ:ミニ課題の正解例&解説
        1. ① 30歳以上の社員の名前と年齢を表示せよ
        2. ② 社員の名前と所属部署名をJOINして一覧表示せよ
        3. ③ 30歳未満の社員をINSERTで1人追加しよう
        4. ④ 「営業部」の社員の年齢を5歳プラス
        5. ⑤ 年齢が40歳以上の社員を削除せよ
        6. ⑥ 部署ごとの社員数を集計せよ
        7. ⑦ 平均年齢が30歳以上の部署だけに絞る(HAVING)
        8. ⑧ 年齢の降順で並べて3人目まで表示
        9. ⑨ 30代の社員を代別にグループ分けしてカウント
        10. ⑩ 部署名が“開発部”の社員情報をSELECT
        11. まとめ:正解かどうかより、「なぜそう書いたか」が大事!
  6. まとめ:演習を積めば、SQLは確実に身につく!

はじめに:SQLは“読むだけ”ではなく、手を動かして覚えよう

SQLって、最初はなんとなくカッコよさそうに見えませんか?

「SELECT name FROM users;」

とか、映画のハッカーが打ってそうな雰囲気ありますよね。

私は最初、「うおっ、英語で命令してる!未来の自分イケてる!」とテンション上がったものです。

でも――いくら本や講座を読んでも、「分かった気になってるだけ」問題、あるあるです。

SQLはあくまで“言語”。つまり、話してみないと覚えられません。

英語の教科書を読み込んだだけでペラペラにならないように、SQLも手を動かして、エラーと仲良くなって、成功体験を重ねることが何よりの近道です。

この記事では、初心者が最初につまずきやすいポイントを押さえながら、「実際に書いて動かせるクエリ10選」を演習形式で紹介していきます。

コピペOK。失敗大歓迎。ついでに爆速で成長しちゃってください。

第1章:データを取得!基本のSELECT文をマスターしよう

「とりあえずデータ全部見せてくれませんか?」 そのシンプルな願いを叶えてくれるのが、SQLの花形・SELECT文です。

SELECTをマスターすれば、まるで“情報の読み取りマシン”になった気分になれます。

SELECTの基本構文

SQL
SELECT カラム名 FROM テーブル名;

最初に覚えるべきはこの一文。

例えば、「employees」テーブルから名前と年齢だけを取り出したいときはこう書きます

SQL
SELECT name, age FROM employees;

「テーブルに聞けば、ちゃんと答えてくれる」—— ちょっとデータベースが友達に見えてきませんか?

実践①:全部見たい!SELECT *

SQL
SELECT * FROM employees;

*(アスタリスク)は「全部ちょうだい!」の合図。

テーブルにある全カラムを丸ごと取得します。

使いすぎ注意ですが、最初のうちは「あれ、どんな項目があるんだっけ?」という時に便利です。

実践②:条件をつけてデータを絞り込む(WHERE)

SQL
SELECT * FROM employees WHERE age > 30;

このクエリは「30歳より年上の社員だけちょうだい」という意味。

WHERE句を使えば、データを“選りすぐり”できます。

実践③:データを並べ替えたい!(ORDER BY)

SQL
SELECT name, age FROM employees ORDER BY age DESC;

「年齢順に並べたい!若い順?年上順?」そんなときはORDER BY。

DESCで降順(高い順)、ASCで昇順(低い順)になります。

ちょっとした“整理術”ですね。

プチ課題:SQLレストランをオーダーしてみよう

SQL
SELECT name FROM menu WHERE price <= 500 AND category = 'dessert';

このクエリは「500円以下のデザートの名前をください!」という注文文。

実際の飲食店データで遊ぶと、一気にSQLが身近に感じられますね。

SELECT文は“読む”というより“会話する”イメージで。
「何を出して」「どの条件で」「どんな順番で」——聞き方をマスターすれば、データはちゃんと答えてくれます。

次章では、いよいよデータを「追加・編集・削除」していく方法に進んでいきます!

どんどん触って、エラーと仲良くなりながら、SQLスキルを育てていきましょう!

第2章:データを操作!INSERT, UPDATE, DELETEの演習

SQLの醍醐味、それは「見るだけじゃなく、データを操れるようになること」です。

この章では、データを「追加(INSERT)」「変更(UPDATE)」「削除(DELETE)」する3つの基本操作をマスターしましょう。

え、怖い?大丈夫。最初は誰だってテーブルを吹き飛ばしかけます(私もそうでした)

INSERT:データを1件、そっとテーブルに追加してみよう

「新入社員が入社しました!データベースにも追加しなきゃ!」 そんなときに登場するのがINSERT文です。

SQL
INSERT INTO employees (name, age, department)
VALUES ('田中太郎', 28, '営業部');

書き方のポイントは、「カラム名とデータの順番を揃えること」。

この1文だけで、新しい行(レコード)がぽんっと追加されます。

UPDATE:あ、部署移動!?データを書き換えよう

今度は、既存のデータを上書きするUPDATE文。

「田中さん、今月から開発部配属になりました」と言われたら…

SQL
UPDATE employees
SET department = '開発部'
WHERE name = '田中太郎';

ポイントは、「WHERE句を書き忘れると全員異動する」ということ。

条件は必ずつけて、「変更する人」だけに反映しましょう。

DELETE:うっ…退職!?データを削除する勇気

削除もSQLなら一瞬です。

例えば…

SQL
DELETE FROM employees WHERE name = '田中太郎';

これで、田中さんのデータがしゅん…と姿を消します。

DELETEもUPDATEと同様、WHERE句を忘れると全員消えます。

ほんとに、全員。 「慎重に書く」ことを学べる、大切な構文です。

ミニ演習:入れて、直して、消してみよう!

あなたもデータベースに下記の手順でチャレンジ!

  • 「本田花子さん(31歳・マーケティング部)」をINSERTで追加
  • 「本田さんの部署を”広報部”にUPDATE」
  • 「本田さんをDELETEしてデータをクリア」

※練習用DBを使えば安心して試せます(SQLite・PostgreSQL・MySQL など)

まとめ:テーブルは編集できてこそ、面白くなる!

SELECTで「見る」だけでも楽しいですが、INSERT/UPDATE/DELETEができると、 SQLが“読み取り”から“コントロール”に変わります。

まるでデータベースという舞台で、自分が演出家になったみたいな感覚?!

一歩ずつ、ミスを恐れず、操作する力も身につけていきましょう!

第3章:応用クエリを試してみよう!(JOIN・ORDER BY・GROUP BY)

SELECT文でデータを“見る”ことに慣れてきたあなたへ。

今度は「並べる・まとめる・つなげる」の三大スキルを伝授します!

いよいよ、“ただの読者”から“データ操作の匠”へ進化する時が来ました!

JOIN:別々のテーブルをつなぐ、データ界のハグ技術

実生活でたとえるなら「社員名簿と部署リストをくっつけたい」みたいな話。

JOINを使えば、2つ以上のテーブルを魔法のように合体できます。

SQL
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

「名前と部署を一緒に表示したいんだ~」という時の定番。

※JOINには INNER / LEFT / RIGHT など種類がありますが、まずはINNER JOINで十分です!

JOINをマスターすれば、あなたのクエリはまるで多重奏!

ORDER BY:整列することで、見える世界が変わる

テーブルからデータを引っ張るだけじゃもったいない。

順番を整えると、グッと“読みやすく・見やすく”なります。

SQL
SELECT name, age
FROM employees
ORDER BY age DESC;

このクエリは「年齢が高い順」に社員を並べて表示。

ASC を使えば「若い順」、DESC で「年齢が高い順」です。

GROUP BY:データをまとめて、傾向を“見える化”

「部署ごとに何人いるの?」 「年代別に何人?」 そんな集計系の悩みに応えるのがGROUP BY!

SQL
SELECT department_id, COUNT(*) AS 人数
FROM employees
GROUP BY department_id;

カウント数(人数)がまとまると、「あれ?この部署、人多くない?」なんて“気づき”も得られます。

さらにHAVING句を使えば、グループに対して条件をかけることもできます!

プチ演習:あなただけの“集計クエリ”に挑戦!

  • 各部署ごとの平均年齢を表示してみよう(AVG+GROUP BY)
  • 年齢が30歳以上の部署だけを集計してみよう(HAVINGを追加)
SQL
SELECT department_id, AVG(age) AS 平均年齢
FROM employees
GROUP BY department_id
HAVING AVG(age) >= 30;

※一気に“データ分析してる感”が出てきます!

まとめ:応用クエリは“情報を活かす技術”

JOINで“広げて”、 ORDER BYで“並べて”、 GROUP BYで“まとめて”。

この3つが使えるようになると、データベースがただの情報倉庫ではなく、“洞察の宝箱”に変わります。

焦らず、ひとつずつ慣れていきましょう。

次章では、クエリを実践形式で解いて“腕試し”していきますよ!

第4章:SQLの実践力をアップ!ミニ課題で腕試し

ここまでで、SELECT/INSERT/UPDATE/DELETE、そしてJOINやGROUP BYといった応用技までひと通り学んできました。

…さて。ここからがちょっと“ドキドキの実践”タイムです!

「読むだけじゃ物足りない!」「ちゃんと理解できてるのかな…?」というあなたに、ミニ課題で実力チェックしていただきましょう✨

データベース設定(想定テーブル)

以下の2つのテーブルを使って課題にチャレンジ!

employees テーブル

idnameagedepartment_id
1佐藤花子291
2鈴木一郎352
3高橋まこと411

departments テーブル

iddepartment_name
1開発部
2営業部

ミニ課題リスト

① 30歳以上の社員の名前と年齢を表示せよ(WHERE句)

② 社員の名前と所属部署名をJOINして一覧表示せよ

③ 30歳未満の社員をINSERTで1人追加してみよう

④ 「営業部」の全社員の年齢を5歳プラスしてみよう(UPDATE)

⑤ 「年齢が40歳以上」の社員だけを削除せよ(DELETE)※勇気を持って!

⑥ 部署ごとの社員数を集計しよう(GROUP BY)

⑦ 部署ごとの平均年齢を表示し、平均年齢が30歳以上の部署だけに絞り込もう(HAVING)

⑧ 社員全員を年齢の降順で並べ替え、3人目まで表示せよ(ORDER BY+LIMIT)

⑨ 30代の社員を“代”でグループ分けしてカウントしてみよう(CASE+GROUP BY)

⑩ 部署名が“開発部”の社員だけの情報をSELECTして、美しく表示してみよう

“解く楽しさ”が、理解をぐっと深めてくれる!

課題を解くことで、自分の「できること/苦手なこと」がクリアに見えてきます。

もちろん、最初からすべて完璧にできなくてもOK。

ちょっと悩んで、ちょっと試して、ちょっと動いたら、それだけで大成功です。

練習用DB(例:SQLiteやPostgreSQLなど)や、無料のSQL実行環境(SQL Fiddle、db-fiddle.com など)を使えば、手軽に試せますよ!

答え合わせ:ミニ課題の正解例&解説

① 30歳以上の社員の名前と年齢を表示せよ
SQL
SELECT name, age
FROM employees
WHERE age >= 30;

WHEREで条件を指定して、該当するレコードだけを抽出する基本パターン。
年齢30歳以上=「30含む」です!

② 社員の名前と所属部署名をJOINして一覧表示せよ
SQL
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

INNER JOINで「関連するデータ同士をつなげる」クエリ。ONの条件を間違えやすいので注意!

③ 30歳未満の社員をINSERTで1人追加しよう
SQL
INSERT INTO employees (name, age, department_id)
VALUES ('山田未来', 25, 1);

INSERTでは、カラムの順番と値の順番が合っていることが超重要! 忘れがちなdepartment_idも忘れずに。

④ 「営業部」の社員の年齢を5歳プラス
SQL
UPDATE employees
SET age = age + 5
WHERE department_id = 2;

直接加算してOK!department_id = 2は「営業部」に該当します。WHERE句を忘れると全員年を取ります。

⑤ 年齢が40歳以上の社員を削除せよ
SQL
DELETE FROM employees
WHERE age >= 40;

削除系は特に慎重に! 条件がちゃんと絞れているか、実行前に確認を。

⑥ 部署ごとの社員数を集計せよ
SQL
SELECT department_id, COUNT(*) AS 社員数
FROM employees
GROUP BY department_id;

GROUP BY+集計関数(COUNT)は、集団ごとの傾向を見るときの基本ワザです!

⑦ 平均年齢が30歳以上の部署だけに絞る(HAVING)
SQL
SELECT department_id, AVG(age) AS 平均年齢
FROM employees
GROUP BY department_id
HAVING AVG(age) >= 30;

HAVINGはGROUP BYの後に使う“集計結果に対する絞り込み”。WHEREじゃフィルタできません!

⑧ 年齢の降順で並べて3人目まで表示
SQL
SELECT name, age
FROM employees
ORDER BY age DESC
LIMIT 3;

PostgreSQLやMySQLで動くパターンです。先にORDER BY、そのあとLIMITの順番に注意!

⑨ 30代の社員を代別にグループ分けしてカウント
SQL
SELECT
  CASE
    WHEN age BETWEEN 20 AND 29 THEN '20代'
    WHEN age BETWEEN 30 AND 39 THEN '30代'
    WHEN age >= 40 THEN '40代以上'
    ELSE 'その他'
  END AS 年代,
  COUNT(*) AS 人数
FROM employees
GROUP BY 年代;

CASE文+GROUP BYで年代別集計に挑戦!クエリに“ちょっとロジック”が入ってくると一気に楽しくなります。

⑩ 部署名が“開発部”の社員情報をSELECT
SQL
SELECT e.name, e.age, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.id
WHERE d.department_name = '開発部';

JOINしたあとにWHEREで絞り込み! エイリアス(e, d)を使って見た目もスマートに。

まとめ:正解かどうかより、「なぜそう書いたか」が大事!

もし違っていても落ち込まなくて大丈夫!

「どう違ったのか」「なぜうまくいかなかったのか」を1つひとつ振り返ることが、いちばんの学習になります。

クエリは“会話”のようなもの。

書けば書くほど上手になります。

これからもどんどん実践して、SQLと仲良くなっていきましょうね!

まとめ:演習を積めば、SQLは確実に身につく!

SQLは、“書く”ことでこそ身につきます。

画面と向き合いながら「あれ?」「おっ?」を繰り返すうちに、いつの間にか“考え方”も体に染み込んできます。

ぜひこの課題を自分の手で解いて、「実は私、SQLちょっとできるかも!」の感覚、味わってみてくださいね。

decopon
decopon

SQLの世界は、最初はちょっと取っつきにくくても、ひとつずつクエリを書いていくうちに、 「あれ、自分でデータを動かせてるかも!」という楽しさに出会える世界です。

私自身も、最初はSELECTすらこわごわ打っていましたが、 小さな“できた!”を積み重ねていくうちに、だんだんSQLと仲良くなっていきました。 もし今、つまずいているところがあっても大丈夫です。 焦らず、ゆっくり、自分のペースで進めていってくださいね。

コメント

タイトルとURLをコピーしました