UNIONとUNION ALLを併用した場合の結果

 ユニオンクエリ、といいますかSQLでUNIONを使った場合、内容が重複する行は1行にまとめられて出力されます。
 ただしUNION ALLを使えば重複する行が何行あってもそのまま出力されます。
 これらを併用した場合、つまりSQLにUNIONとUNION ALLが混在する場合に重複行がどうなるかですが、結論としては「一度UNIONが現れればそれまでの重複行は1行にまとめられるが、それ以降のUNION ALLにより重複行が生じれば重複行は再び増えていく」となります。

f:id:accs2014:20161217104839p:plain:right:w400

 例として右のような1行2列の単純なテーブルを用います。


f:id:accs2014:20161217104838p:plain:right:w400

 まず単純にUNION ALLの効果を見てみましょう。5個のSELECT句をUNION ALLでつないでいます。


f:id:accs2014:20161217104837p:plain:right:w300

 データシートビューです。
 5つの重複行がまとめられずにそのまま出力されています。


f:id:accs2014:20161217104836p:plain:right:w400

 次にUNIONとUNION ALLが混在する例です。
 やはり5個のSELECT句をつないでいますが、最後の1個だけUNION ALLではなくUNIONでつないでいます。


f:id:accs2014:20161217104835p:plain:right:w300

 この場合、重複行はまとめられて出力は1行だけになります。
 最後のUNIONのはたらきで、それまで生じていた重複行が1行にまとめられています。


f:id:accs2014:20161217104853p:plain:right:w400

 逆に、最後だけUNION ALLでつないだ例を見てみましょう。


f:id:accs2014:20161217104852p:plain:right:w300

 出力は2行となります。
 UNIONでつないでいる限り出力は1行だけですが、最後のUNION ALLにより1行が加えられ、結果としてこうなります。


f:id:accs2014:20161217152554p:plain:right:w400

 そして、最後から2番目だけUNIONでつないでいる例です。


f:id:accs2014:20161217152553p:plain:right:w300

 UNIONのところで1行にまとめられ最後のUNION ALLで1行加えられますので、出力はやはり2行となります。