SQL UNION 操作符
SQL UNION 操作符详解
SQL UNION 操作符用于将两个或多个 SELECT 语句的结果集合并成一个结果集。UNION 操作符必须满足以下条件:
- UNION 操作符连接的 SELECT 语句必须拥有相同数量的列。
- 列数据类型必须兼容。例如,如果第一个 SELECT 语句中的第一列是字符串类型,则第二个 SELECT 语句中的第一列也必须是字符串类型。
UNION 操作符语法
UNION 操作符语法如下:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
UNION 操作符会根据第一个 SELECT 语句的结果集的列名和列数据类型来确定结果集的列名和列数据类型。因此,在使用 UNION 操作符时,需要确保两个 SELECT 语句的结果集具有相同的列名和列数据类型。
UNION ALL 操作符
SQL UNION 操作符会从结果集中删除重复的行,而 UNION ALL 操作符则不会。因此,如果希望结果集中包括重复的行,则应该使用 UNION ALL 操作符。
UNION ALL 操作符的语法如下:
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2;
UNION ALL 操作符会将两个结果集合并成一个结果集,并将结果集中的所有行包括在内,而不管它们是否重复。
例子
例如,在下面的两个表中分别查找客户表和订单表:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds | Maria | Germany |
2 | Ana Trujillo | Ana | Mexico |
3 | Antonio | Antonio | Mexico |
OrderID | CustomerID | OrderDate |
---|---|---|
1 | 1 | 2020-01-01 |
2 | 1 | 2020-01-02 |
3 | 2 | 2020-01-03 |
则可以使用 UNION 操作符将两个结果集合并成一个结果集,例如:
SELECT CustomerName, Country FROM Customers
UNION
SELECT CustomerName, NULL FROM Orders;
结果集如下:
CustomerName | Country |
---|---|
Alfreds | Germany |
Ana Trujillo | Mexico |
Antonio | Mexico |
Ana Trujillo | NULL |
Alfreds | NULL |
注意事项
- 如果某个结果集的 SELECT 语句中有 ORDER BY 子句,则 UNION 操作符会在合并结果集时保留原来的顺序。
- 如果有多个 UNION 操作符,则操作符之间的顺序也会影响结果集。理论上来说,可以使用圆括号来控制 UNION 操作符的顺序。
总结
SQL UNION 操作符用于将两个或多个 SELECT 语句的结果集合并成一个结果集。UNION 操作符必须满足条件:连接的 SELECT 语句必须拥有相同数量的列,列数据类型必须兼容。UNION ALL 操作符不会删除重复的行,应该在需要包含重复行的情况下使用。在使用 UNION 操作符时,需要注意列名和列数据类型必须相同。