情報処理安全確保支援士 2025年 春期 午前2 問21
問題文
“従業員”表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中の NULL は値が存在しないことを表す。


選択肢
ア:
イ:
ウ:(正解)
エ:
従業員表に対するSQL文の結果はどれか【午前2 解説】
要点まとめ
- 結論:SQL文は「上司になっていない従業員コード」を抽出し、正解はウの「S002, S004, S007」です。
- 根拠:サブクエリで「Xの従業員コードがYの上司か」を調べ、存在しなければ抽出するため、部下を持たない従業員が対象です。
- 差がつくポイント:NOT EXISTSの意味と、上司列の値を正確に把握し、部下の有無を見極めることが重要です。
正解の理由
このSQL文は「従業員Xの従業員コードが、他の従業員Yの上司として存在しない」ことを条件にしています。つまり、部下を持たない従業員コードを抽出します。表を見ると、上司として名前が挙がっているのはS001、S003、S005、S006です。これらは部下がいるため除外されます。残るS002、S004、S007は誰の上司にもなっていません。したがって、正解はウの「S002, S004, S007」です。
よくある誤解
「上司がNULLの従業員が抽出される」と誤解しがちですが、NULLは上司がいないことを示すだけで、部下の有無とは無関係です。
また、NOT EXISTSの条件を逆に理解し、上司のいる従業員を選ぶと間違えます。
また、NOT EXISTSの条件を逆に理解し、上司のいる従業員を選ぶと間違えます。
解法ステップ
- SQL文の構造を理解する:外側のSELECTは従業員コードを選択。
- サブクエリの意味を把握:Xの従業員コードがYの上司として存在するかを調べる。
- NOT EXISTSは「存在しない」ことを意味し、部下がいない従業員を抽出。
- 表の「上司」列を確認し、どの従業員コードが上司として使われているかを特定。
- 上司として使われていない従業員コードをリストアップ。
- 選択肢の中から該当するグループを選ぶ。
選択肢別の誤答解説
- ア:S001、S003、S005、S006は全員部下を持つため誤り。
- イ:S001、S005は上司として部下がいるため誤り。
- ウ:S002、S004、S007は部下を持たない正解。
- エ:S003、S006は部下がいるため誤り。
補足コラム
SQLの
NOT EXISTSはサブクエリの結果が空の場合に真となり、存在しないことを判定します。部下を持たない従業員を抽出する際に有効な方法です。
NULLは「値が存在しない」ことを示し、比較や存在判定の際は注意が必要です。主キーや外部キーの関係を理解すると、こうした階層構造のデータ抽出がスムーズになります。
FAQ
Q: NOT EXISTSとNOT INの違いは何ですか?
A: NOT EXISTSはサブクエリの行の存在をチェックし、NULLの影響を受けにくいのに対し、NOT INはNULLがあると結果が不確定になることがあります。
A: NOT EXISTSはサブクエリの行の存在をチェックし、NULLの影響を受けにくいのに対し、NOT INはNULLがあると結果が不確定になることがあります。
Q: NULLが上司の値の場合、どう扱えばよいですか?
A: NULLは「上司なし」を意味し、部下の有無とは別の概念です。NULLを条件に含める場合はIS NULLを使います。
A: NULLは「上司なし」を意味し、部下の有無とは別の概念です。NULLを条件に含める場合はIS NULLを使います。
関連キーワード: SQL, NOT EXISTS, サブクエリ、部下抽出、階層構造、NULL, 主キー、外部キー、データベース、従業員管理

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

