用語比較
内部結合と外部結合の違い
内部結合(INNER JOIN)は、結合条件に一致する行の組み合わせだけを残す結合方法です。外部結合にはLEFT・RIGHT・FULLの種類がありますが、このページはPostgreSQL公式文書で挙動が確認できているLEFT OUTER JOINに絞って解説します。LEFT OUTER JOINは、内部結合の結果に加えて、右表に一致行がない左表の各行を、右表側をNULLの1行として残します。
試験では、結合条件に一致しない行を結果から外すか、それとも残すかを先に見ます。一致する行だけを残すなら内部結合、一致しない左表の行もNULLで補って残すならLEFT OUTER JOINの外部結合と、一致しない行の扱いで切り分けます。
このページは、内部結合と外部結合を「どちらも複数のテーブルをつなげる操作」とまとめて覚えてしまった人を対象にしています。結合条件に一致しない行が結果に残るかどうかを、表の行数を実際に数える例から確認し、内部結合とLEFT OUTER JOINの違いを一続きで判断します。
この記事の目次
この記事の根拠と出典
本文の主要なセクションでは、公式一次資料と照合した内容と編集部の整理を、見出しの下のラベルで区別しています。 試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-07-12。
結論
内部結合(INNER JOIN)
結合条件に一致する行の組み合わせだけを結果に残す。一致しない行は結果に含まれない。
外部結合(LEFT OUTER JOIN)
内部結合の結果に加えて、右表に一致行がない左表の各行を、右表側をNULLの1行として残す。
違いを表で確認
| 比較軸 | 内部結合(INNER JOIN) | 外部結合(LEFT OUTER JOIN) |
|---|---|---|
| 一致しない行の扱い | 結果から除外する | 右表側をNULLで補って残す(左表の行が基準) |
| 結果の行数 | 結合条件を満たす組み合わせの数と一致する | 内部結合の結果行数に、一致しなかった左表の行数を足した数になる |
| 試験で見る語 | 一致、条件、組み合わせ | NULL、欠損、一致しない行を残す |
| 本記事が扱う範囲 | INNER JOIN全般 | LEFT OUTER JOINの挙動のみ(RIGHT・FULL OUTER JOINは公式文書で挙動を確認できていないため対象外) |
どこで迷っているかを切り分ける
内部結合と外部結合を『どちらもテーブルをつなげる操作』とまとめて覚える初学者
内部結合は結合条件に一致する行の組み合わせだけを残し、一致しない行は結果から消えます。外部結合(LEFT OUTER JOIN)は、それに加えて右表に一致行がない左表の行も、右表側をNULLで補って残します。『つなげる』という動作は同じでも、一致しない行を消すか残すかが違います。
結果の行数を数える問題で戸惑う人
内部結合の結果行数は、結合条件を満たす組み合わせの数そのものです。LEFT OUTER JOINの結果行数は、その内部結合の結果行数に、右表と一致しなかった左表の行の数を足した数になります。表の行数を実際に書き出して数えれば、暗記に頼らず答えが出ます。
外部結合ならどのテーブルでも全行残ると思い込む再受験者
LEFT OUTER JOINで全行が残るのは左表側だけで、右表のうち左表と一致しなかった行は結果に現れません。RIGHT OUTER JOIN・FULL OUTER JOINの挙動は本記事で公式文書と照合した範囲の外のため、出題されたら公式教材で別途確認してください。
具体例で使い分ける
例 1
左表の行が右表と一致しない場合(1対0)
顧客テーブルに顧客A・顧客B・顧客Cの3行があり、注文テーブルには顧客Aの注文が1件、顧客Bの注文が1件あるが、顧客Cの注文は1件もない場合です。
- 内部結合では、結合条件(顧客ID一致)を満たす組み合わせだけが残るため、顧客A×注文1行、顧客B×注文1行の合計2行になり、注文のない顧客Cは結果に現れません。
- LEFT OUTER JOINでは、この2行に加えて、右表(注文テーブル)に一致行がない顧客Cの行が、注文側をNULLで補った1行として残ります。
- 結果として、内部結合は2行、LEFT OUTER JOINは2行+1行=3行になります。
結論: 一致しない顧客Cの行を結果から消すなら内部結合、NULLで補って残すならLEFT OUTER JOINです。
例 2
左表の1行が右表の複数行と一致する場合(1対多)
顧客テーブルに顧客A・顧客Bの2行があり、注文テーブルには顧客Aの注文が2件、顧客Bの注文が0件ある場合です。
- 内部結合では、顧客Aの行が一致する注文の件数だけ複製され2行になり、注文のない顧客Bは結果に現れないため、合計2行です。
- LEFT OUTER JOINでは、この2行に加えて、注文が無い顧客Bの行が注文側をNULLで補った1行として残ります。
- 結果として、内部結合は2行、LEFT OUTER JOINは2行+1行=3行になります。
結論: 左表の1行が右表の複数行と一致する場合、内部結合・LEFT OUTER JOINとも一致した組み合わせの数だけ行が複製される点は共通で、違いは一致しなかった左表の行を残すかどうかです。
問題文から答えを選ぶ手順
- 1
結合条件を確認する
どの列を基準に2つのテーブルを結びつけるかを確認します。
- 2
一致しない行をどう扱うか確認する
結合条件に一致しない行を結果から除外するなら内部結合、右表に一致行がない左表の行も残すならLEFT OUTER JOINです。
- 3
表の行数を実際に数える
内部結合の結果行数は一致した組み合わせの数、LEFT OUTER JOINの結果行数はそれに一致しなかった左表の行数を足した数として、具体的な行を書き出して数えます。
- 4
RIGHT・FULL OUTER JOINは範囲外として扱う
本記事で公式文書と照合したのはLEFT OUTER JOINの挙動だけのため、RIGHT・FULL OUTER JOINが問われたら公式教材で別途確認します。
試験での見分け方
- 1結合条件に一致する行の組み合わせだけを残すなら内部結合(INNER JOIN)。
- 2右表に一致行がない左表の行も、右表側をNULLで補って残すなら外部結合のLEFT OUTER JOIN。
- 3内部結合の結果行数は、結合条件を満たす組み合わせの数と一致する。
- 4LEFT OUTER JOINの結果行数は、内部結合の結果行数に、一致しなかった左表の行数を足したものになる。
- 5本記事で確認しているのはLEFT OUTER JOINの動作で、RIGHT OUTER JOIN・FULL OUTER JOINの挙動は扱わない。
誤答しやすい選択肢
内部結合と外部結合を『どちらも表をつなげる操作』とまとめて覚える
修正: 一致しない行を結果から消すか、NULLで補って残すかという扱いの違いを確認します。
外部結合ならどのテーブルの行も必ず全部残ると思う
修正: LEFT OUTER JOINで全行が残るのは左表側だけです。右表のうち左表と一致しなかった行は結果に現れません。
結合条件を確認せずに行数を数えようとする
修正: 先にどの列を基準に結合するかを確認してから、一致する組み合わせを書き出して数えます。
RIGHT・FULL OUTER JOINも同じ理屈で即答する
修正: 本記事で確認しているのはLEFT OUTER JOINの挙動のみです。RIGHT・FULL OUTER JOINは公式教材で個別に確認します。
確認問題
Q1顧客3行・注文2件(顧客Cの注文なし)を内部結合した結果は何行?
答え: 2行
結合条件に一致する顧客A・顧客Bの組み合わせだけが残り、注文のない顧客Cは結果に含まれません。
Q2同じ顧客3行・注文2件をLEFT OUTER JOINした結果は何行?
答え: 3行
内部結合の2行に加えて、注文が無い顧客Cの行が右表側NULLの1行として残ります。
Q3LEFT OUTER JOINの結果行数を求める式は?
答え: 内部結合の結果行数+一致しなかった左表の行数
一致した組み合わせの数に、右表と一致しなかった左表の行の数を足すことで、LEFT OUTER JOINの結果行数になります。
到達チェック
- 内部結合を『結合条件に一致する行の組み合わせだけを残す』として説明できる
- LEFT OUTER JOINを『一致しない左表の行もNULLで補って残す』として説明できる
- 内部結合とLEFT OUTER JOINの結果行数を、具体例で実際に数えられる
- LEFT OUTER JOINで全行が残るのは左表側だけだと説明できる
- RIGHT・FULL OUTER JOINは本記事の確認範囲外だと認識している
関連ページで確認する
よくある質問
Q内部結合と外部結合はどちらもSQLの結合方法?
はい。どちらもSQLの結合方法ですが、内部結合は一致する行だけを残し、LEFT OUTER JOINの外部結合は一致しない左表の行もNULLで補って残すという扱いの違いがあります。
Q外部結合にはLEFT以外もある?この記事はどこまで扱う?
外部結合にはLEFT・RIGHT・FULLがありますが、本記事はPostgreSQL公式文書で挙動を確認できているLEFT OUTER JOINの解説に限ります。RIGHT・FULL OUTER JOINの内容には触れていません。
Q結果の行数はどう数える?
内部結合は結合条件を満たす組み合わせの数、LEFT OUTER JOINはその数に一致しなかった左表の行数を足した数になります。具体的な行を書き出して数えると確実です。
Q試験ではどちらを先に確認する?
結合条件に一致しない行を結果から除外するか、それとも残すかを先に確認します。除外するなら内部結合、残すならLEFT OUTER JOINです。
執筆: ミナト編集部(運営者情報を見る)