【数据库|第11期】深入掌握 SQL Server、Access 与 SQLite 中的 `UNION` 与 `UNION ALL`:从理论到实践

日期:2024年9月3日

作者:Commas

签名:(ง •_•)ง 积跬步以致千里,积小流以成江海......

注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^

1.01^365^ = 37.7834;0.99^365^ = 0.0255

1.02^365^ = 1377.4083;0.98^365^ = 0.0006


文章目录



一、前言


在数据库查询中,UNIONUNION ALL 是两个至关重要的操作符,它们用于合并多个 SELECT 语句的结果集,为数据的整合与分析提供了强大的工具。本文将通过实例深入探讨这两个操作符在 SQL ServerAccess 以及 SQLite 中的用法,帮助你从理论到实践,全面掌握其应用技巧。

二、UNION:去除重复,保留唯一


UNION 操作符用于合并两个或多个 SELECT 语句的结果集,同时自动去除其中的重复行,确保每一条记录的唯一性。这意味着即使多个 SELECT 语句中含有相同的数据行,UNION 也会确保结果集中不出现重复。

1、基本语法

sql 复制代码
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

其中 column_name(s) 表示列名(字段),可以是一个,也可以很多个。重要的是,所有选择列表中的列数必须相同 ,对应的列必须具有兼容的数据类型 ,列的顺序必须相同

2、代码示例

假设我们有两个表 EmployeesContractors,它们都有 NameSalary 字段。

SQL ServerAccess 以及 SQLite 示例如下所示:

sql 复制代码
SELECT Name, Salary FROM Employees
UNION
SELECT Name, Salary FROM Contractors;

若按 Salary 字段从大到小排序,则:

sql 复制代码
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、基本语法

sql 复制代码
SELECT column_name(s) FROM table1
UNION All
SELECT column_name(s) FROM table2;

其中 column_name(s) 表示列名(字段),可以是一个,也可以很多个。重要的是,所有选择列表中的列数必须相同 ,对应的列必须具有兼容的数据类型 ,列的顺序必须相同

2、代码示例

假设我们有两个表 EmployeesContractors,它们都有 NameSalary 字段。

SQL ServerAccess 以及 SQLite 示例如下所示:

sql 复制代码
SELECT Name, Salary FROM Employees
UNION ALL
SELECT Name, Salary FROM Contractors;

若按 Salary 字段从大到小排序,则:

sql 复制代码
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 通常比 AccessSQLite 更优。
  • 在兼容性方面,SQLite 由于其轻量级特性,可能在某些特定环境下更受欢迎,尤其是在移动设备和嵌入式系统中。

五、结语


无论是 SQL Server 的专业级应用,Access 的桌面级处理,还是 SQLite 的轻量级需求,UNIONUNION ALL 都是数据整合中的得力助手。选择哪个操作符,取决于你对数据重复性的需求。当数据的唯一性比完整性和效率更重要时,UNION 是你的首选;反之,如果数据完整性和效率至上,UNION ALL 更能胜任。


参考文章:


版权声明:本文为博主原创文章,如需转载,请给出:

原文链接:https://blog.csdn.net/qq_35844043/article/details/141676192

相关推荐
瓜牛_gn1 小时前
mysql特性
数据库·mysql
奶糖趣多多2 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt3 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧5 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis6 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil277 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk8 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境8 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n8 小时前
MYSQL库的操作
数据库·mysql