戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

データベーススペシャリスト 2022年 午前208


問題文

“社員”表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中のNULLは値が存在しないことを表す。
データベーススペシャリスト 2022年 午前2 問08の問題画像データベーススペシャリスト 2022年 午前2 問08の選択肢の画像

選択肢

(正解)

社員表に対するSQL文の結果はどれか【午前2 解説】

要点まとめ

  • 結論:SQL文は「上司として登録されていない社員コード」を抽出し、正解はウの社員コードS002、S004、S007です。
  • 根拠:
    NOT EXISTS
    句は、社員コードが他の社員の「上司」列に存在しないことを条件にしているため、上司でない社員を抽出します。
  • 差がつくポイント:自己結合の理解と
    NOT EXISTS
    の使い方、NULLの扱いに注意し、上司としての役割があるかどうかを正確に判断することが重要です。

正解の理由

このSQL文は、社員表を自己結合し、社員コードが他の社員の「上司」列に存在しない社員を抽出しています。つまり、誰の上司にもなっていない社員コードを選びます。
表のデータを見ると、上司として名前が挙がっているのはS001、S003、S005、S006です。これらは他の社員の「上司」列に存在します。
一方、S002、S004、S007は誰の上司にもなっていません。したがって、これらの社員コードが抽出され、選択肢ウが正解です。

よくある誤解

「上司がNULLの社員が抽出される」と誤解しがちですが、SQL文は「上司として登録されていない社員」を抽出するため、NULLは直接関係ありません。
また、
NOT EXISTS
の意味を「存在しない行を除外する」と誤解し、逆の結果を選ぶことも多いです。

解法ステップ

  1. SQL文の
    FROM 社員 X
    FROM 社員 Y
    の自己結合を理解する。
  2. WHERE X.社員コード = Y.上司
    の条件で、Xの社員コードがYの上司として存在するかを確認。
  3. NOT EXISTS
    で「Xの社員コードが上司として存在しない」社員を抽出。
  4. 表の「上司」列を確認し、上司として名前がある社員コードをリストアップ。
  5. 上司として名前がない社員コードを選択肢から探す。

選択肢別の誤答解説

  • ア:S001、S003、S005、S006は全て誰かの上司なので抽出されません。
  • イ:S001、S005は上司として存在します。抽出対象外です。
  • ウ:S002、S004、S007は誰の上司にもなっていないため正解です。
  • エ:S003、S006は上司として存在するため誤りです。

補足コラム

自己結合は同じテーブルを2回以上参照し、異なるエイリアスを付けて比較する手法です。
NOT EXISTS
はサブクエリの結果が空の場合に真となり、存在しない条件を表現します。
NULL値は比較に注意が必要ですが、今回のSQLではNULLは「上司」列にあるだけで、
X.社員コード = Y.上司
の比較には影響しません。

FAQ

Q:
NOT EXISTS
NOT IN
の違いは何ですか?
A:
NOT EXISTS
はサブクエリの行の存在をチェックし、NULLの影響を受けにくいのに対し、
NOT IN
はNULLがあると結果が不確定になることがあります。
Q: NULLが「上司」列にある場合、どう扱われますか?
A: NULLは「値が存在しない」ことを示し、比較条件
X.社員コード = Y.上司
ではFALSE扱いとなるため、NULLは上司としてカウントされません。

関連キーワード: SQL, 自己結合、NOT EXISTS, 主キー、NULL, 上司、抽出条件、データベース、クエリ解析
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について