過去問解きまくり研究所 ホーム

平成23年度 特別 午前Ⅱ 問5

データ操作

相関副問合せに関する問題

“社員番号”と“氏名”を列としてもつ R 表と S 表に対して,差(R−S)を求める SQL 文はどれか。ここで,R 表と S 表の主キーは“社員番号”であり,“氏名”は“社員番号”に関数従属する。

答えと解説を見る

✓ これが正解ウSELECT 社員番号, 氏名 FROM R WHERE NOT EXISTS (SELECT 社員番号 FROM S WHERE R.社員番号 = S.社員番号)

解説

S に同じ社員番号が無い R の行を NOT EXISTS で残します。

差 R−S は、R の行のうち S に含まれないものだけを集めた結果です。R と S の主キーは社員番号で、氏名は社員番号に関数従属するので、社員番号が S に無いかどうかを見れば、その行が S に無いかどうかを判定できます。そこで R の各行について、同じ社員番号をもつ S の行を探す相関副問合せを書き、NOT EXISTS でそれが一つも無い行だけを残します。これで R にあって S に無い社員の社員番号と氏名が得られます。差を SQL で書くときは、外側の表がどちらで、副問合せでどちらを探しているかを確かめると、向きの逆転を見抜けます。

ほかの選択肢はなぜ違うのか

出典:平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問5

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)