Union
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 48/72。
Union(集合結合)は Join(結合)とは異なります。Join は条件を使用してテーブルを結合しますが、Union は単に一方のテーブルをもう一方のテーブルの上に追加します。UNION を使用するには、次のように記述します。
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2両方のSELECTは次のルールに従う必要があります。
- フィールドの数が一致していること
- 順序が重要であること
- 同じ位置にある列のデータ型が一致していること
例えば、次のような tables があると仮定しましょう:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
問題: 手元にあるすべての名前を含む、1つの大きなテーブルを作成したいとします。
SELECT name from germany_people
UNION
SELECT name from england_people結果:
| name |
| Lena |
| Leonie |
| George |
UNION は重複のない(一意の)値のみを返しますが、UNION ALL はすべてのレコードをそのまま返します:
SELECT name from germany_people
UNION ALL
SELECT name from england_people結果:
| name |
| 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 |
ここでは、Lena のような重複を保持するために UNION ではなく UNION ALL が使用されています。そうしないと、集計前に重複が削除されてしまいます。サブクエリがすべての行を結合し、その後に GROUP BY + COUNT がそれらを要約します。ORDER BY が最終的な result をソートします。
チャレンジ
簡単利用可能なテーブルと列:
<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 としてください。
結果を売上合計の降順で並べ替えてください。
自分で試してみよう
-- 3つのテーブルを1つの結果に積み重ね、すべての行を保持する
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- 製品ごとに1行、合計が最も大きいものから
GROUP BY ____
ORDER BY ____ DESC;このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
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自分で練習してみよう: SQLプレイグラウンド