データベーススペシャリスト試験 令和2年度 秋期 午前II 問8
"社員"表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中のNULLは値が存在しないことを表す。
〔SQL文〕 SELECT 社員コード FROM 社員 X WHERE NOT EXISTS (SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司)

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ウ
相関副問合せは、外側の社員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に質問できる