カテゴリ: PostgreSQL 更新日: 2026/01/25

PostgreSQLのSELECT内サブクエリ完全入門!初心者でもわかる書き方と使いどころ

PostgreSQLでSELECT内にサブクエリを書く方法
PostgreSQLでSELECT内にサブクエリを書く方法

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

生徒

「サブクエリはWHEREで使うものだと思っていたら、SELECTの中にも書けると聞きました。本当にそんなことができるんですか?」

先生

「できますよ。SELECTの中にサブクエリを書くと、各行ごとに計算した結果を一緒に表示できるんです。」

生徒

「各行ごとに計算するって、ちょっと難しそうです…」

先生

「名簿に“平均との差”を書き足すようなイメージで考えると分かりやすいですよ。」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースと呼ばれる「たくさんの情報を表の形で保存する箱」を操作するための言葉です。データベースは、紙の名簿や表をそのままパソコンの中に入れたものだと考えると理解しやすくなります。PostgreSQLは、そのSQLを使って操作できる代表的なデータベースで、会員管理や売上管理など、身近な場面で広く使われています。

2. SELECT内にサブクエリを書くとは

2. SELECT内にサブクエリを書くとは
2. SELECT内にサブクエリを書くとは

これまでのサブクエリは、WHERE句で条件を決めるために使うものが中心でした。しかし、PostgreSQLではSELECT句の中にもサブクエリを書くことができます。これは「表示する項目そのものを、別のSQLで計算する」という考え方です。

例えるなら、名簿の横に「クラスの平均点」や「平均との差」を新しい列として書き足すようなものです。元の名簿を変えずに、追加情報を表示できるのが大きな特徴です。

3. サブクエリの基本的な形

3. サブクエリの基本的な形
3. サブクエリの基本的な形

SELECT内に書くサブクエリも、基本はカッコで囲みます。注意点として、SELECT内のサブクエリは「1つの値」を返す必要があります。複数行が返るとエラーになるため、平均や合計などの集計関数と一緒に使われることが多いです。


SELECT
    name,
    age,
    (SELECT AVG(age) FROM users) AS average_age
FROM users;

このSQLでは、サブクエリで平均年齢を計算し、その結果を全員分の行に表示しています。

4. テーブル例で仕組みを理解する

4. テーブル例で仕組みを理解する
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

この表に「全体の平均年齢」を一緒に表示してみます。


SELECT
    name,
    age,
    (SELECT AVG(age) FROM users) AS average_age
FROM users;

name       | age | average_age
-----------+-----+-------------
山田太郎   | 25  | 27.2
佐藤花子   | 19  | 27.2
鈴木一郎   | 30  | 27.2
高橋美咲   | 22  | 27.2
田中健一   | 40  | 27.2

サブクエリは一度だけ平均を計算し、その結果がすべての行に表示されています。

5. 各行と関係するサブクエリ

5. 各行と関係するサブクエリ
5. 各行と関係するサブクエリ

SELECT内のサブクエリは、外側の行の値を使うこともできます。これを使うと、「その人の年齢が平均より高いか低いか」といった比較結果を表示できます。


SELECT
    name,
    age,
    age - (SELECT AVG(age) FROM users) AS diff_from_average
FROM users;

この例では、平均年齢との差を計算しています。プラスなら平均より年上、マイナスなら年下だと一目で分かります。

6. SELECT内サブクエリを使う場面

6. SELECT内サブクエリを使う場面
6. SELECT内サブクエリを使う場面

SELECT内にサブクエリを書く方法は、一覧表に「補足情報」を付けたいときに便利です。別の表を結合しなくても、ちょっとした計算結果や全体の数値を表示できます。初心者のうちは、まず「全体の平均」「合計」「件数」を一緒に表示する使い方を覚えると理解が深まります。

難しく感じたときは、「この列はどうやって計算しているのか」を紙に書き出し、先に計算する部分がサブクエリだと考えると整理しやすくなります。

7. PostgreSQLで安心して使うためのポイント

7. PostgreSQLで安心して使うためのポイント
7. PostgreSQLで安心して使うためのポイント

PostgreSQLでは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のLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLのSELECT内サブクエリ完全入門!初心者でもわかる書き方と使いどころ