← ブログ一覧に戻る
サブクエリ vs JOIN どちらを使うべきか【SQL中級】
更新:

サブクエリ vs JOIN どちらを使うべきか【SQL中級】

サブクエリとは

サブクエリとは、クエリの中に別のクエリを入れ子にしたものです。括弧 () の中にSELECT文を書きます。

-- 平均給与より高い給与の社員を取得
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

サブクエリをブラウザで実際に書いてみよう

SQLLearnのサブクエリレッスンでは、段階的な練習問題でサブクエリの書き方を身につけられます。

無料で今すぐ練習する →

同じ結果をJOINで書く

-- 注文したことがある顧客を取得(サブクエリ版)
SELECT name FROM customers
WHERE id IN (SELECT customer_id FROM orders);

-- JOINで書く
SELECT DISTINCT c.name
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id;

サブクエリが向いているケース

  • 集計結果との比較:AVG・MAX・MINなどの集計値と比較する場合
  • EXISTS句:「〜が存在するかどうか」を確認する場合
  • 可読性が高い場合
-- 一度も注文していない顧客を取得(NOT EXISTS)
SELECT name FROM customers c
WHERE NOT EXISTS (
  SELECT 1 FROM orders o WHERE o.customer_id = c.id
);

JOINが向いているケース

  • 複数のカラムを結合テーブルから取得する場合
  • パフォーマンスが求められる場合
  • 外部キーで結びついたテーブルを扱う場合

パフォーマンスの観点

一般的にサブクエリは行ごとに繰り返し実行される場合があり、大量データでは遅くなることがあります。JOINはデータベースが最適化しやすくインデックスを活用できます。

ただし現代のPostgreSQLはサブクエリも最適化するため、少量データであれば体感差はほぼありません。まずは可読性を優先して書き、遅い場合にJOINへの書き換えを検討しましょう。

使い分けの結論

  • 集計値との比較・EXISTSチェック → サブクエリ
  • 別テーブルのカラムを取得したい → JOIN
  • 迷ったら読みやすい方を選ぶ

サブクエリとJOINを実際に比べてみよう

SQLLearnでは中級レッスンでサブクエリを実際に書いて実行できます。JOINとの違いをブラウザ上で体感してください。

無料で今すぐ練習する →