“社員番号”と“氏名”を列としてもつR表とS表に対して、差(R - S)を求めるSQL文はどれか。
ここで、R表とS表の主キーは“社員番号”であり、“氏名”は“社員番号”に関数従属する。
ア | SELECT R.社員番号, S.氏名 FROM R, S WHERE R.社員番号 <> S.社員番号 |
イ | SELECT 社員番号, 氏名 FROM R UNION SELECT 社員番号, 氏名 FROM S |
ウ | SELECT 社員番号, 氏名 FROM R WHERE NOT EXISTS (SELECT 社員番号 FROM S WHERE R.社員番号 = S.社員番号) |
エ | SELECT 社員番号, 氏名 FROM S WHERE S.社員番号 NOT IN (SELECT 社員番号 FROM R WHERE R.社員番号 = S.社員番号) |
答え ウ
【解説】
差集合R-Sを求めるには、表Rから表Sと共通の部分を取り除けばよい。
表Rと表Sの共通部分は
SELECT 社員番号 FROM S WHERE R.社員番号 = S.社員番号
で表現できるので、表Rでこの部分ではないところを取りだすには、“NOT EXISTS”を使って
SELECT 社員番号, 氏名 FROM R
WHERE NOT EXISTS (SELECT 社員番号 FROM S
WHERE R.社員番号 = S.社員番号)
(ウ)になる。
【キーワード】
・関数従属