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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年5月23日JOINとサブクエリの違いを徹底解説!初心者でもわかるSQLの選び方
山崎講師2025年5月22日相関サブクエリと非相関(普通の)サブクエリの違いをわかりやすく解説!
山崎講師2025年5月22日【保存版】新人エンジニアのためのMySQL Workbench便利Tips10選!
山崎講師2025年5月21日【初心者向け】MySQLと標準SQLの違い10選をわかりやすく解説!