DB2 UNION 与 UNION ALL 详解 | AI生成和翻译

Home 2026.01

Question: 在 DB2 中,UNION ALL 和 UNION 代表什么意思?

Answer:

在 DB2(以及通用的 SQL)中,UNIONUNION ALL 都是集合操作符(set operators),用于将两个或多个 SELECT 语句的结果集组合为一个单一的结果集。它们将行垂直堆叠(将一个查询的行追加到另一个查询的行下方)。

核心区别

对比表

特性 UNION UNION ALL
是否移除重复项?
Performance 较慢(需要排序/去重) 较快(无需去重)
适用场景 只需要不重复的行时 需要所有行(即使重复)时
典型用例 合并相似数据且不重复 汇总 logs、历史数据 + 当前数据、递归 CTE

共同规则

简单示例

-- 假设这两个表中有一些重叠的 CITY 值

SELECT CITY FROM CUSTOMERS
UNION
SELECT CITY FROM SUPPLIERS;
-- 仅返回唯一的城市

SELECT CITY FROM CUSTOMERS
UNION ALL
SELECT CITY FROM SUPPLIERS;
-- 返回所有城市,如果同一个城市在两个表中都出现,则包含重复项

Performance 提示

UNION ALL 几乎总是比 UNION 快,因为 DB2 不需要为了去重而比较行(这通常涉及排序或哈希操作)。 除非你明确需要移除重复项,否则请默认使用 UNION ALL

特殊情况

在 DB2 的递归 Common Table Expressions (CTE) 中,你必须在 anchor member 和 recursive member 之间使用 UNION ALL —— 不允许使用 UNION

References:


Back

x-ai/grok-4.1-fast

Donate