SkillStack
テクノロジ系8 / 25問

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

"社員"表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中のNULLは値が存在しないことを表す。

〔SQL文〕  SELECT 社員コード FROM 社員 X    WHERE NOT EXISTS      (SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司)

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

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】ウ

相関副問合せは、外側の社員Xごとに、Xの社員コードを上司としている社員Yが存在するかを調べています。NOT EXISTSは該当するYが一行もない場合に真となるため、抽出対象は「誰の上司にもなっていない社員」です。上司列に現れる社員コードはS001、S003、S005、S006なので、これらを除いたS002、S004、S007が結果となり、ウと一致します。具体的には、S001には部下S002とS003が、S003にはS004が、S005にはS006が、S006にはS007がいるので除外されます。S002、S004、S007には該当する部下がいないので残ります。

アのS001、S003、S005、S006は誤りです。これは上司列に一度でも現れる、部下をもつ社員の集合です。NOT EXISTSではなく、該当行の存在を要求するEXISTSに対応する結果です。

イのS001、S005は誤りです。これは自身の上司がNULLである社員、すなわち最上位の社員を抽出した結果です。今回調べているのはX自身の上司の有無ではありません。

エのS003、S006は誤りです。これは自分にも上司がいて、かつ自分も別の社員の上司である中間的な社員です。副問合せには、X自身の上司が存在するという条件はありません。

【ポイント】 相関副問合せでは、外側の行ごとに内側の条件を評価します。「関連する行がないもの」を探すNOT EXISTSは、末端の組織、未使用の分類、注文実績のない商品などの抽出で頻出します。

出典:令和2年度 秋期 データベーススペシャリスト試験 午前II 問8
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める