IPA過去問ドリル

令和2年度 10月 データベーススペシャリスト試験 午前Ⅱ 問8

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

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

令和2年度 10月 データベーススペシャリスト試験 午前Ⅱ 問8の図

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

正解:ウ

解説

“社員”表は,社員コードS001~S007について,上司の列に自分の上司の社員コードを保持する自己参照構造になっています。SQL文は,社員コードXについて,「X.社員コードを上司として持つ行(すなわちXの部下)が社員表に1件も存在しない」場合にXを抽出するものです。データを確認すると,上司列に現れる値はS001(S002,S003の上司),S003(S004の上司),S005(S006の上司),S006(S007の上司)です。したがって,誰かの上司になっている社員はS001,S003,S005,S006であり,これらはNOT EXISTS条件を満たさず除外されます。逆に,誰の上司にもなっていない社員(部下をもたない社員)はS002,S004,S007であり,これらがNOT EXISTS条件を満たして抽出されます。

選択肢ごとの解説

  • 誤り。S001,S003,S005,S006はいずれも他の社員の上司列に自分の社員コードが現れる,すなわち部下をもつ社員であり,NOT EXISTS条件を満たさず抽出結果には含まれません。
  • 誤り。S001とS005はそれぞれS002・S003,S006の上司であり部下をもつため,NOT EXISTS条件を満たさず抽出結果には含まれません。
  • 正しい。上司列に現れる社員コードはS001,S003,S005,S006であり,これら以外のS002,S004,S007はどの社員の上司にもなっていない(部下をもたない)ため,NOT EXISTS条件を満たして抽出されます。
  • 誤り。S003とS006はそれぞれS004,S007の上司であり部下をもつため,NOT EXISTS条件を満たさず抽出結果には含まれません。
データベーススペシャリストの過去問を演習モードで解く