DBデータベーススペシャリスト試験 午前Ⅱ

平成30年度春期 データベーススペシャリスト 午前Ⅱ 問5

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“社員”表に対して,SQL文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表し,表中の‘NULL’は値が存在しないことを表す。
社員コード,上司,社員名から成る社員表,NOT EXISTSを用いたSQL文,及び社員コードの検索結果候補四つ。
社員コード,上司,社員名から成る社員表,NOT EXISTSを用いたSQL文,及び社員コードの検索結果候補四つ。

選択肢

  1. ア
    社員コード:S001,S003,S005,S006
  2. イ
    社員コード:S001,S005
  3. ウ
    社員コード:S002,S004,S007
  4. エ
    社員コード:S003,S006
解き方のヒントを見る

抽出条件と結果集合の照合視点

SQLの抽出結果を考えるときは、条件がどの行や値に関係するかを整理し、選択・結合・集約など各処理の境界を分けて確認しましょう。そのうえで、表示される列と対象となる行を別々に追うことが大切です。

この問題で問われていること

一つの観点として、抽出条件が評価される対象と、最終的に表示される結果の単位が一致しているかを確認してください。行単位か集計単位かを区別して整理すると、条件と結果の対応を落ち着いて検討できます。

視点

条件がどの処理段階で扱われ、どの範囲のデータに影響するかを整理し、対象の単位と表示結果の単位を分けて考えます。

確認ポイント

  • 条件が関係するデータの単位を確認する
  • 処理段階ごとの対象範囲を整理する
  • 表示列と対象行を分けて対応を確認する
正解と解説を見る

正解

ウ

解説

相関サブクエリは、外側の社員コードと一致する上司列の行が存在するかを調べます。NOT EXISTSにより、そのような行が存在しない社員コードだけが結果として選ばれます。

理由

社員表をXとYという二つの別名で参照し、Xの社員コードとYの上司を比較しています。Xの社員コードに一致する上司を持つYの行が存在すれば、そのXは除外され、存在しなければ選択されます。表の上司列に現れるコードはS001、S003、S005、S006なので、それ以外の社員コードが結果になります。

比較

NULLは値が存在しないことを表すため、Y.上司がNULLの行は、X.社員コードとの等号条件を満たす一致行にはなりません。一方、社員コードS001、S003、S005、S006は上司列に現れるためNOT EXISTSが偽になり、結果には含まれません。

選択肢ア

これは不正解だよ。S001、S003、S005、S006はいずれも表の上司列に現れる社員コードです。そのため、それぞれに一致するYの行が存在し、NOT EXISTSの条件を満たしません。これらを結果に含めている点がSQLの判定と異なります。

選択肢イ

これは不正解だよ。S001とS005は、いずれも別の社員の上司列に記録されています。したがって相関サブクエリは一致する行を見つけ、NOT EXISTSは偽になります。この二つだけを結果に残す内容は、存在判定を逆に扱っています。

選択肢ウ(正解)

これは正解だよ。S002、S004、S007は上司列の値として現れていません。そのため、それぞれの社員コードに一致するYの行が存在せず、NOT EXISTSが真になります。よって、この三つがSELECTの結果として返されます。

選択肢エ

これは不正解だよ。S003とS006は、他の社員の上司として上司列に存在します。よって相関サブクエリには一致行があり、NOT EXISTSは成立しません。上司として参照されているコードを結果に含めている点が誤りです。

学習のポイント

NOT EXISTSと自己相関による存在判定の読み取り方を学ぶ。

出典:独立行政法人 情報処理推進機構(IPA)平成30年度春期 データベーススペシャリスト試験 午前Ⅱ 問5(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針