データベーススペシャリスト試験 2018年 午前205


“社員”表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中の‘NULL’は値が存在しないことを表す。
問題画像選択肢画像
(正解)

解説

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

要点まとめ

  • 結論:SQL文は「上司として誰も指定されていない社員コード」を抽出し、正解はウの社員コード一覧です。
  • 根拠:NOT EXISTS句は「該当社員コードが他の社員の上司欄に存在しない」ことを条件にしているため、部下を持たない社員を選びます。
  • 差がつくポイント:NOT EXISTSの意味と副問い合わせの結合条件を正確に理解し、上司と社員コードの関係を正しく把握することが重要です。

正解の理由

このSQL文は、社員テーブルの各社員コード(X)について、同じテーブルの上司欄(Y)にその社員コードが存在しない場合に抽出します。つまり、他の社員の「上司」欄に自分の社員コードがない社員、すなわち部下を持たない社員を選びます。表を見ると、社員コードS002、S004、S007は誰の上司にもなっていません。したがって、正解はです。

よくある誤解

「上司がNULLの社員を選ぶ」と誤解しがちですが、実際は「誰の上司にもなっていない社員」を選ぶ条件です。NULLは関係ありません。

解法ステップ

  1. SQL文のNOT EXISTSの意味を理解する(副問い合わせの結果が存在しない場合)。
  2. 副問い合わせの条件X.社員コード = Y.上司を確認し、社員コードが上司欄にあるかを調べる。
  3. 表の「上司」列を見て、どの社員コードが上司として使われているかを特定する。
  4. 上司として使われていない社員コードを抽出する。
  5. 選択肢と照合し、該当する社員コードのリストを選ぶ。

選択肢別の誤答解説ステップ

  • ア:S001、S003、S005、S006は上司として使われている社員コードが含まれており誤り。
  • イ:S001、S005は上司として使われているため誤り。
  • :S002、S004、S007は誰の上司にもなっていないため正解。
  • エ:S003、S006は上司として使われているため誤り。

補足コラム

NOT EXISTSは副問い合わせの結果が空の場合に真となるため、存在しない条件を表現するのに便利です。今回のように自己結合的に同じテーブルを2回参照し、特定の関係性を調べるケースはよく出題されます。SQLの副問い合わせと結合の違いも理解しておくと応用が効きます。

FAQ

Q: NOT EXISTSNOT INの違いは何ですか?
A: NOT EXISTSは副問い合わせの行の存在をチェックし、NULLの影響を受けにくいのに対し、NOT INはNULLがあると結果が不定になることがあります。
Q: NULLはこのSQL文の結果に影響しますか?
A: いいえ。NULLは「値が存在しない」ことを示しますが、このSQL文の条件は「社員コードが上司欄に存在しない」ことなので、NULLは無関係です。

関連キーワード: SQL, NOT EXISTS, 副問い合わせ, 自己結合, 上司部下関係, 主キー, NULL値, データベースクエリ
← 前の問題へ次の問題へ →

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