开篇介绍
在前两篇中讲解到了 Merge 和 Merge Join 的操作,今天这篇文章讲解的是关于 Union All 的操作。
Union All
首先在什么时候需要使用到 Union All?
与 Merge 和 Merge Join 不同,使用 Union All 的最显著的特点就是:
- 两个或者两个以上的输入源。
- 不需要排序,输出结果也不需要排序。
测试数据
-- Merge demo table
IF OBJECT_ID(\'T038_CUSTOMER\',\'U\') IS NOT NULL
DROP TABLE T038_CUSTOMER
GO
CREATE TABLE T038_CUSTOMER
(
CustomerID INT PRIMARY KEY,
CustomerCompany NVARCHAR(255),
CustomerName NVARCHAR(20),
CustomerAddress NVARCHAR(255)
)
INSERT INTO T038_CUSTOMER VALUES
(1,\'HFBZG\',\'Allen,Michael\',\'Obere Str. 0123\'),
(2,\'MLTDN\',\'Hassall, Mark\',\'Avda. de la Constitución 5678\'),
(3,\'KBUDE\',\'Peoples, John\',\'Mataderos 1000\'),
(6,\'HFBZG\',\'Allen,Michael\',\'Obere Str. 0123\')
SELECT * FROM T038_CUSTOMER
源文件 1的 ID 5 两条数据是相同的。
源文件 2 的第 1 条和源文件 1 的第 1 条是完全一样的。
下面要合并的是这三个数据源的数据,因此需要使用到 UNION ALL。
合并数据的时候也要求合并列的数据类型要一致,否则就会出现下列错误。
执行包可以看到各自合并之前的条数。
可以看到所有的数据都合并在一起往下输出了,保留了重复记录的同时,输出结果也未排序。
总结 Union All 的使用特点
- 数据源可以由 2 个或者 2个以上的输入源组成。
- 数据源可以是表,也可以是文件。
- 合并列的数据类型要求相同。
- 合并前不需要排序操作。
- 合并后的输出也非已排序输出。
- 保留重复数据,类似于 SQL Server 中的 Union All。
Merge,Merge Join 和 Union All 的异同