union all 关联查询
UNION ALL
并非用于表的关联查询,而是用于将多个 SELECT
语句的结果集合并成一个结果集。它会保留所有重复的行,不像 UNION
会去除重复行。下面为你提供几种使用 UNION ALL
的场景示例。
示例表结构
假设存在两个表 sales_2024
和 sales_2025
,它们的结构相同,都有 sale_id
(销售编号)、product_name
(产品名称)、quantity
(销售数量)和 sale_date
(销售日期)字段。
1. 合并两个表的数据
下面的 SQL 语句使用 UNION ALL
把 sales_2024
和 sales_2025
表的数据合并成一个结果集:
union-all-queryMySQL UNION ALL 关联查询示例
生成 union_all_two_tables.sql
SELECT sale_id, product_name, quantity, sale_date
FROM sales_2025
WHERE quantity > 100
UNION ALL
SELECT sale_id, product_name, quantity, sale_date
FROM sales_2025
WHERE quantity <= 100;
生成 union_all_different_conditions.sql
SELECT sale_id, product_name, quantity, sale_date
FROM sales_2024
UNION ALL
SELECT sale_id, product_name, quantity, sale_date
FROM sales_2025;
生成 union_all_with_join.sql
SELECT s.sale_id, p.product_name, s.quantity, s.sale_date
FROM sales_2024 s
JOIN products p ON s.product_name = p.product_name
UNION ALL
SELECT s.sale_id, p.product_name, s.quantity, s.sale_date
FROM sales_2025 s
JOIN products p ON s.product_name = p.product_name;
2. 合并不同条件下的查询结果
假设你想从 sales_2025
表中分别获取销售量大于 100 和销售量小于等于 100 的记录,并将它们合并成一个结果集,可以使用如下 SQL 语句:
3. 结合关联查询使用 UNION ALL
若要在关联查询中使用 UNION ALL
,可以先进行关联查询,然后将多个关联查询的结果合并。假设除了 sales_2024
和 sales_2025
表,还有一个 products
表,包含 product_id
(产品编号)和 product_name
(产品名称)字段。下面的 SQL 语句将两个年份的销售数据与产品表关联查询的结果合并:
你可根据实际的表结构和业务需求对上述 SQL 语句进行调整。