IPA過去問ドリル

令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8

テクノロジ/データベース

“社員”表に対して,SQL 文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表し,表中の NULL は値が存在しないことを表す。 〔SQL 文〕 SELECT 社員コード FROM 社員 X WHERE NOT EXISTS (SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司) (注:本サイトでは原問題の選択肢の表を文字表記に変換しています)

令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8の図

出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8

正解:ウ

解説

副問い合わせは,ある社員コードXが誰かの上司として存在するか(Y.上司=X.社員コードとなる行があるか)を調べています。NOT EXISTSなので,誰の上司にもなっていない社員(部下を持たない社員)が抽出されます。“社員”表で上司列に現れる値はS001,S003,S005,S006であり,これに該当しないS002,S004,S007が結果として得られます。

選択肢ごとの解説

  • 誤り。S001,S003,S005,S006は他の社員の上司として上司列に現れている社員であり,これらはEXISTS側の条件を満たすためNOT EXISTSの結果には含まれません。
  • 誤り。S001とS005は上司をもたない(上司列がNULL)社員であり,設問のSQL文が求めている「部下をもたない社員」とは異なる概念です。
  • 正しい。上司列に一度も現れないS002,S004,S007は部下を持たない社員であり,NOT EXISTSの条件を満たして結果に含まれます。
  • 誤り。S003とS006はいずれも他の社員(S004,S007)の上司として上司列に現れているため,NOT EXISTSの条件を満たさず結果には含まれません。
データベーススペシャリストの過去問を演習モードで解く