この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ウ

解説

このSQL文は「NOT EXISTS」を使った相関サブクエリです。内側のSELECTは「従業員Xのコードが、従業員テーブルの誰かの上司として記録されているか」を調べます。NOT EXISTSなので「誰の上司にもなっていない従業員コード」を外側のSELECTが返します。つまりこのクエリは「部下が一人もいない末端の従業員」を抽出します。表から確認すると、上司欄に記載されている従業員コードは上司が存在する人物であり、一度も他の従業員のY.上司として出現しない従業員コード(S002, S004, S007)が結果として返ります。選択肢cのS002・S004・S007が正解です。

なぜ他の選択肢は違うのか

選択肢 ア
S001・S003・S005・S006を選ぶ場合は「EXISTS(誰かの上司になっている)」の結果です。クエリはNOT EXISTSなので、誰かの上司になっている人ではなく、誰の上司にもなっていない人を選びます。
選択肢 イ
S001・S005のみを選ぶ場合は上司欄がNULLの従業員(直属の上司がいない最上位層)を選んでいると考えられます。本クエリはX.上司ではなく「Y.上司にX.コードが現れるか」を調べており、異なる条件です。
選択肢 エ
S003・S006のみを選ぶ場合は条件の解釈が誤っています。NOT EXISTSで「自分のコードが誰かの上司欄に存在しない」を正確に追いかけると、S002・S004・S007が該当します。

解くときのポイント

NOT EXISTS相関サブクエリは「内側のWHERE条件が一件も成立しない行を外側が返す」。「X.従業員コード = Y.上司」の条件は「自分が誰かの上司である」ことを意味し、NOT EXISTSで「誰の上司でもない=末端従業員」を抽出する。SQLは手を動かして追跡すると理解しやすい。