外部結合とは?がいぶけつごう
外部結合とは、結合条件に合う相手がない行も結果に残し、相手側の列をNULLで埋める結合。どちら側を残すかで左外部結合・右外部結合・完全外部結合の3種類がある。残った行の相手側列がすべてNULLになるため、「関連を持たない行」をNULL判定で抜き出す用途にも使える。
最終更新:2026-10-06
この語が出る過去問を解く →背景
内部結合だけでは、相手がいない行が結果から静かに消える。受注のない顧客、貸出のない蔵書、担当者未定の案件は業務上は確かに存在するのに、一覧から落ちてしまい、件数が合わない集計になる。「関連が無いことも情報である」という要求に応えるために、片側の行を必ず残す結合が用意された。試験では、外部結合を使うべき設問文の言い回し(〜がない顧客も含めて)を読み取れるかが問われる。
具体例
PostgreSQLで SELECT ... FROM 顧客 LEFT OUTER JOIN 受注 ON 顧客.顧客コード = 受注.顧客コード と書けば、受注が1件もない顧客も受注側の列をNULLにして残る。両側の非対応行を残したいときはFULL OUTER JOINを使う。
試験での引っ掛け
相手側を絞り込む条件をWHERE句に書くと、NULLで埋まった行が条件に合わずに除去され、結果は内部結合と変わらなくなる。外側の表を残したままの絞り込みはON句に書く。NULL埋めされた行を選びたい条件も、= ではなく IS NULL で書く必要がある。
関連用語
出た過去問
出典:平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10(IPA)
ある月の“月末商品在庫”表と“当月商品出荷実績”表を使って、ビュー“商品別出荷実績”を定義した。このビューにSQL文を実行した結果の値はどれか。 月末商品在庫:…
正解:400
要点:外部結合で生じたNULLはWHERE条件では選ばれない
ビューは左外部結合で作られているため、出荷実績のない商品は出荷実績数がNULLになる。WHERE句の条件はNULLに対してunknownとなり行が選ばれないので、対象は出荷実績数150の商品と300の商品の2件だけとなる。それぞれの月末在庫数100と300を合計して400になる。
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問8(IPA)
“部品”表から、部品名に'N11'が含まれる部品情報(部品番号、部品名)を検索するSQL文がある。このSQL文は、検索対象の部品情報のほか、対象部品に親部品番号…
正解:B1 LEFT OUTER JOIN 部品 B2
要点:対応が無い行も残したい側を左に置いた左外部結合を使う
検索条件に合う部品は必ず結果に残しつつ、親部品が設定されていない場合は親側の列をNULLで返したい。この動作は、条件に合う側を残す左外部結合そのものである。内部結合では親部品を持たない部品が結果から消えてしまう。
出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問11(IPA)
“社員取得資格”表に対し、SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。 〔社員取得資格〕 社員コード, 資格 S001, FE S001, …
正解:ON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C1.資格 = 'FE'
要点:外部結合の右側条件はON句、左側の絞り込みはWHERE句に置く
結果には基本情報の資格を持つ社員だけが並び、応用情報を持たない社員は資格2がNULLになっている。左外部結合で残す側の絞り込み(基本情報を持つ行)はWHERE句で行い、応用情報の有無による突合せはON句に置くことで、対応が無い場合もNULLで残せる。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8(IPA)
"社員取得資格"表に対し、SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。 社員取得資格(社員コード,資格): S001,FE / S001,A…
正解:ON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C1.資格 = 'FE'
要点:外部結合の絞り込みはON句へ。WHERE句だと内部結合化する
同じ表を左外部結合し、左側にFEの行、右側に同じ社員のAPの行を対応付ける形にすればよい。結合条件をON句に書けば対応しない行も左側は残り、右側はNULLになる。そのうえでWHERE句で左側をFEの行に限定すれば、FE保有者ごとにAPの有無を並べた結果が得られる。よってアが正しい。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問6(IPA)
"文書"表、"社員"表から結果を得るSQL文のaに入れる字句はどれか。
正解:文書 LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
要点:残したい側を左に置いた左外部結合を別名で繰り返す
結果には、社員表に対応する社員がいない作成者IDの行も残り、その氏名がNULLになっている。文書表の行をすべて残す必要があるので、文書表を左側に置いた左外部結合を、作成者用と承認者用の別名で2回続けて行えばよい。これを表しているのがアである。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。