目次
本記事概要
対象者
・SQLでのデータ分析を勉強されている方
・特に非エンジニアのマーケティング担当者やPMの方
・【SQL練習】サンプルデータベースを用意するでMySQL公式のデータベースをローカルに作成されている方には特におすすめです。
目的
・UNIONを使えるようになる。
・UNIONとUNION ALLの違いを理解する。
筆者
- Web系企業のインハウスマーケター(https://twitter.com/okdddsho5)
UNIONとは?
同カラムのテーブルを縦に結合する時に使います。
どういう意味?となっている方も多いと思いますので、以下であえてカラムの内容が別のテーブルを無理矢理UNIONして、イメージを掴んでいただこうと思います。
actorテーブル概要

idと名前と苗字のシンプルなテーブルです。
(ほんとは他のカラムもありますが、わかりやすくするために3カラムのみ取得)
【SQL】UNIONとUNION ALLの違いを実践
【SQL】UNIONの使い方実践
まずはUNIONから。
上記のテーブルからWith句とUNIONを使って、
union_columnカラムに名前と苗字が縦に並んだデータをを抽出したいと思います。
すごく奇妙ですが、イメージは以下です。

では実際のクエリを見てみましょう!
以下の画像の赤く囲んだ部分を見てください。
select分がUNIONを挟んで縦に2つ並んでいますよね。
これがUNIONの使い方です。

UNIONの文法は?
■UNIONの文法
select
同じカラム
from
a
union
select
同じカラム
from
b
つまり別テーブルの同じカラムを縦に結合することができる関数なのです。
私は月の広告効果を抽出する時に良く使っています。
リファラが別(ツイッターやFacebook等)なので、テーブルももちろん別です。
しかし広告経由で来たユーザーをひとまとめにして、LTVを抽出したい時など、
with句を使って、個別の識別子を取り出し、最後にunionで結合して、
当月の広告経由で来たユーザー一覧テーブルを作成したりしています。
①縦に並べるので、抽出するのは同一のカラム名であること。
②unionは重複は除いたデータが取得されること。
では②unionは重複は除いたデータが取得されること。について説明していきます。
先ほどはUNIONを理解するために、
あえてunion_culumnというカラムを作り、
名前と苗字を縦に並べるということをしました。
では次は名前だけ並べて縦10行のデータを取得しようとするとどうすれば良いでしょう?
イメージは以下です。

【SQL】UNION ALLの使い方実践
上記の画像のデータを取得したコードは以下です。
ここでUNION ALLを使っています。
UNION ALLの部分をUNIONにすると、以下のようなデータになってしまいます。

なぜだかわかりますよね・・・?
先ほどポイント②でお伝えしたようにUNIONは重複を覗いたデータを取得するためです。
同じ苗字を縦に並べることはUNIONでは不可能で、重複を含めてデータを取得できるUNION ALLを使う必要があります。
まとめ
・【再喝】UNIONは重複を除いたデータを取得する
・UNION ALLは重複も含めたすべてのデータを取得する
最後に
UNIONとUNION ALLについて如何でしたでしょうかー?
少々宣伝ですが、トレジャーデータのイベントにて、
マーケター全員がデータ分析できる組織の強みとは?
について講演してきたので、良ければ見てください。