UNION 查询示例
                           
天天向上
发布: 2025-03-04 19:30:48

原创
963 人浏览过

如下列举了几个 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

解释

  • UNIONemployeesmanagers 数据整合到一起,并通过 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 先关联 usersorders_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进行筛选,例如统计超过一定金额的订单

更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *