カテゴリ: MySQL 更新日: 2026/01/27

MySQLのWHERE句サブクエリ完全解説|初心者でもわかるデータベース検索の基本

MySQLのWHERE句で使うサブクエリの基本
MySQLのWHERE句で使うサブクエリの基本

先生と生徒の会話形式で理解しよう

生徒

「MySQLで検索するときに、サブクエリって言葉を見たんですが、難しそうでよく分かりません…」

先生

「サブクエリは、SQLの中でさらにSQLを使う方法です。条件を細かく指定したいときに役立ちます。」

生徒

「SQLの中にSQLを書くって、初心者でも理解できますか?」

先生

「大丈夫です。名簿を見ながら『この条件に当てはまる人だけ』を探す感覚で説明します。」

1. WHERE句とサブクエリの関係を知ろう

1. WHERE句とサブクエリの関係を知ろう
1. WHERE句とサブクエリの関係を知ろう

MySQLのWHERE句は、データベースの中から必要なデータだけを探すための条件を書く場所です。例えば、年齢が二十歳以上の人だけを表示したい場合などに使います。サブクエリとは、そのWHERE句の条件の中で、さらに別のSQLを使って条件を作る方法です。少し難しく聞こえますが、「条件を決めるために、もう一度表を見る」と考えると分かりやすくなります。

プログラミング未経験の人は、学校の名簿を想像してください。まず全員の名簿があり、その中から特定の条件の人だけを探します。さらに「別の条件表」を使って探すのがサブクエリです。

2. 例で使うusersテーブルを確認しよう

2. 例で使うusersテーブルを確認しよう
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句

3. サブクエリを使わない基本的なWHERE句
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句で使うサブクエリの基本形

4. 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句サブクエリ

5. INを使ったWHERE句サブクエリ
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. サブクエリは先に実行される

6. サブクエリは先に実行される
6. サブクエリは先に実行される

MySQLでは、サブクエリは外側のSQLよりも先に実行されます。つまり、まず条件を作り、その結果を使ってメインの検索を行います。これは料理で例えると、「先に下ごしらえをしてから調理する」イメージです。

初心者のうちは、サブクエリの部分だけを単独で実行してみると理解しやすくなります。どんな結果が返るのかを確認してから、全体のSQLを見ると混乱しにくくなります。

7. サブクエリを使うときの注意点

7. サブクエリを使うときの注意点
7. サブクエリを使うときの注意点

WHERE句でサブクエリを使うと便利ですが、注意点もあります。サブクエリは処理が増えるため、データが多いと動作が遅くなることがあります。また、サブクエリの結果が一つなのか、複数なのかを意識することも大切です。

初心者のうちは、「条件を分かりやすく書くための道具」としてサブクエリを使う意識を持つと、SQLの理解が深まります。

8. WHERE句サブクエリは検索を柔軟にする

8. WHERE句サブクエリは検索を柔軟にする
8. WHERE句サブクエリは検索を柔軟にする

MySQLのWHERE句で使うサブクエリを覚えると、データベース検索の幅が一気に広がります。単純な条件だけでなく、「別の結果を元にした条件」を作れるようになります。これは、実務でも非常によく使われる考え方です。

最初は難しく感じても、名簿や表を使ったイメージを忘れずに、少しずつSQLに慣れていくことが大切です。

カテゴリの一覧へ
新着記事
New1
MySQL
MySQLのWHERE句でNOT条件を指定する方法を徹底解説!初心者向けSQL条件検索ガイド
New2
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New3
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New4
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎