令和7年度 春期 情報処理安全確保支援士試験 午前II 問21

テクノロジデータベース

この問題は2025(R7)春 情報処理安全確保支援士 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

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

〔SQL文〕

SELECT 従業員コード FROM 従業員 X
    WHERE NOT EXISTS
        (SELECT * FROM 従業員 Y WHERE X.従業員コード = Y.上司)
従業員表
図の説明テキスト

「従業員」というキャプションがついた表。

従業員コード 上司 従業員名
S001 NULL A
S002 S001 B
S003 S001 C
S004 S003 D
S005 NULL E
S006 S005 F
S007 S006 G
※従業員コードの列名には下線(主キー)が引かれている。

解答・解説を読む

正解: 選択肢

正解の根拠

このSQL文は、相関サブクエリを使用し、NOT EXISTSを用いて条件に一致しないレコードを抽出しています。

  1. 外側のクエリ(SELECT 従業員コード FROM 従業員 X)で、従業員表(X)の各行を1行ずつ評価します。
  2. 内側のクエリ(SELECT * FROM 従業員 Y WHERE X.従業員コード = Y.上司)では、従業員表(Y)の中から「上司の従業員コードが、現在評価している従業員Xの従業員コードと一致する」レコードを検索します。つまり、従業員Xを上司に持つ従業員(Xの部下)を探しています。
  3. NOT EXISTS は、内側のクエリの検索結果が存在しない(0件である)場合に真(TRUE)となります。

したがって、このSQL文全体としては「部下が存在しない従業員」の 従業員コード を抽出することになります。

各選択肢の解説

本問題では表の具体例が省略されていますが、SQL文の論理から以下のように判断できます。

  • 正解(ウ):条件を満たす「誰の上司でもない従業員(部下のいない従業員)」のみが正しく抽出された結果です。
  • その他の選択肢(ア、イ、エ):他の従業員の上司として登録されている従業員コードが含まれているか、あるいは部下のいない従業員が結果から漏れているため、SQL文の抽出ロジックと一致せず誤りです。