📜  MS SQL Server 中的 Union 和 Union All(1)

📅  最后修改于: 2023-12-03 14:44:24.993000             🧑  作者: Mango

MS SQL Server 中的 Union 和 Union All

在 MS SQL Server 中,有两种将多个表合并在一起的方法:Union 和 Union All。它们的作用都是将两个或多个 SELECT 语句的结果集合并成一个结果集。但是在合并结果集时,它们有所不同。

Union

Union 运算符将两个或多个结果集合并成一个结果集,并去除重复行。下面是 Union 运算符的语法:

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

Union 只返回不同的行,如果结果中已经有该行,它不会再次出现。Union 的效率较低,因为它需要对结果集进行排序和去重操作。

下面是一个 Union 的例子:

SELECT name FROM table1
UNION
SELECT name FROM table2;

该语句将返回 table1 和 table2 表中所有不同的 name 列数据。如果 table1 和 table2 表中都有相同的 name 数据,则只保留一个。

Union All

Union All 运算符将两个或多个结果集合并成一个结果集,但不去除重复行。下面是 Union All 运算符的语法:

SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;

Union All 返回所有符合条件的行,包括重复的行。Union All 相比于 Union,效率更高,因为它不需要排序和去重操作。

下面是一个 Union All 的例子:

SELECT name FROM table1
UNION ALL
SELECT name FROM table2;

该语句将返回 table1 和 table2 表中所有的 name 列数据,如果 table1 和 table2 表中都有相同的 name 数据,则都会出现在结果集中。

总结

Union 和 Union All 都是将多个表合并成一个结果集的方法。如果需要去除重复行,则使用 Union;如果需要返回所有行,则使用 Union All。

在使用 Union 或 Union All 时,需要保证 SELECT 语句的列数和数据类型必须相同。如果不同,则需要进行类型转换或添加别名来使它们相同。

同时需要注意的是,Union 和 Union All 的使用也需要考虑查询的效率,根据具体的业务场景选择合适的方法。