平成23年度 春期 データベーススペシャリスト試験 午前II 問5
2025年6月30日
【問題5】
“社員番号"と"氏名"を列としてもつR表とS表に対して,差(R−S)を求めるSQL文はどれか。ここで,R表とS表の主キーは"社員番号"であり,"氏名"は"社員番号"に関数従属する。

【解説】
ア: SELECT R.社員番号, S.氏名 FROM R, S WHERE R.社員番号 <> S.社員番号
誤り。このクエリはR表とS表を結合して条件が一致しない行を抽出するものであり、差集合を求めるものではありません。
イ: SELECT 社員番号, 氏名 FROM R UNION SELECT 社員番号, 氏名 FROM S
誤り。このクエリはR表とS表の和集合を求めるものであり、差集合を求めるものではありません。
ウ: SELECT 社員番号, 氏名 FROM R WHERE NOT EXISTS (SELECT 社員番号 FROM S WHERE R.社員番号 = S.社員番号)
正しい。このクエリは、R表の行について、S表に対応する社員番号が存在しないもの(差集合)を正確に抽出します。
エ: SELECT 社員番号, 氏名 FROM S WHERE S.社員番号 NOT IN (SELECT 社員番号 FROM R WHERE R.社員番号 = S.社員番号)
誤り。このクエリはS表からR表に存在しない社員番号を求めるものであり、S−Rを求める形になっています。
【答え】
ウ: SELECT 社員番号, 氏名 FROM R WHERE NOT EXISTS (SELECT 社員番号 FROM S WHERE R.社員番号 = S.社員番号)
出典:平成23年度 春期 データベーススペシャリスト試験 午前II 問5