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

SQL文1とSQL文2を実行した結果が同一になるために,表Rが満たすべき必要十分な条件はどれか。

〔SQL文1〕

SELECT * FROM R UNION SELECT * FROM R

〔SQL文2〕

SELECT * FROM R
解答・解説

正解: ウ. 重複する行は存在しない。

SQL文1で使用されている UNION は、複数の SELECT 文の結果を結合し、和集合を求める演算子です。このとき、デフォルトの動作として 重複する行を排除 して結果を返します。

一方、SQL文2は表Rのすべての行をそのまま抽出する単純な SELECT 文であり、重複行の排除は行われません。

したがって、SQL文1とSQL文2の実行結果が同一になるためには、元の表Rが「UNION による重複排除の影響を受けない状態」である必要があります。つまり、表Rに重複する行が存在しないことが必要十分条件となります。

各選択肢の解説

  • ア(値にNULLをもつ行は存在しない。)
    値に NULL を含む行が存在していても、重複がなければ両者の結果は同一になります。したがって必要十分条件ではありません。
  • イ(行数が0である。)
    確かに行数が0であれば両者の結果は同一(0件)になりますが、行数が1以上であっても重複行がなければ結果は同一になります。したがって必要十分条件ではありません。
  • ウ(重複する行は存在しない。)
    正解です。 重複行がなければ、UNION による重複排除処理が行われても結果が変わらないため、SQL文1とSQL文2の結果は完全に一致します。
  • エ(列数が1である。)
    列数が1であっても、行のデータに重複があれば SQL文1ではそれが排除されてしまうため、結果は同一になりません。したがって必要十分条件ではありません。

Spineチーム