MySQLサブクエリとは何かを完全解説!初心者でもわかるSQLの基本
生徒
「MySQLの勉強を始めたんですが、サブクエリって言葉が出てきて急に難しく感じました」
先生
「サブクエリは、SQLの中にさらにSQLを書く仕組みです。紙の名簿を見ながら、別の紙で条件を考えるようなイメージですよ」
生徒
「SQLの中にSQLを書くんですか?パソコンを触ったことがなくても理解できますか?」
先生
「大丈夫です。難しい言葉は使わずに、名簿や表を使って一つずつ説明します」
1. MySQLのサブクエリとは何か?
MySQLのサブクエリとは、SQL文の中に書かれる「小さなSQL文」のことです。 SQLはデータベースという「情報を表の形で保存する箱」を操作するための言葉ですが、 サブクエリは「先に調べた結果を使って、もう一度調べる」ための仕組みになります。
例えば、学校の名簿を思い浮かべてください。 まず「20歳未満の人だけを書き出す」という作業をして、 その結果を見ながら「その人たちの名前だけを見る」という二段階の作業をします。 この「先に調べる作業」がサブクエリです。
サブクエリは、SELECT文の中に丸かっこ「( )」で書きます。 見た目は少し複雑に見えますが、やっていることはとても単純です。
2. サブクエリを使わない場合の基本SQL
まずは、サブクエリを使わない普通のSQLを確認しましょう。 以下は、ユーザー情報を保存したテーブルです。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 18 | jiro@example.com
この表から「20歳未満の人」を探すSQLは次のようになります。
SELECT *
FROM users
WHERE age < 20;
このSQLは、「usersという表から、年齢が20より小さい行をすべて取り出す」 という意味です。条件が一つだけなので、とても分かりやすいですね。
id | name | age | email
---+------------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
4 | 高橋次郎 | 18 | jiro@example.com
3. サブクエリが必要になる場面とは
では、なぜサブクエリが必要になるのでしょうか。 それは「条件を先に調べないと、次の条件が決められない」ときです。
例えば、「平均年齢より若い人を調べたい」と言われた場合、 まず全員の平均年齢を計算しなければいけません。 この「平均年齢を計算するSQL」がサブクエリになります。
4. MySQLのサブクエリの基本例
実際にサブクエリを使ったSQLを見てみましょう。 まずはテーブルの状態です。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 18 | jiro@example.com
平均年齢より若い人を調べるSQLは、次のようになります。
SELECT *
FROM users
WHERE age < (
SELECT AVG(age)
FROM users
);
内側のSELECT文がサブクエリです。 この部分で平均年齢を計算し、その結果を使って外側のSQLが条件判断をしています。
id | name | age | email
---+------------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
4 | 高橋次郎 | 18 | jiro@example.com
5. サブクエリは「先に答えを作る仕組み」
サブクエリは難しく見えますが、本質はとてもシンプルです。 「先に小さな答えを作って、それを材料にして次の検索をする」 ただそれだけです。
紙の名簿で考えると、 「条件に合う人だけを別紙に書き出す」 「その別紙を見ながら、さらに調べる」 という作業と同じです。
MySQLのサブクエリは、データが増えても同じ考え方で使えます。 初心者の方は、まず「SQLの中にSQLがある」という形に慣れることが大切です。