相関サブクエリとNOT EXISTSによる非上司社員の抽出

この SQL 文の相関副問合せ(`WHERE X.社員コード = Y.上司`)は、「社員 X を上司として参照している部下社員 Y」が存在するかどうかを判定しています。 外側の WHERE 句に `NOT EXISTS` が指定されているため、「部下が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 を指定した場合に抽出される「部下をもつ上司社員」の一覧です。 上司が NULL である最上位の社員(トップ組織長)の一覧です。 中間の管理職のみを抽出した誤った結果です。

“社員” 表に対して, SQL 文を実行して得られる結果はどれか。ここで, 実線の下線は主キーを表し, 表中の NULL は値が存在しないことを表す。

社員

社員コード

上司

社員名

S001

NULL

A

S002

S001

B

S003

S001

C

S004

S003

D

S005

NULL

E

S006

S005

F

S007

S006

G

〔SQL文〕 SELECT 社員コード FROM 社員 X  WHERE NOT EXISTS   (SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司)

出典2022r04a_db_am2_問8
ア
社員コード S001 S003 S005 S006
イ
社員コード S001 S005
ウ
社員コード S002 S004 S007
エ
社員コード S003 S006