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

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ウ
相関副問合せでは、外側の社員Xの社員コードが、別の社員Yの上司欄に存在するかを調べています。NOT EXISTSなので、その社員を上司とする行が一つも存在しない場合に、外側の社員が選ばれます。上司欄に現れる社員コードはS001、S003、S005、S006です。したがって、誰の上司にもなっていない社員はS002、S004、S007であり、この3行を示すウが正解です。
アのS001、S003、S005、S006は誤りです。これらは上司欄に一度以上現れる社員、つまり部下をもつ社員です。NOT EXISTSではなくEXISTSを用いた場合に対応する集合です。
イのS001、S005は誤りです。これらは自身の上司欄がNULLである社員、つまり最上位の社員です。今回の条件はX自身の上司の有無ではなく、Xを上司とするYの有無を判定しています。
エのS003、S006は誤りです。これらは自身にも上司がいて、かつ部下もいる中間の社員です。そのような二つの条件を指定するSQLではありません。
【ポイント】 相関副問合せでは、外側の行を一行ずつ代入して副問合せの成否を考えます。 EXISTSは該当行が一つでもあれば真、NOT EXISTSは該当行が一つもなければ真です。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前II 問8
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の25問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる