【SQL】unionとunion allの違い

unionとunion allの違い

テーブルに重複するデータが発生した場合、
union allとunionでは処理が少し異なります。

union all

テーブルを縦に結合する
結合するテーブルに重複するデータがあっても、
そのまま結合する

身長・体重のデータが格納されたテーブルがあったとしよう。
この2つのテーブルをunion allするとどうなるか。
どうなるのか確認してみましょう。

テーブル①

f:id:gotto50105010:20181125101246p:plain

テーブル②

f:id:gotto50105010:20181125101254p:plain

同じ人のデータが格納されていましたね。

さて、union allで結合してみましょう。

f:id:gotto50105010:20181125101300p:plain

重複した状態でテーブルが結合されました。
このようにunion allの場合は、重複が発生した状態でテーブルが縦に結合されました。

union

テーブルを縦に結合することは、union allと同じです。
union allとの違いとしては、重複が発生した場合、
そのデータは削除されて結合されます。

結合するテーブルは先程と同じです。
赤枠で囲まれたところが、重複発生箇所です。

テーブル①

f:id:gotto50105010:20181125101246p:plain

テーブル②

f:id:gotto50105010:20181125101254p:plain

さて、これをunionで結合してみましょう。

f:id:gotto50105010:20181125101304p:plain

union allのときと、結果が異なりましたね。
そうです、重複がなくなりました。

参考文献

SQLの入門書として、こちらの本が非常におすすめです。
わかりやすい解説と練習問題が非常に沢山用意されており、
勉強した内容を実際のクエリを書いて理解を確認することができます。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

まとめ

このように、union allとunionの違いは、
結合対象のテーブルに重複が発生するか否かで結果が異なることです。

union all
重複が発生したまま、結合する

union
重複が発生しない