Union
CoddyのSQLジャーニー「基礎」セクションの一部 — レッスン 48/72。
Union(ユニオン)はJoin(結合)とは異なります。Join(結合)は条件を使用してテーブルを組み合わせますが、Union(ユニオン)は単に2つのテーブルを上下に重ね合わせます。UNIONを使用するには、次のように記述します:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2両方のselect文は、以下のルールに従う必要があります:
- フィールドの数が等しいこと
- 順序が重要であること
- 同じ位置にあるカラムのデータ型が一致していること
例えば、次のようなテーブルがあると仮定しましょう。
germany_people
| ID | 名前 |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | 名前 |
| 1 | ジョージ |
| 2 | レナ |
問題: 手元にあるすべての名前をまとめた1つの大きなテーブルを作成したいとします。
SELECT name from germany_people
UNION
SELECT name from england_people結果:
| 名前 |
| Lena |
| Leonie |
| George |
UNION は**一意の**値のみを返しますが、UNION ALL はすべてのレコードをそのまま返します:
SELECT name from germany_people
UNION ALL
SELECT name from england_people結果:
| 名前 |
| Lena |
| Leonie |
| George |
| Lena |
UNION ALL を集計関数、GROUP BY、および ORDER BY と組み合わせて、複数のテーブルにわたるデータを集計することもできます。コツは、UNION ALL をサブクエリの中にラップし、その上でグルーピングとソートを適用することです。
例えば、両方のテーブルでそれぞれの名前が何回現れるかを数えたいとしましょう:
SELECT name, COUNT(*) AS total_count
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC結果:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
ここでは、UNION ALL(UNION ではなく)が使用されているため、Lena のような重複が保持されます。そうしないと、カウントする前に削除されてしまいます。サブクエリがすべての行をマージし、その後に GROUP BY + COUNT がそれらを集計します。ORDER BY が最終結果をソートします。
チャレンジ
簡単利用可能なテーブルとカラム:
<strong>sales_2009</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong><strong>sales_2010</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong><strong>sales_2011</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong>
3つの売上テーブルがあります。
すべてのテーブルを合わせた、各製品の売上の合計を求めてください。
結果には product_id と売上合計を含める必要があります。
このカラムの名前を total_sales としてください。
結果を売上合計の降順で並べ替えてください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns