平成23年 春期 データベーススペシャリスト 午前II 問5

“社員番号”と“氏名”を列としてもつ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.社員番号)

(ウ)になる。


キーワード
・関数従属

キーワードの解説

戻る 一覧へ 次へ