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

平成23年度特別 データベーススペシャリスト 午前Ⅱ 問5

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

問題

“社員番号”と“氏名”を列としてもつR表とS表に対して,差(R−S)を求めるSQL文はどれか。ここで,R表とS表の主キーは“社員番号”であり,“氏名”は“社員番号”に関数従属する。

選択肢

  1. ア
    SELECT R.社員番号,S.氏名 FROM R,S WHERE R.社員番号 <> S.社員番号
  2. イ
    SELECT 社員番号,氏名 FROM R UNION SELECT 社員番号,氏名 FROM S
  3. ウ
    SELECT 社員番号,氏名 FROM R WHERE NOT EXISTS (SELECT 社員番号 FROM S WHERE R.社員番号 = S.社員番号)
  4. エ
    SELECT 社員番号,氏名 FROM S WHERE S.社員番号 NOT IN (SELECT 社員番号 FROM R WHERE R.社員番号 = S.社員番号)
解き方のヒントを見る

関係演算の対象範囲を整理する視点

関係演算では、各演算がどの関係を対象にし、条件に合わない組をどの段階で扱うかを切り分けて考えると、集合の変化を落ち着いて追跡できます。まず対象と条件の役割を分けて確認しましょう。

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

確認の中心は、演算の前後で対象となる組の集合がどのように定義されるかです。入力関係、判定条件、結果に残る範囲を同じ視点で比較し、処理の順序を混同しないように整理します。

視点

関係演算を読むときは、入力される関係、組を評価する条件、結果として扱う集合を分けて整理します。各段階の対象範囲を図や表に書き出すと、条件の適用範囲を確認しやすくなります。

確認ポイント

  • 対象となる関係と各組の意味を確認する
  • 条件が参照する属性と判定単位を区別する
  • 演算前後で集合の範囲がどう変わるかを記録する
正解と解説を見る

正解

ウ

解説

差集合R−Sは、R表の行のうち、S表に同じ社員番号をもつ行が存在しないものを抽出します。ウはRを検索元にし、NOT EXISTSでSに対応行がないことを判定しているため、この条件に一致します。

理由

R−Sは、Rに含まれる行からSにも存在する同一行を除く演算です。主キーが社員番号で、氏名は社員番号に関数従属するため、社員番号が一致すれば対応する氏名も決まります。ウはRの社員番号ごとに、Sに同じ社員番号が存在しないことをNOT EXISTSで確認しています。

比較

アはRとSの社員番号が異なる組合せを作るため、Rの行だけを残す差集合になりません。イはRとSの行を合わせるUNIONです。エはSを検索元にしてRにない行を求める形であり、R−Sとは逆方向です。

選択肢ア

これは不正解だよ。RとSを組み合わせ、社員番号が異なる組合せを抽出しています。差集合で必要なのは、Rの各行についてSに同じ社員番号の行が存在しないことの判定です。また、SELECTではRの社員番号とSの氏名を取得するため、同一行の属性を保つ条件にもなっていません。

選択肢イ

これは不正解だよ。UNIONはR表とS表の行を重複排除して合わせる集合演算であり、RにあってSにない行だけを抽出する差集合ではありません。検索元をRに限定せず、Sの行も結果に含めるため、R−Sの意味と一致しません。

選択肢ウ(正解)

これは正解だよ。R表から社員番号と氏名を取得し、NOT EXISTSによってS表に同じ社員番号をもつ行が存在しない場合だけを残しています。したがって、Rに含まれ、Sには含まれない行を求めるR−Sを正しく表しています。

選択肢エ

これは不正解だよ。S表を検索元にして、R表に同じ社員番号がないSの行を抽出する形です。求める差はR−Sなので、残す対象はRの行でなければなりません。この文は検索元と除外対象の関係が逆で、R−Sにはなりません。

学習のポイント

差集合では検索元の表と、相手表に対応行がないことの判定方法を正しく読むことが重要です。

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

関連する過去問一覧

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