UNION 查询示例
如下列举了几个 UNION 查询示例,应用于不同的场景,涵盖不同的实际需求。
1. UNION 结合 GROUP BY 进行数据统计
如果我们有两个不同的销售表,想要统计不同地区的销售总额,我们可以这样做:
示例:合并不同表的销售数据,并计算总额
CREATE TABLE sales_2023 (
region TEXT,
total_sales INTEGER
);
CREATE TABLE sales_2024 (
region TEXT,
total_sales INTEGER
);
INSERT INTO sales_2023 VALUES ('North', 5000), ('South', 7000);
INSERT INTO sales_2024 VALUES ('North', 8000), ('West', 6000);
SELECT region, SUM(total_sales) AS total_revenue
FROM (
SELECT region, total_sales FROM sales_2023
UNION
SELECT region, total_sales FROM sales_2024
)
GROUP BY region;
结果
region | total_revenue
----------------------
North | 13000
South | 7000
West | 6000
解释
- 先用
UNION合并两年数据,再用GROUP BY统计每个region的总销售额。
2. UNION ALL 结合 COUNT(*) 统计数据量
如果你想合并多个表的数据,并统计每个来源的数据量:
SELECT '2023' AS year, COUNT(*) AS total_records FROM sales_2023
UNION ALL
SELECT '2024', COUNT(*) FROM sales_2024;
结果
year | total_records
----------------------
2023 | 2
2024 | 2
解释
- 这里我们加了
UNION ALL,因为我们不需要去重,只是统计各年份的记录数。
3. UNION 结合 CASE 进行数据分类
如果你想合并不同的数据表,并且为不同的数据加上分类标签:
SELECT name, 'Employee' AS category FROM employees
UNION
SELECT name, 'Manager' FROM managers;
结果
name | category
-------------------
Alice | Employee
Bob | Employee
Charlie | Manager
David | Manager
解释
UNION让employees和managers数据整合到一起,并通过CASE语句加上类别信息。
4. UNION 结合 JOIN 进行多表查询
如果你有多个订单表,想要获取所有用户的订单数据:
SELECT users.name, orders_2023.product
FROM users
INNER JOIN orders_2023 ON users.id = orders_2023.user_id
UNION
SELECT users.name, orders_2024.product
FROM users
INNER JOIN orders_2024 ON users.id = orders_2024.user_id;
解释
JOIN先关联users和orders_xxxx表,再用UNION合并不同年份的订单数据。
5. UNION 结合 LIMIT 进行分页
如果你想在合并数据后限制返回行数(分页),可以这样做:
SELECT name FROM users1
UNION
SELECT name FROM users2
ORDER BY name
LIMIT 5 OFFSET 10;
解释
LIMIT 5 OFFSET 10:跳过前 10 行,返回 5 行数据,适用于分页查询。
6. UNION 结合 HAVING 过滤数据
如果你想在 UNION 后根据某个计算值进行过滤:
SELECT region, SUM(total_sales) AS revenue
FROM (
SELECT region, total_sales FROM sales_2023
UNION
SELECT region, total_sales FROM sales_2024
)
GROUP BY region
HAVING revenue > 6000;
结果
region | revenue
----------------------
North | 13000
South | 7000
解释
HAVING revenue > 6000只保留总销售额大于 6000 的地区。
总结
| 用法 | 作用 |
|---|---|
UNION + GROUP BY | 统计合并数据的总和、均值等 |
UNION ALL + COUNT(*) | 计算数据量,不去重 |
UNION + CASE | 给不同来源数据加标签 |
UNION + JOIN | 合并多张表的关联数据 |
UNION + LIMIT | 实现分页查询 |
UNION + HAVING | 进行筛选,例如统计超过一定金额的订单 |
更多详细内容请关注其他相关文章。