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

MySQLサブクエリ完全入門|SELECT句で使う書き方と仕組みを初心者向けに徹底解説

MySQLのSELECT句で使うサブクエリの例
MySQLのSELECT句で使うサブクエリの例

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

生徒

「MySQLでサブクエリって聞いたんですが、クエリの中にクエリを書くってどういうことですか?」

先生

「簡単に言うと、先に調べた結果を使って、もう一度データを探す方法です。紙の名簿を見ながら、別の条件で絞り込むイメージですね。」

生徒

「パソコンをあまり触ったことがなくても理解できますか?」

先生

「大丈夫です。表を目で見て確認しながら、順番に説明します。計算問題を解く感覚で読めますよ。」

1. MySQLとSELECT文の基本

1. MySQLとSELECT文の基本
1. MySQLとSELECT文の基本

MySQLは、たくさんの情報を表の形で保存して管理するデータベースです。データベースとは、住所録や名簿、会員リストのようなものを、コンピューターの中で整理して保管する箱だと思ってください。

SELECT文は、その表の中から必要なデータを取り出す命令です。紙の名簿から「この人の名前だけ見たい」と指で追いかける作業を、パソコンにお願いするイメージになります。

2. サブクエリとは何かをやさしく理解しよう

2. サブクエリとは何かをやさしく理解しよう
2. サブクエリとは何かをやさしく理解しよう

サブクエリとは、SQL文の中に書く、もう一つのSQL文のことです。先に小さな調査をして、その結果を使って本命の調査を行います。

たとえば「平均年齢を調べて、その平均より若い人だけを探す」といった場合、先に平均年齢を計算し、その数値を使って条件を決めます。このときに使われるのがサブクエリです。

3. サンプルで使うusersテーブルを確認

3. サンプルで使うusersテーブルを確認
3. サンプルで使うusersテーブルを確認

ここでは、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  | 田中健太   | 40  | kenta@example.com

4. SELECT句で使うシンプルなサブクエリ例

4. SELECT句で使うシンプルなサブクエリ例
4. SELECT句で使うシンプルなサブクエリ例

まずは一番基本的なサブクエリの例です。平均年齢を求めて、その平均より年齢が高い人を探します。


SELECT name, age
FROM users
WHERE age > (
    SELECT AVG(age)
    FROM users
);

内側のSELECT文が先に実行され、年齢の平均が計算されます。その結果を使って、外側のSELECT文が条件を判断します。


name       | age
-----------+-----
鈴木一郎 | 30
田中健太 | 40

5. 数字を条件に使うサブクエリの考え方

5. 数字を条件に使うサブクエリの考え方
5. 数字を条件に使うサブクエリの考え方

サブクエリは、数字を一つ返す場合によく使われます。平均値、最大値、最小値などを調べるときに便利です。

ここでは、最年長の年齢を調べ、その年齢と同じ人を探します。


SELECT name, age
FROM users
WHERE age = (
    SELECT MAX(age)
    FROM users
);

name       | age
-----------+-----
田中健太 | 40

6. 複数行を返すサブクエリとINの使い方

6. 複数行を返すサブクエリとINの使い方
6. 複数行を返すサブクエリとINの使い方

サブクエリは、一行だけでなく複数の行を返すこともあります。その場合はINという条件を使います。

ここでは、20代の人の年齢一覧をサブクエリで取得し、それに当てはまる人を表示します。


SELECT name, age
FROM users
WHERE age IN (
    SELECT age
    FROM users
    WHERE age BETWEEN 20 AND 29
);

name       | age
-----------+-----
山田太郎 | 25
高橋美咲 | 22

7. サブクエリを使うと何が便利なのか

7. サブクエリを使うと何が便利なのか
7. サブクエリを使うと何が便利なのか

サブクエリを使うと、SQLを分けて考えられるため、条件が複雑でも読みやすくなります。紙に下書きをしてから清書する感覚に近いです。

初心者のうちは、まず「内側のSELECTだけを実行すると何が出るか」を考えると、理解しやすくなります。

8. SELECT句のサブクエリでつまずきやすい点

8. SELECT句のサブクエリでつまずきやすい点
8. SELECT句のサブクエリでつまずきやすい点

よくある間違いは、サブクエリが返す結果の数を意識しないことです。一つの値なのか、複数行なのかによって、記述方法が変わります。

また、かっこを忘れたり、サブクエリの中で使える列を間違えたりするとエラーになります。エラーが出たら、内側のSQLだけを確認する習慣をつけましょう。

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