【数据库|第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


文章目录



一、前言


在数据库查询中,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

相关推荐
李元豪1 小时前
grpo nl2sql qwen3 模型强化学习训练有效果的成立条件有哪些
数据库·oracle
Hello.Reader4 小时前
RedisJSON 路径语法深度解析与实战
数据库·redis·缓存
TDengine (老段)5 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
设计师小聂!7 小时前
Linux系统中部署Redis详解
linux·运维·数据库·redis
kfepiza7 小时前
Debian-10编译安装Mysql-5.7.44 笔记250706
linux·数据库·笔记·mysql·debian·bash
Touper.7 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
不剪发的Tony老师7 小时前
phpMyAdmin:一款经典的MySQL在线管理工具又回来了
数据库·mysql·phpmyadmin
极限实验室7 小时前
TDBC 2025 可信数据库发展大会,极限科技邀您来赴约!
数据库
lixia0417mul29 小时前
使用Starrocks替换Clickhouse的理由
数据库
张璐月10 小时前
mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
数据库·mysql·性能优化