令和7年度 秋期 データベーススペシャリスト試験 午前II 問9

“名簿1”表と“名簿2”表のそれぞれ対応する行が全て等しいかどうかを確認するSQL文のa, b, cに入れる適切な字句はどれか。

名簿1と名簿2の表
図の説明テキスト

名簿1と名簿2の2つの表。

名簿1

名前 住所 性別 年齢
試験 太郎 東京 男 22
情報 花子 大阪 女 24
処理 一郎 京都 男 35

名簿2

名前 住所 性別 年齢
試験 太郎 東京 男 22
情報 花子 大阪 女 24
処理 一郎 京都 男 35
SQL文
図の説明テキスト

〔SQL文〕
SELECT CASE WHEN COUNT(*) = 0 THEN '等しい' ELSE '異なる' END AS 結果
FROM ((SELECT * FROM 名簿1 a SELECT * FROM 名簿2)
b
(SELECT * FROM 名簿1 c SELECT * FROM 名簿2)
) COMPARE

解答・解説

正解: エ. a: UNION, b: EXCEPT, c: INTERSECT

正解の根拠

“名簿1”表と“名簿2”表の対応する行が全て等しいことを確認するには、二つの表のデータの差異を調べる必要があります。
関係代数の集合演算を用いると、以下の手順で両者が等しいかを確認できます。

  1. 和集合(UNION): “名簿1”と“名簿2”のすべての行を合わせた結果(重複は排除される)。
  2. 積集合(INTERSECT): “名簿1”と“名簿2”の両方に共通して存在する行。
  3. 差集合(EXCEPT): 和集合から積集合を差し引きます。

もし“名簿1”と“名簿2”が完全に等しければ、和集合と積集合は同じ結果になります。そのため、(名簿1 UNION 名簿2) EXCEPT (名簿1 INTERSECT 名簿2) の結果が0件(空)であれば、両者は全く同じであると判定できます。したがって、字句の組み合わせとして UNION、EXCEPT、INTERSECT の順に適用する エ が正解となります。

各選択肢の解説

  • ア: aに EXCEPT、bに UNION ALL、cに INTERSECT を当てはめると、表の差と共通部分を単純に足し合わせる処理となり、等価性の確認にはなりません。
  • イ: アと同様に、集合演算の組み合わせが等価性の判定条件を満たしません。
  • ウ: aに UNION ALL、bに INTERSECT、cに UNION を当てはめると、単なる和集合などを求めるだけの処理になってしまい、両者の差を正確に抽出できません。
  • エ: 正解。和集合から積集合を引く(差集合を求める)ことで、どちらか一方にしか存在しない行を抽出でき、表の完全な一致を確認できます。

Spineチーム