MySQLのFROM句サブクエリ(派生テーブル)を初心者向けに解説|SQLサブクエリの使い方と基本
生徒
「MySQLの勉強をしていたら、FROM句の中にSELECT文が書いてあるSQLを見ました。あれは何をしているんですか?」
先生
「それはサブクエリと呼ばれる書き方で、SQLの中に別のSQLを書く仕組みです。特にFROM句の中で使うときは『派生テーブル』と呼ばれます。」
生徒
「派生テーブルって、普通のテーブルと何が違うんですか?」
先生
「データベースに保存されている本物のテーブルではなく、SQLの実行中に一時的に作られる仮のテーブルです。計算結果や絞り込み結果を、いったん表として扱えるのでとても便利です。」
生徒
「なるほど。つまり途中で作る作業用の表みたいなものなんですね。」
先生
「その通りです。今回はMySQLのFROM句で使うサブクエリ(派生テーブル)の基本を、初心者でも理解できるようにゆっくり説明していきます。」
1. MySQLのサブクエリとは何か
MySQLのサブクエリとは、SQL文の中に別のSQL文を書く仕組みのことです。サブクエリは英語で「Subquery」と書き、「サブ」は小さい、「クエリ」は検索という意味があります。つまり「SQLの中で実行される小さな検索処理」という意味になります。
例えば、学校の名簿から「平均点以上の生徒」を探す場合を考えてみましょう。このとき、まず平均点を計算し、その後に平均点以上の生徒を探す必要があります。このように「先に計算して、その結果を使って検索する」というときにサブクエリが活躍します。
MySQLではサブクエリを次のような場所で使うことができます。
- SELECT句
- WHERE句
- FROM句
その中でも今回解説するのは、FROM句のサブクエリです。これはSQL初心者が少し戸惑いやすい部分ですが、仕組みを理解するとSQLの表現力が大きく広がります。
2. FROM句のサブクエリ(派生テーブル)とは
FROM句の中に書くサブクエリは、派生テーブルと呼ばれます。派生テーブルとは「SQLの実行途中で作られる一時的なテーブル」のことです。
通常のSQLでは、次のようにデータベースに保存されているテーブルをFROM句で指定します。
SELECT *
FROM users;
しかし、FROM句の中にSELECT文を書くと、その検索結果が一時的なテーブルとして扱われます。
SELECT *
FROM (
SELECT name, age
FROM users
) AS temp_users;
このように、SELECTの結果をテーブルとして扱えるのが派生テーブルです。実際のデータベースに保存されるわけではなく、SQLの実行中だけ存在します。
3. MySQLで派生テーブルを使う基本構文
MySQLでFROM句のサブクエリを使う場合、必ず別名(エイリアス)をつける必要があります。エイリアスとは「別名」のことで、SQL内でそのテーブルを呼ぶための名前になります。
基本構文は次の形になります。
SELECT *
FROM (
SELECT カラム
FROM テーブル
) AS 別名;
SQLでは、FROM句で指定されたものをテーブルとして扱います。そのため、サブクエリにも必ず名前をつけなければいけません。
これは、学校のクラス名簿に例えると理解しやすいです。例えば「3年A組の名簿をコピーして作業用の表を作る」とします。この作業用の表にも「作業用名簿」といった名前が必要になります。SQLでも同じように、仮のテーブルに名前をつける必要があります。
4. FROM句サブクエリの基本例
まずはシンプルな例を見てみましょう。ユーザーの中から20歳以上の人だけを取り出し、その結果を派生テーブルとして使います。
テーブル:users
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 | kenta@example.com
SELECT *
FROM (
SELECT id, name, age
FROM users
WHERE age >= 20
) AS adult_users;
実行結果
id | name | age
---+------------+-----
1 | 山田太郎 | 25
3 | 鈴木一郎 | 30
4 | 高橋美咲 | 22
このSQLでは、最初に20歳以上のユーザーを検索しています。その結果をadult_usersという名前の派生テーブルとして扱い、そこからデータを取得しています。
5. 集計結果を派生テーブルとして使う
FROM句のサブクエリは、集計結果と組み合わせると非常に便利になります。例えば、ユーザーの平均年齢を計算し、その平均以上のユーザーを取得するようなSQLを書くことができます。
テーブル:users
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 | kenta@example.com
SELECT *
FROM (
SELECT name, age
FROM users
) AS user_list
WHERE age >= (
SELECT AVG(age)
FROM users
);
実行結果
name | age
-----------+-----
山田太郎 | 25
鈴木一郎 | 30
このように、サブクエリを組み合わせることで「計算した結果をもとに検索するSQL」を作ることができます。
6. 派生テーブルでデータを整理してから検索する
派生テーブルは、データを整理してから検索する場合にも役立ちます。例えば、年齢を10歳単位で分類するような処理も可能です。
テーブル:users
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 | kenta@example.com
SELECT name, age_group
FROM (
SELECT
name,
FLOOR(age / 10) * 10 AS age_group
FROM users
) AS age_table;
実行結果
name | age_group
-----------+-----------
山田太郎 | 20
佐藤花子 | 10
鈴木一郎 | 30
高橋美咲 | 20
伊藤健太 | 10
このSQLでは、年齢を10歳単位のグループに変換しています。サブクエリの中で計算し、その結果を新しいテーブルとして扱っています。
まとめ
この記事では、MySQLにおけるFROM句サブクエリ、つまり派生テーブルの基本的な仕組みと使い方について学びました。SQLを学び始めたばかりの人にとっては、SQLの中にさらにSQLを書くという構造は少し難しく感じるかもしれません。しかし、仕組みを理解すると、SQLでできるデータ操作の幅が大きく広がり、データベースを効率よく扱えるようになります。
MySQLのサブクエリとは、SQL文の中に別のSQL文を書く仕組みのことです。サブクエリはSELECT句、WHERE句、FROM句などさまざまな場所で利用できますが、今回解説したのはFROM句で使うサブクエリです。このFROM句のサブクエリは「派生テーブル」と呼ばれ、SQLの実行中に一時的に作られる仮のテーブルとして扱われます。
通常のSQLでは、FROM句にはデータベースに保存されているテーブル名を指定します。しかし、FROM句の中にSELECT文を書くと、その検索結果が一時的なテーブルとして扱われます。このような仕組みを利用すると、複雑な検索処理を段階的に整理しながらSQLを書くことができるようになります。特にMySQLのサブクエリや派生テーブルは、データを加工してから別の検索に利用する場合に非常に役立ちます。
また、FROM句のサブクエリを使用する際には必ずエイリアスを付ける必要があります。エイリアスとは、SQL内で使用するテーブルの別名のことです。派生テーブルは実際のテーブルではなく、一時的に作られるテーブルなので、SQLの中で識別するための名前を付ける必要があります。エイリアスを付けないと、MySQLではエラーになってしまうため注意が必要です。
さらに、派生テーブルはデータの整理や集計処理と組み合わせることで非常に強力なSQLを書くことができます。例えば、平均値を計算してからその結果を使って検索したり、年齢をグループ分けしたり、ランキングのようなデータ処理を行うことも可能です。実際の業務システムやデータ分析では、このようなSQLの書き方がよく使われます。
例えば、ユーザーの中から二十歳以上のユーザーを抽出し、その結果を派生テーブルとして扱う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 | kenta@example.com
SELECT *
FROM (
SELECT id, name, age
FROM users
WHERE age >= 20
) AS adult_users;
id | name | age
---+------------+-----
1 | 山田太郎 | 25
3 | 鈴木一郎 | 30
4 | 高橋美咲 | 22
このように、MySQLのFROM句サブクエリを使うと、検索結果を一度テーブルとして扱い、その後さらに条件を追加したり、別の処理を行うことができます。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 | kenta@example.com
SELECT name, age_group
FROM (
SELECT
name,
FLOOR(age / 10) * 10 AS age_group
FROM users
) AS age_table;
name | age_group
-----------+-----------
山田太郎 | 20
佐藤花子 | 10
鈴木一郎 | 30
高橋美咲 | 20
伊藤健太 | 10
このように、MySQLのFROM句サブクエリはデータベース操作の中でも非常に重要なテクニックの一つです。SQLサブクエリを理解することで、複雑なデータ検索やデータ分析、レポート作成、統計処理などにも応用できるようになります。SQL初心者の段階では、まずは簡単な派生テーブルから練習して、徐々に複雑なSQLを書けるようになっていくことが大切です。
MySQLのサブクエリ、FROM句サブクエリ、派生テーブル、エイリアス、SQL集計処理などの基本をしっかり理解しておくと、データベース設計やシステム開発の現場でも役立つ知識になります。SQLは最初は難しく感じるかもしれませんが、一つ一つ仕組みを理解していけば確実に使いこなせるようになります。
生徒
今日の学習で、MySQLのサブクエリについて理解が深まりました。特にFROM句の中にSELECT文を書くと、派生テーブルという一時的なテーブルになるという仕組みがとても印象に残りました。
先生
とても大切なポイントに気付きましたね。MySQLのFROM句サブクエリは、SQLの中級レベルでよく使われるテクニックです。途中の検索結果を一時テーブルとして扱えるので、SQLを整理しながら書くことができます。
生徒
普通のテーブルと違って、SQLの実行中だけ存在するというところが面白かったです。作業用のテーブルを作っているような感覚ですね。
先生
その通りです。派生テーブルは一時的な作業用テーブルのようなものです。SQLで複雑な検索をする場合は、途中結果を整理することがとても大切になります。
生徒
それから、エイリアスを必ず付けないといけないというルールも覚えました。派生テーブルにも名前を付けないとSQLが書けないんですね。
先生
そうです。MySQLではFROM句のサブクエリには必ずエイリアスが必要です。このルールはSQLを書くときによく出てくるので覚えておきましょう。
生徒
今日学んだMySQLのサブクエリ、FROM句サブクエリ、派生テーブル、エイリアスの考え方をしっかり復習して、もっと複雑なSQLにも挑戦してみたいと思います。
先生
それは素晴らしい姿勢ですね。SQLは練習すればするほど理解が深まります。まずはシンプルなサブクエリから練習して、徐々に集計処理やデータ分析にも応用していきましょう。