【詳細解説】■ 本問の核心・解法のポイント
相関副問合せと NOT EXISTS 句の評価手順を正確にトレースする問題です。
実行されるSQL文:
SELECT 社員コード FROM 社員 X
WHERE NOT EXISTS
(SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司)
副問合せ `SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司` は、「社員Xを上司として参照している社員Yが存在するか(社員Xに部下がいるか)」を調べています。
外側の WHERE NOT EXISTS は、副問合せの結果が空(1行も存在しない)である社員Xのみを抽出します。つまり、「誰の上司にもなっていない(部下がいない)社員の社員コード」が返されます。
・表の「上司」列に現れる社員コードを確認:
上司列にある値は {S001, S003, S005, S006} です(NULLは除外)。
これらの社員は部下が存在するため、NOT EXISTS の条件を満たさず除外されます。
・全社員コード:
{S001, S002, S003, S004, S005, S006, S007}
ここから上司列に存在する社員を除くと、残るのは {S002, S004, S007} となります。
・各選択肢の評価:
・ア:上司列に存在する社員(部下を持つ社員)の集合であり、EXISTSの場合の結果です。
・イ:上司がNULLの社員(トップの上司)の集合です。
・ウ:【選択肢ウ★】部下を持たない社員コードの一覧であり、正しい結果です。
・エ:自身が上司を持ち、かつ部下も持つ中間管理職の社員などです。
よって正解はウです。