ユニオンクエリ、といいますかSQLでUNIONを使った場合、内容が重複する行は1行にまとめられて出力されます。
ただしUNION ALLを使えば重複する行が何行あってもそのまま出力されます。
これらを併用した場合、つまりSQLにUNIONとUNION ALLが混在する場合に重複行がどうなるかですが、結論としては「一度UNIONが現れればそれまでの重複行は1行にまとめられるが、それ以降のUNION ALLにより重複行が生じれば重複行は再び増えていく」となります。
例として右のような1行2列の単純なテーブルを用います。
まず単純にUNION ALLの効果を見てみましょう。5個のSELECT句をUNION ALLでつないでいます。
データシートビューです。
5つの重複行がまとめられずにそのまま出力されています。
次にUNIONとUNION ALLが混在する例です。
やはり5個のSELECT句をつないでいますが、最後の1個だけUNION ALLではなくUNIONでつないでいます。
この場合、重複行はまとめられて出力は1行だけになります。
最後のUNIONのはたらきで、それまで生じていた重複行が1行にまとめられています。
逆に、最後だけUNION ALLでつないだ例を見てみましょう。
出力は2行となります。
UNIONでつないでいる限り出力は1行だけですが、最後のUNION ALLにより1行が加えられ、結果としてこうなります。
そして、最後から2番目だけUNIONでつないでいる例です。
UNIONのところで1行にまとめられ最後のUNION ALLで1行加えられますので、出力はやはり2行となります。