【UNIONについて】

今回は UNION について解説します。

UNION は、複数のSELECTの結果を1つにまとめるための構文です。
SELECTの列数と列のデータ型が一致している必要があります。
また、重複する行は自動的に削除されます(重複も残したい場合は UNION ALL を使います)。

【使用例①】
以下のようなデータでUNIONを試してみましょう

データ①:tokyo_customers

名前 住所
田中 東京
佐藤 東京

データ②:osaka_customers

名前 住所
鈴木 大阪
田中 東京

 コード

SELECT 名前, 住所 
FROM tokyo_customers
UNION
SELECT 名前, 住所 
FROM osaka_customers;

【実行結果】

名前 住所
田中 東京
佐藤 東京
鈴木 大阪

【使用例②】
下記のデータから抽出と平均をそれぞれ出していきます。
別々で出したものをUNIONでくっつけます

データ:purchases

購入ID 購入者名 金額 送料
1 A 60000 1500
2 B 40000 2500
3 C 55000 1800
4 D 30000 2200

コード

SELECT 購入ID, 購入者名, 金額, 送料
FROM purchases
WHERE 金額 >= 50000
UNION
SELECT NULL AS 購入ID,
       '平均送料' AS 購入者名,
       NULL AS 金額,
       AVG(送料) AS 送料
FROM purchases;

【実行結果】

購入ID 購入者名 金額 送料
1 A 60000 1500
3 C 55000 1800
平均送料 2000

【解説】
UNIONでくっつける時に行を調整して統合します。
いつものASと使い方が少し異なりますが、ASで列の調整をします

SELECT NULL AS 購入ID, ‘平均送料’ AS 購入者名, NULL AS 金額, AVG(送料) AS 送料

わけて解説していきます
①NULL AS 購入ID:購入IDは空白 ※NULLは空白です
②’平均送料’ AS 購入者名:購入者名に平均送料
③NULL AS 金額:金額は空白
④AVG(送料) AS 送料:送料にAVG(送料)

上の結果がこのカラム、
購入ID, 購入者名, 金額, 送料
で表示されるのでこの順番で割り当てていきます

上の文と下の文の形式が異なる時には調整をして統合をしていきます

【まとめ】
UNION は複数のSELECTをまとめる
列数と型を揃える必要がある
重複は自動的に削除される(残したい場合は UNION ALL
形式が違う場合はASで調整

実際にも一つにまとめた方が見やすくなるので、実務でも省略する時に使います!
使いこなしてみやすく圧縮してきましょう

コメント

タイトルとURLをコピーしました