今回は 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で調整
実際にも一つにまとめた方が見やすくなるので、実務でも省略する時に使います!
使いこなしてみやすく圧縮してきましょう
コメント