SQL UNIONでテーブルを縦にくっつける

UNIONでテーブルを縦にくっつける

JOINはいわばテーブルを横につなげたりしていたが、今度は縦にくっつけるUNIONについて解説する。

全体とセグメント別の結果を1つにまとめたり、途中でデータの形式が変わってしまったのである日まではこちらのテーブルから、それ以降はあちらのテーブルからデータを取ってきて1つのテーブルに作り直す、と用途は広い。

他にも入門1で使ったサンプルデータ

SELECT 1 as id , "佐藤" as name , 24 as age ,2 as sex
UNION ALL SELECT 2 as id , "斎藤" as name , 18 as age ,1 as sex
UNION ALL SELECT 3 as id , "鈴木" as name , 35 as age ,1 as sex
UNION ALL SELECT 4 as id , "佐藤" as name , 46 as age ,1 as sex

はこのUNIONを使ってテーブルを作成している(なので実はWITHの中にいれればそのままテーブルとして使える)。

UNIONの書き方

UNIONには2つの種類があるが書き方は同じ。縦にくっつけるので結合キーの指定はいらない。

SELECT カラム1,カラム2・・・ FROM テーブルA
UNION ALL
SELECT カラム1,カラム2・・・ FROM テーブルB

  • カラムの数が同じ
  • カラムのデータ型が同じ(名前は違ってもOKで最初のテーブルのカラムになる)

の2点が守られていればできる。

UNIONした結果をそのまま使いたければ丸ごとサブクエリに入れる。もちろんWITHの中でも良い。

SELECT * FROM
(
SELECT カラム1,カラム2・・・ FROM テーブルA
UNION ALL
SELECT カラム1,カラム2・・・ FROM テーブルB
)
WHERE・・・

UNION ALLとUNION DISTINCTの違い

UNIONには2つの種類があると書いたが1つはUNION ALLそのまま縦にくっつける。UNION DISTINCTはくっつけたあと重複があったらユニークにする、と名前の通り。

オフィシャルドキュメント

https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax?hl=ja#union

基礎1

Posted by shinu