平成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.社員番号)

(ウ)になる。


キーワード
・関数従属

キーワードの解説
  • 関数従属
    2つの集合の間で、一方の属性集合の値(の集合)がもう一方の属性集合の値を関数的に決定するという、関係のことを関数従属といいます。
    関数従属には、幾つかの特性があって
    • 増加:X→Yならば、XZ→YZ
    • 推移性:X→YかつY→Zならば、X→Z
    • 結合:X→YでありX→Zならば、X→YZ
    • 分解:X→YZならば、X→YかつX→Z
    などがそうです。

もっと、「関数従属」について調べてみよう。

戻る 一覧へ 次へ