令和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
- アFULL OUTER JOIN
- イINNER JOIN
- ウLEFT OUTER JOIN
- エRIGHT OUTER JOIN
正解:ア
解説
どちらか一方の表にだけ含まれる 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 が漏れます。