PostgreSQLのFROM句サブクエリ完全入門!初心者でもわかる仮想テーブルの考え方
生徒
「WHERE句のサブクエリは少し分かってきたんですが、FROM句にもSELECTが書けるって聞いて混乱しました…」
先生
「FROM句のサブクエリは、表をその場で作ってから使うイメージです。紙の名簿をコピーして、必要な部分だけを新しい表にする感じですね。」
生徒
「表を作ってから検索するんですか?」
先生
「そうです。その一時的な表を使って、さらに条件を付けたり表示したりします。」
1. SQLとは何か?
SQLは、データベースという「表の形で情報を整理して保存する仕組み」を操作するための言葉です。データベースは、紙の名簿や一覧表をパソコンの中に保存したものだと考えると分かりやすくなります。PostgreSQLは、そのSQLを使って操作できる代表的なデータベースで、業務システムや学習用途でも広く使われています。
2. FROM句の基本的な役割
FROM句は、「どの表を使うか」を指定する場所です。名簿が何冊もある場合に、「今日はこの名簿を使います」と決める作業に似ています。通常はテーブル名を書きますが、ここにサブクエリを書くこともできます。
3. FROM句のサブクエリとは
FROM句のサブクエリは、「一時的に作られる仮の表」です。これを仮想テーブルと呼ぶこともあります。仮想とは「その場限り」という意味で、データベースに保存されるわけではありません。
先に必要なデータだけを集めた表を作り、その表を使って検索や表示を行うのがFROM句サブクエリの考え方です。
4. サンプルテーブルを確認しよう
まずは、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 | ken@example.com
5. FROM句にサブクエリを書く基本形
FROM句にサブクエリを書くときは、必ず別名を付けます。これは、その場で作った表に名前を付ける作業です。
SELECT *
FROM (
SELECT id, name, age
FROM users
) AS temp_users;
このSQLでは、usersテーブルから必要な列だけを取り出し、temp_usersという仮の表を作っています。
id | name | age
---+------------+-----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
4 | 高橋美咲 | 22
5 | 田中健一 | 40
6. 仮想テーブルに条件を付ける
FROM句で作った仮想テーブルは、普通の表と同じように扱えます。次は、二十歳以上の人だけを表示してみます。
SELECT *
FROM (
SELECT id, name, age
FROM users
) AS temp_users
WHERE age >= 20;
先に表を作り、その後で条件を指定している点がポイントです。
7. 集計結果をFROM句で使う
FROM句サブクエリは、集計結果と組み合わせると便利です。例えば、年齢が三十歳以上の人だけを集めた表を作ることができます。
SELECT name, age
FROM (
SELECT name, age
FROM users
WHERE age >= 30
) AS adult_users;
このように、「条件付きの名簿」を一度作ってから使うことで、SQLの流れが分かりやすくなります。
8. FROM句サブクエリを使うメリット
FROM句でサブクエリを使うと、処理の流れを段階的に考えられるようになります。初心者のうちは、一つのSQLで全てをやろうとせず、「表を作る」「その表を使う」と分けて考えると理解しやすくなります。
PostgreSQLではこの書き方が自然に使えるため、複雑な検索でも読みやすいSQLを書けるようになります。