JOINとサブクエリの違いを徹底解説!初心者でもわかるSQLの選び方

こんにちは。ゆうせいです。
今回はSQLを勉強している人が必ずぶつかる壁、「JOINとサブクエリ、どっちを使えばいいの?」という疑問について、わかりやすく丁寧に解説します。


JOINとサブクエリって何が違うの?

まず、JOINとサブクエリ(副問い合わせ)は、どちらも「複数のテーブルからデータを取得する」ために使うSQLの機能です。でも、使い方も、処理の流れも、得意分野も違います。

高校のクラスで例えるなら、

  • JOINは「クラス全体を見て、あの子とこの子の情報を同時に見る」ようなもの。
  • サブクエリは「まずある子の情報を調べてから、それをもとに別の子の情報を探す」感じです。

JOIN(ジョイン)とは?

概要

JOINは、2つ以上のテーブルを結合して1つの表として扱う機能です。

主な種類

種類内容
INNER JOIN両方のテーブルに一致するデータだけ取得
LEFT JOIN左のテーブルを中心に、右がなくても取得
RIGHT JOIN右のテーブルを中心に、左がなくても取得
FULL JOIN両方のテーブルの全件を取得(DBによる)

SELECT
  employees.name,
  departments.name
FROM
  employees
JOIN
  departments ON employees.dept_id = departments.id;

→社員と部署を結びつけて表示します。


サブクエリとは?

概要

サブクエリは、クエリの中に含まれる別のクエリのことです。
「まず一部のデータを取り出し、それをもとにさらに検索する」ような時に使います。

使われ方の種類

使い方内容
WHEREの中絞り込み条件に使う
FROMの中(派生テーブル)JOINと似た形でテーブル扱いされる
SELECTの中一行だけ取り出して表示

例(WHEREの中)

SELECT name
FROM employees
WHERE dept_id = (
  SELECT id FROM departments WHERE name = '営業部'
);

→「営業部のID」をサブクエリで調べて、営業部にいる社員の名前を出す、という流れです。


JOINとサブクエリ、どっちを使うべき?

処理の考え方

JOINは同時並行処理のイメージ。サブクエリは段階的処理のイメージです。

たとえば…

  • JOIN:複数のテーブルをつなげて、一気に一覧で見たいとき
  • サブクエリ:まず条件を決めてから、それを元に次の処理をしたいとき

処理速度の違い

  • 一般的に、JOINのほうが速いことが多いです。
    • なぜなら、データベースエンジンが最適化しやすいから。
  • ただし、サブクエリのほうがシンプルに書ける場合もあるので、可読性とのバランスが大事。

JOINとサブクエリの比較表

比較項目JOINサブクエリ
データ取得方法テーブルを結合して一括取得一部を取得→それを条件に再取得
可読性条件が多いと複雑になりやすいシンプルに見える場合もある
処理速度最適化されやすく速いことが多いネストが深いと遅くなる場合がある
主な用途一覧表示や集計条件に応じた抽出や単一値の取得

数式のイメージで理解しよう

JOINの式(論理的なイメージ)

  • 「AとBをIDで結びつけたもの」:
    A × B のうち、A.id = B.id のものを選ぶ

サブクエリの式

  • 「Bから条件に合う値をとって、Aに使う」:
    A の中で B.id = 特定の値(Bから探したやつ)

数式で言うと:

  • JOIN:
    SELECT * FROM A JOIN B ON A.id = B.id
    → 「AとBを組み合わせる」
  • サブクエリ:
    SELECT * FROM A WHERE A.id = (SELECT id FROM B WHERE 条件)
    → 「まずBでidを探し、それを使ってAを検索」

まとめ:使い分けのポイント

JOINを使うべき場合

  • 複数テーブルを横に並べて見るとき
  • 一覧やレポートなど複数行の結果が必要なとき
  • パフォーマンス重視の処理

サブクエリを使うべき場合

  • 段階的に処理したいとき
  • 絞り込みの条件が複雑なロジックのとき
  • 結果が1件だけで十分なとき

今後の学習の指針

  • 実際にクエリを書いて違いを体感しましょう!
  • 同じ問題をJOINとサブクエリの2通りで解いてみる練習がおすすめです。
  • 大量データを扱うときはEXPLAINコマンドでパフォーマンスも確認してみてください。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。