リレーショナルデータベースにおける集合演算子に関する記述のうち、適切なものはどれか。
- INTERSECTは、1番目の問合せ結果から2番目の問合せ結果に含まれる行を差し引いた差集合を求める
- UNIONは2つの問合せ結果を併合して重複行を排除するが、UNION ALLは重複行を排除せずにすべて出力する
- EXCEPT(またはMINUS)は、2つの問合せ結果の両方に共通して含まれる行だけを抽出する
- 集合演算を行う2つの問合せでは、SELECT句に指定する列のデータ型や列数が異なっていても自動的に型変換されて実行できる
- UNION ALLを使用すると、ソート処理による重複排除が行われるためUNIONよりも実行速度が低下する
正解と解説を見る
正解: UNIONは2つの問合せ結果を併合して重複行を排除するが、UNION ALLは重複行を排除せずにすべて出力する
正解は「UNIONは2つの問合せ結果を併合して重複行を排除するが、UNION ALLは重複行を排除せずにすべて出力する」です。UNIONは和集合を求めて重複を排除しますが、UNION ALLは重複排除処理を行わずにそのまま連結します。「EXCEPT(またはMINUS)は、2つの問合せ結果の両方に共通して含まれる行だけを抽出する」はINTERSECTの説明であり、EXCEPTは差集合を求めます。「INTERSECTは、1番目の問合せ結果から2番目の問合せ結果に含まれる行を差し引いた差集合を求める」はEXCEPTの説明であり、INTERSECTは積集合(共通部分)を求めます。「集合演算を行う2つの問合せでは、SELECT句に指定する列のデータ型や列数が異なっていても自動的に型変換されて実行できる」は誤りで、対象となる列数および対応する列のデータ型に互換性が必要です。「UNION ALLを使用すると、ソート処理による重複排除が行われるためUNIONよりも実行速度が低下する」は逆で、重複排除を行わないUNION ALLのほうが通常高速に動作します。