IPA公式正解:ウ 重複する行は存在しない。
※ 正解はIPA公表の解答です。解説は当サイトが生成AIを用いて作成しています。誤りにお気づきの場合はお問い合わせください。
【解説】正解は選択肢【ウ】です。UNION演算子は結果から重複行を排除(DISTINCT相当)します。一方、通常のSELECT * FROM Rは重複行があってもそのまま出力します。したがって、両者の結果が同一になるための必要十分条件は「表Rに重複する行が存在しない」ことです。
【詳細解説】■ 本問の核心・解法のポイント
SQLにおける集合演算子「UNION」と「UNION ALL」の違い、およびリレーショナルデータベースにおける重複行の扱いがポイントです。
SQL文1で使われている「UNION」(ALLなし)は、集合演算として和集合を求める際に重複行を自動的に排除します。そのため、表R内にまったく同一の値を持つ重複行が複数存在していた場合、SQL文1の結果ではそれらの重複が1行にまとめられます。
一方、SQL文2の「SELECT * FROM R」は表Rの全行をそのまま出力するため、重複行が存在していれば重複したまま出力されます。
両者の結果(出力される行のマルチセット)が常に同一であるためには、表R自体に最初から重複行が存在しないことが必要十分条件となります。
・各選択肢の徹底解説:
・ア:UNION演算子はNULLを含む行同士であっても、すべての列値が同一(またはNULL同士)であれば重複とみなして排除します。NULLの有無自体は両文の結果が一致するかどうかの本質的な条件ではありません。
・イ:行数が0であれば確かに両文の結果は空集合で一致しますが、行数が1以上であっても重複がなければ一致するため、必要条件ではありません。
・【選択肢ウ★】:表Rに重複行が存在しなければ、UNIONによる重複排除の影響を受けず、SQL文1とSQL文2の結果は完全に一致します。重複行があればSQL文1では行数が減るため一致しません。よって必要十分条件です。
・エ:列数が何列であっても、重複行の有無によって動作が決まるため、列数は無関係です。
よって正解はウです。