情報処理試験を勉強していると、「内部結合と外部結合って何が違うの?LEFTとRIGHTは結局どっちを使えばいいの?」と混乱しがちです。

この記事では、外部結合(OUTER JOIN)の定義・3種類の違い・SQL構文を、日常の例え話と図解で整理します。

対象試験と出題頻度

外部結合は、基本情報技術者・応用情報技術者で出題されるテーマです。

SQLSELECT文に絡む結合問題の中でも、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開発
佐藤4NULL

※ 佐藤は左テーブルに存在するので行が残り、部署名はNULL

SQL構文

左外部結合のSQL文を示します。

OUTERは省略可能ですが、試験の穴埋めではOUTER付きで出題されることが多いため、省略しない形で覚えておくのが安全です。

SELECT 社員.社員名, 社員.部署ID, 部署.部署名
FROM 社員
  LEFT OUTER JOIN 部署
    ON 社員.部署ID = 部署.部署ID;

RIGHT OUTER JOINにする場合はLEFTRIGHTに変更するだけです。

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試験では、関係代数の問題で「外結合」という用語が使われることがあるため、同義であることを押さえておいてください。