「SQLを覚えたら、世界がちょっと変わりました。」
かつての私は、データと向き合うたびに「なんでこんなに手作業が多いの?」と嘆いていました。
エクセルのフィルタをポチポチ押しながら、膨大な情報を手作業で整理する日々…。
でも、SQLを操れるようになってからは、そんな悩みが一気に吹き飛びました。
「このクエリを書けば、すべて一瞬で解決する!」
まるで魔法を使えるようになったような気分。私は無敵になったのです。
データの整理?もう手作業には戻れません。
情報の分析?SQLを使えば、知りたいことがすぐに見える!
とはいえ、最初の一歩は誰だって不安なもの。
この記事では、そんな「SQL初心者だったころの私」が試行錯誤しながら身につけた、基本のクエリ10選 を演習しながら学べるようにまとめました!
最初の1行を書けば、あなたの世界も変わるかもしれません。さあ、一緒にSQLの魔法を使いこなしましょう!
はじめに:SQLは“読むだけ”ではなく、手を動かして覚えよう
SQLって、最初はなんとなくカッコよさそうに見えませんか?
「SELECT name FROM users;」
とか、映画のハッカーが打ってそうな雰囲気ありますよね。
私は最初、「うおっ、英語で命令してる!未来の自分イケてる!」とテンション上がったものです。
でも――いくら本や講座を読んでも、「分かった気になってるだけ」問題、あるあるです。
SQLはあくまで“言語”。つまり、話してみないと覚えられません。
英語の教科書を読み込んだだけでペラペラにならないように、SQLも手を動かして、エラーと仲良くなって、成功体験を重ねることが何よりの近道です。
この記事では、初心者が最初につまずきやすいポイントを押さえながら、「実際に書いて動かせるクエリ10選」を演習形式で紹介していきます。
コピペOK。失敗大歓迎。ついでに爆速で成長しちゃってください。
第1章:データを取得!基本のSELECT文をマスターしよう
「とりあえずデータ全部見せてくれませんか?」 そのシンプルな願いを叶えてくれるのが、SQLの花形・SELECT文です。
SELECTをマスターすれば、まるで“情報の読み取りマシン”になった気分になれます。
SELECTの基本構文
SELECT カラム名 FROM テーブル名;
最初に覚えるべきはこの一文。
例えば、「employees」テーブルから名前と年齢だけを取り出したいときはこう書きます
SELECT name, age FROM employees;
「テーブルに聞けば、ちゃんと答えてくれる」—— ちょっとデータベースが友達に見えてきませんか?
実践①:全部見たい!SELECT *
SELECT * FROM employees;
*(アスタリスク)は「全部ちょうだい!」の合図。
テーブルにある全カラムを丸ごと取得します。
使いすぎ注意ですが、最初のうちは「あれ、どんな項目があるんだっけ?」という時に便利です。
実践②:条件をつけてデータを絞り込む(WHERE)
SELECT * FROM employees WHERE age > 30;
このクエリは「30歳より年上の社員だけちょうだい」という意味。
WHERE句を使えば、データを“選りすぐり”できます。
実践③:データを並べ替えたい!(ORDER BY)
SELECT name, age FROM employees ORDER BY age DESC;
「年齢順に並べたい!若い順?年上順?」そんなときはORDER BY。
DESCで降順(高い順)、ASCで昇順(低い順)になります。
ちょっとした“整理術”ですね。
プチ課題: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文です。
INSERT INTO employees (name, age, department)
VALUES ('田中太郎', 28, '営業部');
書き方のポイントは、「カラム名とデータの順番を揃えること」。
この1文だけで、新しい行(レコード)がぽんっと追加されます。
UPDATE:あ、部署移動!?データを書き換えよう
今度は、既存のデータを上書きするUPDATE文。
「田中さん、今月から開発部配属になりました」と言われたら…
UPDATE employees
SET department = '開発部'
WHERE name = '田中太郎';
ポイントは、「WHERE句を書き忘れると全員異動する」ということ。
条件は必ずつけて、「変更する人」だけに反映しましょう。
DELETE:うっ…退職!?データを削除する勇気
削除も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つ以上のテーブルを魔法のように合体できます。
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:整列することで、見える世界が変わる
テーブルからデータを引っ張るだけじゃもったいない。
順番を整えると、グッと“読みやすく・見やすく”なります。
SELECT name, age
FROM employees
ORDER BY age DESC;
このクエリは「年齢が高い順」に社員を並べて表示。
ASC を使えば「若い順」、DESC で「年齢が高い順」です。
GROUP BY:データをまとめて、傾向を“見える化”
「部署ごとに何人いるの?」 「年代別に何人?」 そんな集計系の悩みに応えるのがGROUP BY!
SELECT department_id, COUNT(*) AS 人数
FROM employees
GROUP BY department_id;
カウント数(人数)がまとまると、「あれ?この部署、人多くない?」なんて“気づき”も得られます。
さらにHAVING句を使えば、グループに対して条件をかけることもできます!
プチ演習:あなただけの“集計クエリ”に挑戦!
- 各部署ごとの平均年齢を表示してみよう(AVG+GROUP BY)
- 年齢が30歳以上の部署だけを集計してみよう(HAVINGを追加)
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 テーブル
id | name | age | department_id |
---|---|---|---|
1 | 佐藤花子 | 29 | 1 |
2 | 鈴木一郎 | 35 | 2 |
3 | 高橋まこと | 41 | 1 |
departments テーブル
id | department_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歳以上の社員の名前と年齢を表示せよ
SELECT name, age
FROM employees
WHERE age >= 30;
WHEREで条件を指定して、該当するレコードだけを抽出する基本パターン。
年齢30歳以上=「30含む」です!
② 社員の名前と所属部署名をJOINして一覧表示せよ
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
INNER JOINで「関連するデータ同士をつなげる」クエリ。ONの条件を間違えやすいので注意!
③ 30歳未満の社員をINSERTで1人追加しよう
INSERT INTO employees (name, age, department_id)
VALUES ('山田未来', 25, 1);
INSERTでは、カラムの順番と値の順番が合っていることが超重要! 忘れがちなdepartment_idも忘れずに。
④ 「営業部」の社員の年齢を5歳プラス
UPDATE employees
SET age = age + 5
WHERE department_id = 2;
直接加算してOK!department_id = 2は「営業部」に該当します。WHERE句を忘れると全員年を取ります。
⑤ 年齢が40歳以上の社員を削除せよ
DELETE FROM employees
WHERE age >= 40;
削除系は特に慎重に! 条件がちゃんと絞れているか、実行前に確認を。
⑥ 部署ごとの社員数を集計せよ
SELECT department_id, COUNT(*) AS 社員数
FROM employees
GROUP BY department_id;
GROUP BY+集計関数(COUNT)は、集団ごとの傾向を見るときの基本ワザです!
⑦ 平均年齢が30歳以上の部署だけに絞る(HAVING)
SELECT department_id, AVG(age) AS 平均年齢
FROM employees
GROUP BY department_id
HAVING AVG(age) >= 30;
HAVINGはGROUP BYの後に使う“集計結果に対する絞り込み”。WHEREじゃフィルタできません!
⑧ 年齢の降順で並べて3人目まで表示
SELECT name, age
FROM employees
ORDER BY age DESC
LIMIT 3;
PostgreSQLやMySQLで動くパターンです。先にORDER BY、そのあとLIMITの順番に注意!
⑨ 30代の社員を代別にグループ分けしてカウント
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
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ちょっとできるかも!」の感覚、味わってみてくださいね。

SQLの世界は、最初はちょっと取っつきにくくても、ひとつずつクエリを書いていくうちに、 「あれ、自分でデータを動かせてるかも!」という楽しさに出会える世界です。
私自身も、最初はSELECTすらこわごわ打っていましたが、 小さな“できた!”を積み重ねていくうちに、だんだんSQLと仲良くなっていきました。 もし今、つまずいているところがあっても大丈夫です。 焦らず、ゆっくり、自分のペースで進めていってくださいね。
コメント