令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8
テクノロジ/データベース“社員”表に対して,SQL 文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表し,表中の NULL は値が存在しないことを表す。 〔SQL 文〕 SELECT 社員コード FROM 社員 X WHERE NOT EXISTS (SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司) (注:本サイトでは原問題の選択肢の表を文字表記に変換しています)

出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8
- ア社員コード:S001, S003, S005, S006
- イ社員コード:S001, S005
- ウ社員コード:S002, S004, S007
- エ社員コード:S003, S006
正解:ウ
解説
副問い合わせは,ある社員コードXが誰かの上司として存在するか(Y.上司=X.社員コードとなる行があるか)を調べています。NOT EXISTSなので,誰の上司にもなっていない社員(部下を持たない社員)が抽出されます。“社員”表で上司列に現れる値はS001,S003,S005,S006であり,これに該当しないS002,S004,S007が結果として得られます。
選択肢ごとの解説
- ア誤り。S001,S003,S005,S006は他の社員の上司として上司列に現れている社員であり,これらはEXISTS側の条件を満たすためNOT EXISTSの結果には含まれません。
- イ誤り。S001とS005は上司をもたない(上司列がNULL)社員であり,設問のSQL文が求めている「部下をもたない社員」とは異なる概念です。
- ウ正しい。上司列に一度も現れないS002,S004,S007は部下を持たない社員であり,NOT EXISTSの条件を満たして結果に含まれます。
- エ誤り。S003とS006はいずれも他の社員(S004,S007)の上司として上司列に現れているため,NOT EXISTSの条件を満たさず結果には含まれません。