UNIONとUNION ALLの意味、違い、覚え方

最終更新日 2018/02/07

UNION も UNION ALL も2つのテーブル(表)を縦にくっつける(ようなイメージの)操作です。
ただし、UNION ALL は重複行を除きませんが、UNION は重複行を除きます。

具体例

UNION ALL はそのままテーブルを縦にくっつけるような操作です。

例えば、

田中 男性 $100$
鈴木 女性 $200$

というテーブルと、

佐藤 男性 $300$
鈴木 女性 $200$

というテーブルを UNION ALLすると、

田中 男性 $100$
鈴木 女性 $200$
佐藤 男性 $300$
鈴木 女性 $200$

のようになります。

一方 UNION はくっつけるときに重複行を除きます。

例えば、上の例では「鈴木、女性、$200$」という行が重複しているので、UNION の結果は

田中 男性 $100$
鈴木 女性 $200$
佐藤 男性 $300$

のようになります。

SQL文の例

SELECT * FROM table1の名前
UNION
SELECT * FROM table2の名前

SELECT * FROM table1の名前
UNION ALL
SELECT * FROM table2の名前

のように使います。

注意点

UNION の方が重複行を除くための処理が必要になるので、実行に時間がかかります。

2つのテーブルに重複行が無いときには、UNION と UNION ALL の結果は同じになりますが、処理時間を短縮するために UNION よりも UNION ALL を使った方がよいでしょう。

UNION も UNION ALL も、2つのテーブルの定義(列の数や、各列の型)が同じ場合にしか使えません。

覚え方

UNION と UNION ALL は混同しがちなので、覚え方を紹介します。

UNION ALL は「全部」
つまり重複行も含めて全部出力するようなイメージです。

UNIONとUNION ALLの覚え方

UNION は(数学で集合を扱う文脈で)和集合を表します。
和集合をイメージするためのベン図を書いてみると、重複を繰り返さない感じが分かるかと思います。

関連:和集合と積集合の意味と公式

ちなみに、UNION ALLは横持ちテーブルを縦持ちテーブルに変換するときに使えます。
次回は テーブルの横持ちと縦持ちの使い分けと変換 を解説します。

ページ上部へ戻る