1. 使用方法
在 SQL 中,
UNION ALL
?操作用于結合兩個或更多?SELECT
?語句的結果集,包括所有匹配的行,甚至包括重復的行。這與?UNION
?不同,因為?UNION
?會自動刪除重復的行。滿足條件:
1、兩個select查詢的列的數量必須相同。
2、每個列的數據類型需要相似。
2. 案例一
假設有兩個表,table1
?和?table2
,它們都有相同的列結構(例如,都有?id
?和?name
?列):
-- table1 的數據
id | name
---|------
1 | Alice
2 | Bob -- table2 的數據
id | name
---|------
3 | Carol
2 | Bob
?如果你想從這兩個表中檢索所有的行,并保留可能的重復行,你可以使用?UNION ALL
:
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;
這將返回以下結果:
id | name
---|------
1 | Alice
2 | Bob
3 | Carol
2 | Bob
3. 案例二
列轉換成行
假設我們有一個表sales_summary
,它包含了每種產品的銷售額匯總:
CREATE TABLE sales_summary (A_sales DOUBLE,B_sales DOUBLE,C_sales DOUBLE
);INSERT INTO sales_summary VALUES (250, 200, 300),(100,190,800),(290,290,880),(280,720,990);
現在,我們想要將這個表轉換為每行一個產品及其銷售額的格式。我們可以使用UNION ALL
來實現這一點:
SELECT 'A' AS product_type, A_sales AS amount FROM sales_summary
UNION ALL
SELECT 'B' AS product_type, B_sales AS amount FROM sales_summary
UNION ALL
SELECT 'C' AS product_type, C_sales AS amount FROM sales_summary;
?返回結果: