【数据库|第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 与 UNION ALL 是两个至关重要的操作符,它们用于合并多个 SELECT 语句的结果集,为数据的整合与分析提供了强大的工具。本文将通过实例深入探讨这两个操作符在 SQL Server、Access 以及 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、代码示例

假设我们有两个表 Employees 和 Contractors,它们都有 Name 和 Salary 字段。

SQL Server、Access 以及 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、代码示例

假设我们有两个表 Employees 和 Contractors,它们都有 Name 和 Salary 字段。

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

五、结语


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


参考文章:


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

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

相关推荐
阳光九叶草LXGZXJ7 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客7 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
OnlineProxy9 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋20111 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_12 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼12 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川12 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路13 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna13 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白13 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库