情報処理試験を勉強していると、「内部結合と外部結合って何が違うの?LEFTとRIGHTは結局どっちを使えばいいの?」と混乱しがちです。
この記事では、外部結合(OUTER JOIN)の定義・3種類の違い・SQL構文を、日常の例え話と図解で整理します。
対象試験と出題頻度
外部結合は、基本情報技術者・応用情報技術者で出題されるテーマです。
SQLのSELECT文に絡む結合問題の中でも、LEFT OUTER JOINの穴埋めやNULLの扱いを問う形式が定番化しています。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
外部結合(OUTER JOIN)とは、一言で言うと
「一方のテーブルの全行を保持したまま、もう一方のテーブルと結合し、対応する行がなければNULLで補完するSQLの結合方法」
のことです。
イメージとしては、「出席簿とテスト結果の突き合わせ」です。
内部結合(INNER JOIN)は「テストを受けた生徒」だけを一覧にする方法です。欠席者は名簿から消えます。一方、外部結合は「出席簿の全員を残し、テストを受けていない生徒の点数欄は空欄(NULL)にする」方法です。
データが欠けている側も切り捨てず、全体像を把握できるのが特長です。
📊 外部結合の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | OUTER JOIN |
| 分類 | SQLの結合操作(DML / SELECT文のFROM句で使用) |
| 3つの種類 | LEFT OUTER JOIN(左外部結合)、RIGHT OUTER JOIN(右外部結合)、FULL OUTER JOIN(完全外部結合) |
| 対になる概念 | 内部結合(INNER JOIN):両方のテーブルに一致する行だけを抽出 |
| 補完値 | 対応行がない列にはNULLが入る |
解説
関係データベースでは、正規化によってテーブルを分割するのが基本です。分割されたテーブルから必要な情報を得るには「結合」が欠かせません。
内部結合は両テーブルにキーが一致する行だけを返すため、片方にしか存在しないデータは結果から消えます。
「全員分のデータが欲しいが、一部の情報が欠けている」というケースで内部結合を使うと、本来必要な行まで消えてしまいます。この問題を解決するのが外部結合です。
LEFT・RIGHT・FULLの3種類
外部結合は「どちらのテーブルの全行を残すか」によって3種類に分かれます。
| 種類 | 基準テーブル | 動作 |
|---|---|---|
| LEFT OUTER JOIN | 左テーブル | 左テーブルの全行を残し、右テーブルから一致する行を結合。一致しない右側の列はNULL |
| RIGHT OUTER JOIN | 右テーブル | 右テーブルの全行を残し、左テーブルから一致する行を結合。一致しない左側の列はNULL |
| FULL OUTER JOIN | 両方 | 両テーブルの全行を残す。どちらかに一致しない列はNULL |
ここだけは確実に押さえてください。LEFT / RIGHTはFROM句に書いたテーブルの「記述順」で左右が決まります。テーブルの順番を入れ替えれば、LEFT OUTER JOINとRIGHT OUTER JOINは同じ結果を得られます。
図解:内部結合 vs 左外部結合
社員テーブルと部署テーブルを「部署ID」で結合する場面を例に、内部結合と左外部結合の違いを図示します。
元テーブル
社員テーブル
| 社員名 | 部署ID |
|---|---|
| 田中 | 1 |
| 鈴木 | 2 |
| 佐藤 | 4 |
部署テーブル
| 部署ID | 部署名 |
|---|---|
| 1 | 営業 |
| 2 | 開発 |
| 3 | 総務 |
INNER JOIN の結果
| 社員名 | 部署ID | 部署名 |
|---|---|---|
| 田中 | 1 | 営業 |
| 鈴木 | 2 | 開発 |
※ 佐藤(部署ID=4)は部署テーブルに対応行がないため消える
LEFT OUTER JOIN の結果
| 社員名 | 部署ID | 部署名 |
|---|---|---|
| 田中 | 1 | 営業 |
| 鈴木 | 2 | 開発 |
| 佐藤 | 4 | NULL |
※ 佐藤は左テーブルに存在するので行が残り、部署名はNULL
SQL構文
左外部結合のSQL文を示します。
OUTERは省略可能ですが、試験の穴埋めではOUTER付きで出題されることが多いため、省略しない形で覚えておくのが安全です。
SELECT 社員.社員名, 社員.部署ID, 部署.部署名 FROM 社員 LEFT OUTER JOIN 部署 ON 社員.部署ID = 部署.部署ID;
RIGHT OUTER JOINにする場合はLEFTをRIGHTに変更するだけです。
FULL OUTER JOINも同様にFULLを指定します。
内部結合との比較まとめ
| 比較項目 | 内部結合(INNER JOIN) | 外部結合(OUTER JOIN) |
|---|---|---|
| 結果に含まれる行 | 両テーブルで結合条件が一致する行のみ | 基準テーブルの全行+一致する相手の行 |
| NULLの発生 | 発生しない(一致しない行は除外されるため) | 対応行がない列にNULLが入る |
| WHERE句での代替 | FROM 表A, 表B WHERE 条件 で記述可能 | WHERE句では記述できない(JOIN構文が必須) |
では、この知識が試験でどのように問われるか見ていきましょう。
💡 外部結合の核心を3行で
・基準テーブルの全行を残し、相手側に対応がなければNULLで補完する結合方法
・LEFT / RIGHT / FULL の3種があり、FROM句に書いたテーブルの記述順で左右が決まる
・内部結合との最大の違いは「一致しない行を残すかどうか」
試験ではこう出る!
外部結合は、FE・APの科目A(午前)では結合結果の推定問題として、科目B(午後)ではSQLの穴埋め問題として繰り返し出題されています。
特にLEFT OUTER JOINの出題頻度が圧倒的に高く、RIGHT OUTER JOINやFULL OUTER JOINは午後問題で登場する程度です。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H31春 午後 問3 |
健康診断データベースのSQL穴埋め。RIGHT OUTER JOINの結果とCOUNT(*)の動作を問う | ・RIGHT OUTER JOINで右表の全行が残る ・COUNT(*)はNULL行もカウント、COUNT(列名)はNULLを除外 |
| FE H30秋 午後 問3 |
LEFT OUTER JOINの穴埋め。基準テーブルの選択とWHERE条件を問う | ・左表の全行を残す必要がある箇所にLEFT OUTER JOINを指定 ・結合後の条件指定はWHERE句 |
| AP R7春 午後 問6 |
店舗売上データベースの穴埋め。LEFT OUTER JOINとUNIONの組み合わせ | ・先に記述されたテーブルを基準にするためLEFT OUTER JOINが正解 ・UNION ALLとの組み合わせ出題 |
| AP H22春 午後 問6 |
LEFT OUTER JOINの穴埋め。NULLの発生条件を判断させる問題 | ・左表を基準に全行取得する意図を読み取る |
📝 IPA試験での出題パターン
パターン1:SQL穴埋め「○○ OUTER JOINを入れよ」(最頻出)
午後(科目B)のデータベース問題で、FROM句の空欄にLEFTかRIGHTかを選ばせる形式。「どちらのテーブルの全行を残したいか」を問題文の要件から読み取れるかがカギ。
パターン2:結合結果の推定(科目Aで頻出)
2つの表とSQL文が提示され、実行結果として正しい表を4択から選ぶ形式。FE R2免除 問28のように、WHERE句で記述された内部結合との結果の違いが問われる。
パターン3:COUNT(*)とCOUNT(列名)の違い
FE H31春 午後問3が典型。外部結合で生じるNULL行をCOUNT(*)がカウントしてしまう問題を題材に、COUNT(列名)への修正を問う。
試験ではLEFT OUTER JOINが圧倒的に多く、RIGHT OUTER JOINは「テーブルの記述順が逆になっている場合」に登場する程度です。FULL OUTER JOINは午前ではほぼ出ないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 「社員」表と「部署」表に対して次のSQL文を実行したとき、結果に含まれる行の説明として最も適切なものはどれでしょうか?SELECT 社員.社員名, 部署.部署名 FROM 社員 LEFT OUTER JOIN 部署 ON 社員.部署ID = 部署.部署ID;
- A. 社員表と部署表の両方に部署IDが存在する行だけが結合され、どちらか一方にしかない行は除外される。
- B. 部署表の全行が保持され、社員表からは結合条件に一致する行のみが結合される。一致しない社員表側の列にはNULLが入る。
- C. 社員表の全行が保持され、部署表からは結合条件に一致する行のみが結合される。一致しない部署表側の列にはNULLが入る。
正解と解説を見る
正解:C
解説:
LEFT OUTER JOINは、FROM句で左側に記述したテーブル(ここでは社員表)の全行を保持し、右側のテーブル(部署表)からは結合条件に一致する行だけを結合します。一致しない部署表側の列にはNULLが補完されます。
選択肢Aは内部結合(INNER JOIN)の説明です。内部結合は両テーブルで条件が一致する行だけを返すため、一方にしか存在しない行は結果から除外されます。選択肢Bは右外部結合(RIGHT OUTER JOIN)の説明です。RIGHT OUTER JOINでは右テーブルの全行が保持される点が、LEFT OUTER JOINとは逆です。
よくある質問(FAQ)
Q. OUTERは省略できますか?
省略できます。SQL標準では「LEFT JOIN」と書くだけで左外部結合として動作します。RIGHT JOIN、FULL JOINも同様です。ただし、IPA試験の出題や解答ではOUTER付きの「LEFT OUTER JOIN」で記述されることが多いため、OUTER付きで覚えておく方が安全です。
Q. LEFT OUTER JOINとRIGHT OUTER JOINは本質的に同じものですか?
「どちらのテーブルの全行を残すか」の方向が違うだけで、テーブルの記述順を入れ替えれば同じ結果を得られます。実務では「LEFT OUTER JOINに統一する」のが一般的です。IPA試験の午後問題でRIGHT OUTER JOINが正解になるケースは、問題文側でテーブルの記述順が「右を基準にすべき」配置になっているときに限られます。
Q. 外部結合の結果でNULLになった列をさらに条件で絞り込めますか?
絞り込めます。WHERE句で「列名 IS NULL」と指定すると、外部結合で対応行がなかった行だけを抽出できます。例えば「部署に所属していない社員の一覧」を取得するには、LEFT OUTER JOINの結果に対して「WHERE 部署.部署ID IS NULL」を追加します。この手法は実務でもデータの欠損チェックとして頻繁に使われます。
Q. 関係代数の外部結合とSQLの外部結合は同じ概念ですか?
概念としては同じです。関係代数では外部結合を「一致しないタプルもNULL値を付加して結果に含める結合演算」と定義しています。SQLのOUTER JOINはこの関係代数の外部結合をSQL構文として実装したものです。IPA試験では、関係代数の問題で「外結合」という用語が使われることがあるため、同義であることを押さえておいてください。