当前位置: 首页 > news >正文

mysql学习教程,从入门到精通,SQL UNION 运算符(27)

1、SQL UNION 运算符

UNION 运算符在 SQL 中用于合并两个或多个 SELECT 语句的结果集,并默认去除重复的行。如果你想要包含所有重复行,可以使用 UNION ALL。下面是一个使用 UNION 运算符的示例,假设我们有两个表:employees_2020employees_2021,它们存储了不同年份的员工信息,每个表都有 employee_id(员工ID)和 employee_name(员工姓名)两个字段。

1.1、示例场景

我们想要查询 2020 年和 2021 年所有员工的姓名,但不希望结果中出现重复的员工姓名。

表结构

employees_2020

employee_idemployee_name
1Alice
2Bob
3Charlie

employees_2021

employee_idemployee_name
2Bob
3Charlie
4David

1.2、SQL 查询

SELECT employee_name
FROM employees_2020
UNION
SELECT employee_name
FROM employees_2021;

结果

employee_name
Alice
Bob
Charlie
David

解释

这个查询通过 UNION 合并了两个 SELECT 语句的结果集:第一个从 employees_2020 表中选择 employee_name,第二个从 employees_2021 表中选择 employee_name。由于 UNION 默认去除重复行,所以尽管 BobCharlie 在两个表中都出现,但在最终的结果集中只出现一次。

注意

  • 如果你的目的是包含所有重复行,应使用 UNION ALL 替代 UNION
  • UNION 要求每个 SELECT 语句中的列数必须相同,并且对应列的数据类型也需要兼容。
  • 在使用 UNION 时,默认情况下,SQL 会对结果集进行排序以去除重复项,这可能会影响查询性能。如果不需要排序或去重,使用 UNION ALL 可以提高性能。
  • 可以在 UNIONUNION ALL 后添加 ORDER BY 语句来对最终结果集进行排序。但请注意,ORDER BY 语句应放在最后一个 SELECT 语句之后,并且对所有合并后的列都有效。
    UNION 运算符在 SQL 中有广泛的用途,主要用于合并两个或多个 SELECT 语句的结果集。以下是一些常见的用途和例子:

1. 3、合并来自不同表的数据

这是 UNION 最直接的用途。当你想要从两个或多个具有相似结构(即列数相同且对应列的数据类型兼容)的表中检索数据时,可以使用 UNION 来合并这些表的结果。
例子
假设有两个表,sales_2020sales_2021,分别记录了 2020 年和 2021 年的销售数据,每个表都有 product_idsales_amount 字段。

SELECT product_id, sales_amount
FROM sales_2020
UNION
SELECT product_id, sales_amount
FROM sales_2021;

这个查询将返回 2020 年和 2021 年所有产品的销售金额,但不包括重复的产品(如果某个产品在两年中都有销售记录,则只会出现一次)。

1.4. 合并具有不同条件的查询结果

有时,你可能想要从同一个表中检索数据,但基于不同的条件。使用 UNION 可以将这些基于不同条件的查询结果合并为一个结果集。
例子
假设有一个 employees 表,包含员工的姓名(name)和部门(department)信息。你想要检索所有在“销售”部门或“市场”部门的员工姓名。

SELECT name
FROM employees
WHERE department = '销售'
UNION
SELECT name
FROM employees
WHERE department = '市场';

3. 跨数据库合并数据

虽然 UNION 本身是在单个数据库查询中使用的,但你可以通过数据库链接(如 Oracle 的数据库链接或 SQL Server 的链接服务器)来跨数据库合并数据。这通常涉及到更复杂的查询,但基本思想是相同的:从不同的数据源检索数据,并使用 UNION(或 UNION ALL)来合并结果。

4. 报告和数据分析

在生成报告或进行数据分析时,经常需要合并来自不同表或不同查询的数据集。UNION 允许你将这些数据集合并为一个,便于进一步的分析或报告生成。

5. 去除重复数据

虽然 UNION 的主要目的不是专门为了去除重复数据(因为那是它的默认行为),但在某些情况下,这正是你想要的。如果你想要从多个表中检索数据,并且只关心唯一的记录,那么 UNION 是一个很好的选择。

注意事项

  • 当使用 UNION 时,每个 SELECT 语句中的列数必须相同,并且对应列的数据类型也需要兼容。
  • UNION 默认去除重复的行。如果你想要包含所有重复的行,应该使用 UNION ALL
  • 可以在 UNIONUNION ALL 后面添加 ORDER BY 语句来对最终结果集进行排序,但 ORDER BY 必须位于最后一个 SELECT 语句之后。
  • 在某些情况下,使用 JOIN 而不是 UNION 可能更合适,特别是当你想要根据两个表之间的关系来合并数据时。然而,JOINUNION 在用途上是不同的,JOIN 用于基于相关列合并行的数据,而 UNION 用于合并不同的结果集。

相关文章:

  • 构建高可用和高防御力的云服务架构第二部分:SLB负载均衡(2/5)
  • muduo网络库介绍
  • 机器学习-模型集成
  • 信息安全工程师(25)网络安全体系框架主要组成和建设内容
  • WebAPI编程(第三天,第四天)
  • 【Linux】驱动的基本架构和编译
  • BUG项目管理
  • ListNode
  • jackson对于对象序列化的时候默认空值和手动传入的null的不同处理
  • JVM(HotSpot):虚拟机栈(JVM Stacks)与本地方法栈(Native Method Stacks)
  • 爬虫过程 | 蜘蛛程序爬取数据流程(初学者适用)
  • W39-02-jmeter中如何实现:下一个请求是需要根据前一个请求返回值进行循环请求
  • C++入门基础知识90(实例)——实例15【求两数的最大公约数】
  • 使用 MATLAB 处理和可视化 PCD 文件:点云过滤与保存的完整流程
  • Bigemap Pro首发(一款真正全面替代Arcgis的国产基础软件)
  • 【译】JS基础算法脚本:字符串结尾
  • canvas 绘制双线技巧
  • CentOS7 安装JDK
  • ES6 学习笔记(一)let,const和解构赋值
  • Median of Two Sorted Arrays
  • Mysql数据库的条件查询语句
  • PHP CLI应用的调试原理
  • php的插入排序,通过双层for循环
  • Redis 懒删除(lazy free)简史
  • Redis的resp协议
  • Sequelize 中文文档 v4 - Getting started - 入门
  • webpack4 一点通
  • 安卓应用性能调试和优化经验分享
  • 多线程事务回滚
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 小程序01:wepy框架整合iview webapp UI
  • 译有关态射的一切
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​你们这样子,耽误我的工作进度怎么办?
  • #includecmath
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (003)SlickEdit Unity的补全
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)mysql_MYSQL(三)
  • (算法)区间调度问题
  • (一)基于IDEA的JAVA基础10
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • ***检测工具之RKHunter AIDE
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Core使用NPOI导出复杂,美观的Excel详解