MySQLのWHERE句サブクエリ完全解説|初心者でもわかるデータベース検索の基本
生徒
「MySQLで検索するときに、サブクエリって言葉を見たんですが、難しそうでよく分かりません…」
先生
「サブクエリは、SQLの中でさらにSQLを使う方法です。条件を細かく指定したいときに役立ちます。」
生徒
「SQLの中にSQLを書くって、初心者でも理解できますか?」
先生
「大丈夫です。名簿を見ながら『この条件に当てはまる人だけ』を探す感覚で説明します。」
1. WHERE句とサブクエリの関係を知ろう
MySQLのWHERE句は、データベースの中から必要なデータだけを探すための条件を書く場所です。例えば、年齢が二十歳以上の人だけを表示したい場合などに使います。サブクエリとは、そのWHERE句の条件の中で、さらに別のSQLを使って条件を作る方法です。少し難しく聞こえますが、「条件を決めるために、もう一度表を見る」と考えると分かりやすくなります。
プログラミング未経験の人は、学校の名簿を想像してください。まず全員の名簿があり、その中から特定の条件の人だけを探します。さらに「別の条件表」を使って探すのがサブクエリです。
2. 例で使うusersテーブルを確認しよう
ここではMySQL初心者でも分かりやすいように、usersというシンプルなテーブルを使います。このテーブルには、会員の情報が入っていると考えてください。SQLを実行する前のテーブルの中身は次のようになっています。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 22 | misaki@example.com
5 | 田中健一 | 17 | ken@example.com
このような表がデータベースに保存されており、MySQLを使って必要な情報を検索していきます。
3. サブクエリを使わない基本的なWHERE句
まずはサブクエリを使わない、普通のWHERE句から確認しましょう。これはSQLの基本中の基本です。年齢が二十歳未満の人を探すSQLは次のように書きます。
SELECT *
FROM users
WHERE age < 20;
このSQLを実行すると、条件に合うレコードだけが表示されます。
id | name | age | email
---+----------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
5 | 田中健一 | 17 | ken@example.com
WHERE句は「どの行を表示するか」を決める大切な役割を持っています。
4. WHERE句で使うサブクエリの基本形
ここからが本題です。サブクエリとは、SQLの中に書く小さなSQLのことです。WHERE句の中に書くことで、「別の検索結果」を条件として使えます。例えば「平均年齢よりも年上の人」を探したい場合、平均年齢を先に計算する必要があります。
SELECT *
FROM users
WHERE age > (
SELECT AVG(age)
FROM users
);
このSQLでは、かっこ()の中がサブクエリです。先に平均年齢を計算し、その結果を使ってWHERE句で比較しています。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 22 | misaki@example.com
5. INを使ったWHERE句サブクエリ
WHERE句のサブクエリでは、INというキーワードもよく使われます。INは「この中に含まれているかどうか」を調べる命令です。例えば、未成年の人のIDをサブクエリで取得し、その人たちの情報を表示することができます。
SELECT *
FROM users
WHERE id IN (
SELECT id
FROM users
WHERE age < 20
);
サブクエリで「年齢が二十歳未満のID一覧」を作り、それを条件にしています。
id | name | age | email
---+----------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
5 | 田中健一 | 17 | ken@example.com
6. サブクエリは先に実行される
MySQLでは、サブクエリは外側のSQLよりも先に実行されます。つまり、まず条件を作り、その結果を使ってメインの検索を行います。これは料理で例えると、「先に下ごしらえをしてから調理する」イメージです。
初心者のうちは、サブクエリの部分だけを単独で実行してみると理解しやすくなります。どんな結果が返るのかを確認してから、全体のSQLを見ると混乱しにくくなります。
7. サブクエリを使うときの注意点
WHERE句でサブクエリを使うと便利ですが、注意点もあります。サブクエリは処理が増えるため、データが多いと動作が遅くなることがあります。また、サブクエリの結果が一つなのか、複数なのかを意識することも大切です。
初心者のうちは、「条件を分かりやすく書くための道具」としてサブクエリを使う意識を持つと、SQLの理解が深まります。
8. WHERE句サブクエリは検索を柔軟にする
MySQLのWHERE句で使うサブクエリを覚えると、データベース検索の幅が一気に広がります。単純な条件だけでなく、「別の結果を元にした条件」を作れるようになります。これは、実務でも非常によく使われる考え方です。
最初は難しく感じても、名簿や表を使ったイメージを忘れずに、少しずつSQLに慣れていくことが大切です。