DBデータベーススペシャリスト試験 午前Ⅱ
令和4年度秋期 データベーススペシャリスト 午前Ⅱ 問8
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- ア社員コード:S001,S003,S005,S006
- イ社員コード:S001,S005
- ウ社員コード:S002,S004,S007
- エ社員コード:S003,S006
解き方のヒントを見る
抽出条件と結果の対応を読む視点
SQLの抽出条件と結果を考えるときは、条件がどの行の集合に作用し、指定された情報が結果の構成にどう関わるかを整理することに集中しましょう。表現の細部だけで判断せず、処理の対象と順序を意識して読み進めます。
この問題で問われていること
一つの観点として、条件に関係する対象の範囲と、結果として観察される情報の範囲が対応しているかを確認してください。文中の各指定を役割ごとに分けて整理すると、読み違いを減らせます。
視点
抽出を読む際は、対象、条件、表示される情報を別々の要素として捉え、どの記述がどの役割を持つかを対応付けます。結果を先に決めつけず、対象範囲と見える情報の関係を確認しましょう。
確認ポイント
- 条件が関係する対象の範囲を整理する
- 結果として示される情報の範囲を確認する
- 対象と結果の対応関係に読み違いがないか見直す
正解と解説を見る
正解
ウ
解説
相関サブクエリは、社員Xのコードと社員Yの上司欄を比較しています。Xを上司とするYが存在しない社員だけがNOT EXISTSによって抽出されるため、結果はS002、S004、S007となり、選択肢ウと一致します。
理由
SQL文の内側では、外側の社員Xの社員コードと一致する上司欄をもつ社員Yを検索します。そのようなYが存在しないときだけNOT EXISTSが真になります。表を確認すると、S002、S004、S007を上司欄に持つ行はありません。したがって、この3行が抽出されます。
比較
S001はS002とS003の上司、S003はS004の上司、S005はS006の上司、S006はS007の上司として表に現れます。これらは一致するYが存在するため除外されます。上司欄がNULLの行は、社員Xのコードとの一致を作りません。
選択肢ア
これは不正解だよ。S001、S003、S005、S006は、いずれも別の社員の上司欄に登場します。そのため、各社員コードをXとした内側の検索結果が存在し、NOT EXISTSの条件を満たしません。S003やS006だけでなく、S001やS005も抽出対象から外れるため、この組合せにはなりません。
選択肢イ
これは不正解だよ。S001とS005は、表の上司欄がNULLである社員コードですが、SQLが見ているのはXのコードがYの上司欄に存在するかどうかです。S001はS002とS003、S005はS006の上司欄に現れるため、NOT EXISTSは真にならず、結果には含まれません。
選択肢ウ(正解)
これは正解だよ。S002、S004、S007を上司欄にもつ社員Yは表に存在しません。したがって、それぞれを社員Xとした内側のSELECTは行を返さず、NOT EXISTSが真になります。外側のSELECTはこの3行の社員コードを返すため、提示された結果と一致します。
選択肢エ
これは不正解だよ。S003とS006は、上司欄にそれぞれS003、S006を記載した社員が存在しないように見えるコードではありませんが、S003はS004の上司、S006はS007の上司です。そのため内側の検索結果が存在し、NOT EXISTSによる抽出対象にはなりません。
学習のポイント
NOT EXISTSと相関条件による、子行がない親行の抽出を学びます。
出典:独立行政法人 情報処理推進機構(IPA)令和4年度秋期 データベーススペシャリスト試験 午前Ⅱ 問8(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針