IPA過去問ドリル

令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10

テクノロジ/データベース

表 A と表 B から,どちらか一方にだけ含まれる ID を得る SQL 文の a に入れる字句はどれか。 表 A の ID 列の値:100, 200, 300, 400 表 B の ID 列の値:200, 400, 600, 800 〔SQL 文〕 SELECT COALESCE(A.ID, B.ID) FROM A  a  B ON A.ID = B.ID WHERE A.ID IS NULL OR B.ID IS NULL (注:本サイトでは原問題の表を文字表記に変換しています)

出典:令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10

正解:ア

解説

どちらか一方の表にだけ含まれる ID,すなわち対称差を求めるには,両表の行をすべて残す完全外部結合(FULL OUTER JOIN)を行い,結合相手がなく NULL になった行だけを WHERE 句で絞り込みます。ここでは結果として A にだけある 100,300 と,B にだけある 600,800 が得られ,COALESCE によって NULL でない側の ID が取り出されます。

選択肢ごとの解説

  • 正しい。FULL OUTER JOIN であれば両表の非対応行が NULL 付きで残るので,WHERE 句で対称差を取り出せます。
  • 誤り。INNER JOIN では結合条件に一致する行しか残らず,A.ID や B.ID が NULL になる行が生じないので結果は 0 件になります。
  • 誤り。LEFT OUTER JOIN では A にだけ含まれる 100,300 しか得られず,B にだけ含まれる 600,800 が漏れます。
  • 誤り。RIGHT OUTER JOIN では B にだけ含まれる 600,800 しか得られず,A にだけ含まれる 100,300 が漏れます。
データベーススペシャリストの過去問を演習モードで解く