UNIONとUNION ALLの違い

posted in: SQLServer | 0

こんにちは、オカザキです。
SQLServerにてSQLを書いているときにUNIONとUNION ALLについて自分が勘違いしていた部分がありましたので備忘も兼ねて書いていきます。

UNIONとUNION ALLはどちらもテーブルを統合するというものです。
大きな違いを2点ほど例を交えて説明します。

1.重複行

こちらは様々なサイトで見かける違いです。
UNIONでは問い合わせの結果のレコードに重複している行が存在する場合は1行として結果を出力しています。
UNION ALLでは重複している行が存在した場合も再度その行も結果として出力しています。

UNION

DiffUnion_UNION1

UNION ALL

DiffUnion_UNION_ALL1

2.並び順

UNIONとUNION ALLでは結果を出力したときの並び順にも違いがあります。
UNIONではテーブルを統合したあとに並び替えをして結果を出力しています。
UNION ALLではテーブルを統合した順番通りに結果を出力しています。

UNION

DiffUnion_UNION2

UNION ALL

DiffUnion_UNION_ALL2

マイクロソフトのサイトによると、UNION時にORDER BY句で照合順序を指定しなかった場合、SQLServerインストール時に選択した照合順序で変わってくるようです。

UNIONによる結果セットの結合

UNIONで勝手にソートされることを知らずに、SQLの速度を計ってみたときにUNIONとUNION ALLで返ってくるレコードの並び順が違うことに驚かされてしまいました。

以上です。

LINEで送る
Pocket