【解説】正解は選択肢【ウ】です。相関副問合せの NOT EXISTS により「自分(X.社員コード)を上司(Y.上司)とする社員が存在しない社員」、すなわち部下を持たない社員が抽出されます。上司列に登場しないS002, S004, S007が該当します。
【詳細解説】■ 本問の核心・解法のポイント
SQL文の相関副問合せとNOT EXISTS述語の動作を正しく読み解く問題です。
副問合せ `SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司` は、社員Xを「上司」として持っている社員Y(部下)を検索しています。
外側の問合せの `WHERE NOT EXISTS (...)` は、そのような社員Yが1件も存在しない場合に真となります。したがって、このSQL文は「部下を1人も持たない社員の社員コード」を求めるものです。
“社員”表の上司列に存在する値(=誰かの上司である社員コード):
・S001(S002, S003の上司)
・S003(S004の上司)
・S005(S006の上司)
・S006(S007の上司)
上司列に含まれる社員コードは {S001, S003, S005, S006} です。
全社員コード {S001, S002, S003, S004, S005, S006, S007} からこれらを除いたものが抽出対象となります。
該当するのは S002, S004, S007 です。
・各選択肢の徹底解説:
・ア:不適切です。これらは「部下を持つ社員(上司である社員)」の集合であり、EXISTSを指定した場合の結果です。
・イ:不適切です。S001およびS005は上司列に存在するため除外されます(なお、自身の上司がNULLの最上位の上司です)。
・【選択肢ウ★】:適切です。S002, S004, S007は上司列に一度も現れないため、部下が存在せずNOT EXISTSの条件を満たします。
・エ:不適切です。S003およびS006は上司列に存在するため条件を満たしません。
よって正解はウです。