データ(SQL)

【SQL】UNIONとUNION ALLの違いを具体例で簡単解説

本記事概要

対象者

・SQLでのデータ分析を勉強されている方
・特に非エンジニアのマーケティング担当者やPMの方
【SQL練習】サンプルデータベースを用意するでMySQL公式のデータベースをローカルに作成されている方には特におすすめです。

目的

・UNIONを使えるようになる。
・UNIONとUNION ALLの違いを理解する。

筆者

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について如何でしたでしょうかー?

少々宣伝ですが、トレジャーデータのイベントにて、
マーケター全員がデータ分析できる組織の強みとは?
について講演してきたので、良ければ見てください。

 

ABOUT ME
Okada Shogo
マーケター@Coincheck