情報処理安全確保支援士試験 令和7年度 春期 午前II 問21
"従業員"表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中のNULLは値が存在しないことを表す。
〔SQL文〕 SELECT 従業員コード FROM 従業員 X WHERE NOT EXISTS (SELECT * FROM 従業員 Y WHERE X.従業員コード = Y.上司)

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ウ
この副問合せは、外側の表の従業員Xについて、「Xの従業員コードを上司欄に持つ従業員Yがいるか」を調べています。NOT EXISTSは、条件に合う行が一つも存在しない場合に真となるので、抽出されるのは部下を一人も持たない従業員です。
具体的に追うと、S001にはS002とS003が、S003にはS004が、S005にはS006が、S006にはS007が部下として存在するため、これらは除外されます。一方、S002、S004、S007を上司欄に持つ行は存在しません。したがって、結果はS002、S004、S007となり、ウが正解です。
アのS001、S003、S005、S006は誤りです。これはNOT EXISTSではなく、EXISTSを指定した場合に得られる、直属の部下を一人以上持つ従業員です。
イのS001、S005は誤りです。これは上司欄がNULLである最上位の従業員であり、「WHERE 上司 IS NULL」などで抽出する結果です。
エのS003、S006は誤りです。これは自分にも上司がいて、かつ自分も部下を持つ中間階層の従業員です。
【ポイント】 相関副問合せでは、外側の行ごとに内側の問合せを評価します。 EXISTSは該当行の存在、NOT EXISTSは該当行が一つもないことを判定し、SELECT句の値そのものは参照しません。
出典:令和7年度 春期 情報処理安全確保支援士試験 午前II 問21
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の25問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる