戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2022年 午前206


問題文

“文書”表、“社員”表から結果を得るSQL文のaに入れる字句はどれか。
データベーススペシャリスト 2022年 午前2 問06の問題画像

選択肢

文書 LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID
    LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
(正解)
文書 RIGHT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID
    RIGHT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
文書、社員 A, 社員 B 
    LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID
    LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
文書、社員 A, 社員 B 
    WHERE 文書.作成者ID = A.社員ID AND 文書.承認者ID = B.社員ID

🔒 解説は解答すると表示されます

LEFT OUTER結合【午前2解説】

正解の理由

出力結果を見ると、文書表のすべての行(文書ID 1〜4)が保持されており、作成者ID 500 に対応する社員が存在しない行(文書ID 4)では作成者氏名が NULL になっています。一方、承認者が社員に存在する場合は氏名が表示されています。これは「左側の表(文書)を全行保持しつつ、社員表は一致する行があれば結合する」動作をする LEFT OUTER JOIN の動きと一致します。したがって正しい句は に示された LEFT OUTER JOIN を並べる構造です。

解法ステップ

  1. 結果の特徴を確認する
    • 文書ID 4 が結果にあり、作成者氏名が NULL → 文書表の行が削られていない。
  2. どちらの表を優先(全行保持)しているか判定
    • 文書表の行がすべて残っているので、「文書」を優先する(=左側に置く)。
  3. 必要な結合の種類を決定
    • 優先表を保持しつつ対応する社員情報だけ取りたい → LEFT OUTER JOIN を用いる。
  4. 同一テーブルを2回使うための別名を付与
    • 作成者と承認者それぞれで社員表を参照するので A, B のような別名を付けて2回結合する。
  5. SQL を組み立てる
    • FROM 文書 LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID
以下は正しい SQL の例です。
SELECT 文書ID, 作成者ID, A.氏名 AS 作成者氏名,
       承認者ID, B.氏名 AS 承認者氏名
FROM 文書
  LEFT OUTER JOIN 社員 A ON 文書.作成者ID = A.社員ID
  LEFT OUTER JOIN 社員 B ON 文書.承認者ID = B.社員ID;

選択肢別の誤答解説

  • : 正答。文書表を左側に置き、作成者・承認者それぞれについて社員表を LEFT OUTER JOIN しているため、文書表の行をすべて保持しつつ、該当する社員がなければ氏名が NULL になる。設問の結果と一致する。
  • イ: RIGHT OUTER JOIN を使っているが、RIGHT OUTER JOIN は「右側の表の行をすべて保持する」動作です。ここで右側に置かれるのは社員表なので、社員表の行が優先され、文書表に対応する行がない社員(もしあれば)も結果に出てしまいます。設問の結果は文書表の行がすべて残るケースなので合致しません。
  • ウ: FROM 節で「文書、社員 A, 社員 B」と列挙しつつさらに LEFT OUTER JOIN している構文は誤りか、二重参照により混乱を招きます。通常、同一エイリアス(社員 A)を FROM に並べておいて、さらに同名エイリアスで JOIN するのは不整合であり、期待する動作(文書を基準にして社員を左外部結合で二回結合)を明確に表していません。正しい書き方は FROM 文書 LEFT OUTER JOIN 社員 A ... のように明示的に書くことです。
  • エ: WHERE 句で結合条件を書く形は、等価条件が満たされない行を排除するため INNER JOIN と同じ動作になります(外部結合の効果を得られない)。作成者ID に対応する社員が存在しない文書(作成者ID = 500 の文書ID 4)は WHERE 条件で弾かれてしまうため、設問の結果(文書ID 4 が残る)と矛盾します。

よくある誤解

  • RIGHT と LEFT を混同する:どちらを「保持」するかは JOIN の左右(左表・右表)で決まるため、どの表を左側に書くかを常に意識する必要があります。
  • WHERE = 外部結合と同じになると考える:WHERE による結合条件は行を除外するため、外部結合の NULL を許容する動作にはなりません(INNER 相当になります)。
  • JOIN の順序は常に無関係と考える:内部結合は結合順序の見かけ上の差が少ないが、外部結合では「どの表を基準に残すか」が結果に直結するため順序・左右が重要です。

補足コラム

  • 同一テーブルを複数回結合する場合は必ずエイリアス(別名)を付ける。そうすることでどの結合条件がどの参照を指すか明確になります。
  • LEFT OUTER JOIN によって生じる NULL 値を扱うには、COALESCE 関数などでデフォルト値を指定することがよくあります。例: COALESCE(A.氏名, '未登録') AS 作成者氏名
  • RIGHT OUTER JOIN は LEFT と役割を逆にしただけなので、可読性の観点から LEFT に置き換えて書くのが一般的です(右側の表を左に入れ替えて LEFT JOIN を使う)。

FAQ

Q. LEFT と RIGHT のどちらを使えばよいですか?
A. 出力で「どちらの表の行をすべて残したいか」を基準に決めます。残したい表を左側に書き、LEFT OUTER JOIN を使うのが一般的です。
Q. WHERE 句で結合条件を書くと何が問題ですか?
A. WHERE による結合は一致しない行を排除するため INNER JOIN 相当になります。外部結合のように片側の行を保持したい場合は JOIN ... ON を使います。
Q. 同じ社員表を2回結合するときに注意する点は?
A. 必ず別名(例 A, B)を付け、結合条件でどちらの別名を参照しているか明確にすること。さもないと不整合や重複参照のエラーや誤った結果になります。

関連キーワード: SQL JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、外部結合、結合順序、NULL処理、テーブル別名、結合条件
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について