1. 使用方法
在 SQL 中,
UNION ALL
操作用于结合两个或更多SELECT
语句的结果集,包括所有匹配的行,甚至包括重复的行。这与UNION
不同,因为UNION
会自动删除重复的行。满足条件:
1、两个select查询的列的数量必须相同。
2、每个列的数据类型需要相似。
2. 案例一
假设有两个表,table1
和 table2
,它们都有相同的列结构(例如,都有 id
和 name
列):
java
-- table1 的数据
id | name
---|------
1 | Alice
2 | Bob
-- table2 的数据
id | name
---|------
3 | Carol
2 | Bob
如果你想从这两个表中检索所有的行,并保留可能的重复行,你可以使用 UNION ALL
:
java
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;
这将返回以下结果:
java
id | name
---|------
1 | Alice
2 | Bob
3 | Carol
2 | Bob
3. 案例二
列转换成行
假设我们有一个表sales_summary
,它包含了每种产品的销售额汇总:
java
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
来实现这一点:
java
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;
返回结果: