【数据库|第11期】深入掌握 SQL Server、Access 与 SQLite 中的 `UNION` 与 `UNION ALL`:从理论到实践
日期:2024年9月3日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助
,帮忙点个赞
,也可以关注我
,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006
文章目录
- 一、前言
- 二、`UNION`:去除重复,保留唯一
- 1、基本语法
- 2、代码示例
- 三、`UNION ALL`:合并所有,保留全部
- 1、基本语法
- 2、代码示例
- 四、注意事项
- 五、结语
一、前言
在数据库查询中,UNION
与 UNION ALL
是两个至关重要的操作符,它们用于合并多个 SELECT
语句的结果集,为数据的整合与分析提供了强大的工具。本文将通过实例深入探讨这两个操作符在 SQL Server
、Access
以及 SQLite
中的用法,帮助你从理论到实践,全面掌握其应用技巧。
二、UNION
:去除重复,保留唯一
UNION
操作符用于合并两个或多个 SELECT
语句的结果集,同时自动去除其中的重复行,确保每一条记录的唯一性。这意味着即使多个 SELECT
语句中含有相同的数据行,UNION
也会确保结果集中不出现重复。
1、基本语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
其中 column_name(s)
表示列名(字段),可以是一个,也可以很多个。重要的是,所有选择列表中的列数必须相同,对应的列必须具有兼容的数据类型,列的顺序必须相同。
2、代码示例
假设我们有两个表 Employees
和 Contractors
,它们都有 Name
和 Salary
字段。
SQL Server
、Access
以及 SQLite
示例如下所示:
SELECT Name, Salary FROM Employees
UNION
SELECT Name, Salary FROM Contractors;
若按 Salary
字段从大到小排序,则:
SELECT Name, Salary FROM Employees
UNION
SELECT Name, Salary FROM Contractors;
ORDER BY Salary DESC
示例数据:
Employees
:
Name | Salary |
---|---|
张三 | 10000 |
李四 | 9000 |
王五 | 11000 |
Contractors
:
Name | Salary |
---|---|
李四 | 9000 |
王五 | 11000 |
赵六 | 12000 |
运行上述UNION
命令后,结果将去除重复的记录,仅保留唯一值。
Name | Salary |
---|---|
张三 | 10000 |
李四 | 9000 |
王五 | 11000 |
赵六 | 12000 |
排序后
Name | Salary |
---|---|
赵六 | 12000 |
王五 | 11000 |
张三 | 10000 |
李四 | 9000 |
三、UNION ALL
:合并所有,保留全部
与 UNION
不同,UNION ALL
保留所有的行,包括重复的行。这意味着,如果多个 SELECT
语句中存在重复的数据,UNION ALL
会将这些行全部保留,不进行任何去重操作。
1、基本语法
SELECT column_name(s) FROM table1
UNION All
SELECT column_name(s) FROM table2;
其中 column_name(s)
表示列名(字段),可以是一个,也可以很多个。重要的是,所有选择列表中的列数必须相同,对应的列必须具有兼容的数据类型,列的顺序必须相同。
2、代码示例
假设我们有两个表 Employees
和 Contractors
,它们都有 Name
和 Salary
字段。
SQL Server
、Access
以及 SQLite
示例如下所示:
SELECT Name, Salary FROM Employees
UNION ALL
SELECT Name, Salary FROM Contractors;
若按 Salary
字段从大到小排序,则:
SELECT Name, Salary FROM Employees
UNION ALL
SELECT Name, Salary FROM Contractors;
ORDER BY Salary DESC
示例数据:
Employees
:
Name | Salary |
---|---|
张三 | 10000 |
李四 | 9000 |
王五 | 11000 |
Contractors
:
Name | Salary |
---|---|
李四 | 9000 |
王五 | 11000 |
赵六 | 12000 |
运行上述UNION
命令后,结果将去除重复的记录,仅保留唯一值。
Name | Salary |
---|---|
张三 | 10000 |
李四 | 9000 |
王五 | 11000 |
李四 | 9000 |
王五 | 11000 |
赵六 | 12000 |
排序后
Name | Salary |
---|---|
赵六 | 12000 |
王五 | 11000 |
王五 | 11000 |
张三 | 10000 |
李四 | 9000 |
李四 | 9000 |
四、注意事项
UNION
操作符默认去除重复的记录。如果需要包含重复记录,可以使用UNION ALL
。UNION
通常会比UNION ALL
执行得慢,因为它需要额外的步骤来去除重复的行。UNION
的结果集默认会进行排序,而UNION ALL
不会。- 所有选择列表中的列数必须相同,对应的列必须具有兼容的数据类型,列的顺序必须相同。
- 在性能方面,对于大型数据库,
SQL Server
通常比Access
和SQLite
更优。 - 在兼容性方面,
SQLite
由于其轻量级特性,可能在某些特定环境下更受欢迎,尤其是在移动设备和嵌入式系统中。
五、结语
无论是 SQL Server
的专业级应用,Access
的桌面级处理,还是 SQLite
的轻量级需求,UNION
和 UNION ALL
都是数据整合中的得力助手。选择哪个操作符,取决于你对数据重复性的需求。当数据的唯一性比完整性和效率更重要时,UNION
是你的首选;反之,如果数据完整性和效率至上,UNION ALL
更能胜任。
参考文章:
- 《SQL UNION 操作符》
- 《SQLite Unions 子句》
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/141676192