令和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ではそれが排除されてしまうため、結果は同一になりません。したがって必要十分条件ではありません。