ホーム > データベーススペシャリスト試験 > 2023年
データベーススペシャリスト試験 2023年 午前2 問10
表Aと表Bから、どちらか一方にだけ含まれるIDを得るSQL文のaに入れる字句はどれか。

ア:FULL OUTER JOIN(正解)
イ:INNER JOIN
ウ:LEFT OUTER JOIN
エ:RIGHT OUTER JOIN
解説
表Aと表Bから、どちらか一方にだけ含まれるIDを得るSQL文のaに入れる字句はどれか【午前2 解説】
要点まとめ
- 結論:どちらか一方にだけ含まれるIDを取得するには、両テーブルの全行を結合するFULL OUTER JOINが必要です。
- 根拠:INNER JOINは両方に存在する共通のIDのみ、LEFT/RIGHT OUTER JOINは片側の全行ともう片側の一致行のみを取得します。
- 差がつくポイント:NULL判定で片方に存在しない行を抽出するため、両テーブルの全行を網羅するFULL OUTER JOINを使うことが重要です。
正解の理由
正解はア: FULL OUTER JOINです。
このSQL文は「A.ID IS NULL OR B.ID IS NULL」という条件で、どちらか一方にしか存在しないIDを抽出しています。
FULL OUTER JOINはAとBの両方のテーブルの全行を結合し、片方にしかない行はもう片方の列がNULLになります。
そのため、WHERE句の条件でNULLを検出し、片方にだけ存在するIDを正しく取得できます。
このSQL文は「A.ID IS NULL OR B.ID IS NULL」という条件で、どちらか一方にしか存在しないIDを抽出しています。
FULL OUTER JOINはAとBの両方のテーブルの全行を結合し、片方にしかない行はもう片方の列がNULLになります。
そのため、WHERE句の条件でNULLを検出し、片方にだけ存在するIDを正しく取得できます。
よくある誤解
INNER JOINは共通するIDだけを取得するため、片方にだけあるIDは抽出できません。
LEFT/RIGHT OUTER JOINは片側の全行を取得しますが、もう片側に存在しない行だけを抽出するには不十分です。
LEFT/RIGHT OUTER JOINは片側の全行を取得しますが、もう片側に存在しない行だけを抽出するには不十分です。
解法ステップ
- 問題文のSQL文を確認し、JOINの種類を問われていることを理解する。
- WHERE句の「A.ID IS NULL OR B.ID IS NULL」が示す意味を考える。
- NULLが発生するのは、結合相手が存在しない場合であることを理解する。
- どちらか一方にだけ存在するIDを抽出するには、両テーブルの全行を結合する必要があると判断する。
- FULL OUTER JOINが両テーブルの全行を結合し、片方にしかない行はNULLになることを思い出す。
- よって、空欄に入るのはFULL OUTER JOINであると結論づける。
選択肢別の誤答解説
- ア: FULL OUTER JOIN
→ 正解。両テーブルの全行を結合し、片方にしかないIDをNULLで表現できる。 - イ: INNER JOIN
→ 誤り。両方に存在するIDのみを取得し、片方だけのIDは除外される。 - ウ: LEFT OUTER JOIN
→ 誤り。左テーブルAの全行を取得するが、右テーブルBに存在しないIDだけを抽出するには不十分。 - エ: RIGHT OUTER JOIN
→ 誤り。右テーブルBの全行を取得するが、左テーブルAに存在しないIDだけを抽出するには不十分。
補足コラム
FULL OUTER JOINはSQL標準で定義されている結合方法で、両テーブルの全行を結合し、片方に存在しない行はNULLで埋められます。
ただし、MySQLなど一部のDBMSではFULL OUTER JOINをサポートしていないため、UNIONやLEFT/RIGHT JOINの組み合わせで代用することがあります。
ただし、MySQLなど一部のDBMSではFULL OUTER JOINをサポートしていないため、UNIONやLEFT/RIGHT JOINの組み合わせで代用することがあります。
FAQ
Q: FULL OUTER JOINとINNER JOINの違いは何ですか?
A: INNER JOINは両テーブルに共通する行だけを結合しますが、FULL OUTER JOINは両方のテーブルの全行を結合し、片方にしかない行はNULLで埋めます。
A: INNER JOINは両テーブルに共通する行だけを結合しますが、FULL OUTER JOINは両方のテーブルの全行を結合し、片方にしかない行はNULLで埋めます。
Q: LEFT OUTER JOINで片方にだけ存在するIDを取得できますか?
A: LEFT OUTER JOINは左テーブルの全行を取得しますが、右テーブルに存在しない行だけを抽出するにはWHERE句でNULL判定が必要で、右テーブルにだけ存在するIDは取得できません。
A: LEFT OUTER JOINは左テーブルの全行を取得しますが、右テーブルに存在しない行だけを抽出するにはWHERE句でNULL判定が必要で、右テーブルにだけ存在するIDは取得できません。
関連キーワード: FULL OUTER JOIN, SQL結合, NULL判定, 外部結合, 差集合