MySQL UNION 操作符详细说明

目录

MySQL UNION 操作符详细说明

1. UNION 操作符简介

2. 基本语法

3. 使用规则和限制

4. UNION vs UNION ALL

5. 示例演示

6. 注意事项


MySQL UNION 操作符详细说明

MySQL 中的 UNION 操作符用于合并两个或多个 SELECT 语句的结果集,生成一个单一的结果集。它常用于从多个表或查询中提取数据并进行整合。以下是其详细说明,我将从基本概念、语法、规则、示例和注意事项等方面逐步解释。

1. UNION 操作符简介
  • UNION 操作符将多个 SELECT 语句的结果合并为一个结果集。
  • 默认情况下,UNION 会自动去除重复行(即结果中只保留唯一行)。如果不需要去重,可以使用 UNION ALL
  • 它适用于需要组合相关数据但存储在不同表或查询中的场景,例如合并销售记录或用户数据。
2. 基本语法

UNION 的基本语法结构如下:

SELECT column1, column2, ... FROM table1
UNION [ALL]
SELECT column1, column2, ... FROM table2
[UNION [ALL]
SELECT column1, column2, ... FROM table3 ...]
[ORDER BY ...]
[LIMIT ...];

  • 关键词解释
    • SELECT:每个 UNION 必须包含至少两个 SELECT 语句。
    • UNIONUNION ALLUNION 去重,UNION ALL 保留所有行(包括重复)。
    • ORDER BY:可选项,用于对整个结果集排序(必须放在所有 SELECT 语句后)。
    • LIMIT:可选项,限制返回的行数。
  • 注意:所有 SELECT 语句的列数和顺序必须一致。
3. 使用规则和限制
  • 列数和顺序
    • 每个 SELECT 语句必须返回相同数量的列,记为 $n$(其中 $n$ 是列数)。
    • 对应列的数据类型必须兼容(例如,整数列不能与字符串列直接合并)。
  • 列名处理
    • 结果集的列名默认使用第一个 SELECT 语句的列名。
    • 如果列名不同,后续 SELECT 的列名会被忽略。
  • 重复行处理
    • UNION:自动去除重复行(基于所有列的值比较)。
    • UNION ALL:保留所有行,不检查重复,性能更高。
  • 其他限制
    • UNION 不能用于合并 INSERT, UPDATE, 或 DELETE 语句。
    • 如果使用 ORDER BYLIMIT,它们必须放在最后一个 SELECT 语句后。
    • 子查询中可以使用 UNION
4. UNION vs UNION ALL
  • 区别
    • UNION:执行去重操作,适用于需要唯一结果的场景。例如,合并用户 ID 列表时去除重复。
    • UNION ALL:不执行去重,适用于需要完整数据或性能优先的场景。例如,合并日志记录时保留所有条目。
  • 性能考虑
    • UNION 由于需要去重,可能比 UNION ALL 慢,尤其当数据量大时。
    • 在不需要去重时,优先使用 UNION ALL 以提高效率。
5. 示例演示

以下是一个简单示例,展示如何合并两个表的数据:

  • 场景:有两个表 employeescontractors,都包含 namesalary 列。需要合并所有人员的姓名和工资。
-- 创建示例表(实际使用时无需此步)
CREATE TABLE employees (name VARCHAR(50),salary INT
);
INSERT INTO employees VALUES ('Alice', 50000), ('Bob', 60000);CREATE TABLE contractors (name VARCHAR(50),salary INT
);
INSERT INTO contractors VALUES ('Bob', 60000), ('Charlie', 70000);-- 使用 UNION 合并并去重
SELECT name, salary FROM employees
UNION
SELECT name, salary FROM contractors
ORDER BY salary DESC;

  • 结果解释
    • 原始数据:employees 有 ('Alice', 50000), ('Bob', 60000);contractors 有 ('Bob', 60000), ('Charlie', 70000)。
    • UNION 输出:去重后结果为 ('Alice', 50000), ('Bob', 60000), ('Charlie', 70000)。注意 'Bob' 只出现一次。
    • 如果使用 UNION ALL:结果为 ('Alice', 50000), ('Bob', 60000), ('Bob', 60000), ('Charlie', 70000)。
6. 注意事项
  • 性能优化
    • 对大表使用 UNION 时,确保 SELECT 语句高效(例如,添加索引)。
    • 优先用 UNION ALL 除非需要去重。
  • 排序和分页
    • ORDER BY 必须放在最后,影响整个结果集。例如:
      SELECT name FROM table1
      UNION
      SELECT name FROM table2
      ORDER BY name;
      

    • LIMIT 同样放在最后,限制总行数。
  • 数据类型兼容
    • 如果列类型不兼容(如 INTVARCHAR),MySQL 会尝试隐式转换,但可能导致错误或数据丢失。建议手动转换,例如:
      SELECT CAST(age AS CHAR) AS info FROM users
      UNION
      SELECT name FROM employees;
      

  • 错误处理
    • 常见错误包括列数不匹配(Error 1222)或类型不兼容(Error 1265)。检查每个 SELECT 语句的结构。
  • 适用场景
    • 适合数据报表、分析查询。
    • 不适合高频事务处理,因为它可能影响性能。

通过以上说明,您应该能理解 UNION 操作符的核心用法。在实际应用中,根据需求选择 UNIONUNION ALL,并注意优化查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918022.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD

Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD Dify 入门到精通系列文章目录 第一篇《Dify 究竟是什么?真能开启低代码 AI 应用开发的未来?》介绍了 Dify 的定位与优势第二篇《Dify 的核心组件&#x…

VSCode ssh一直在Setting up SSH Host xxx: Copying VS Code Server to host with scp等待

原因 大概率是远程服务器的下载有问题 原因1 远程服务器的网络不好 原因2 远程服务器的磁盘满了 我遇到的就是第二种,解决方法也很简单 VSCode ——> Help ——> About 会出现一些信息,例如下面的 Version: 1.97.2 (user setup) Commit: e54c774e0…

Spring Cloud 项目注册 Nacos 时设置真实 IP 的多种方式【多网卡/虚拟机实用指南】

🚀 Spring Cloud 项目注册 Nacos 时设置真实 IP 的多种方式【多网卡/虚拟机实用指南】 前言 在使用 Spring Cloud Alibaba Nacos 注册服务时,常常会遇到 注册 IP 异常 的问题: 本机有多个网卡(如 Docker、VM 虚拟机、VPN&#xf…

单片机裸机程序设计架构

文章目录一、前后台系统(Foreground-Background System)二、时间片轮询架构(Time-Slicing Polling)三、状态机架构(State Machine)四、事件驱动架构(Event-Driven)五、架构设计原则总…

odoo-061 PostgreSQL 中处理 NULL 值的 SQL 条件写法

文章目录1. 检查是否为 NULL2. NULL 值与比较运算符3. 在聚合函数中处理 NULL4. 在 WHERE 子句中的复杂条件注意事项在 PostgreSQL 中处理 NULL 值需要特别注意,因为 NULL 表示"未知"或"不存在"的值,与普通值的行为不同。以下是几种…

Flink CDC 介绍

一、什么是 CDCCDC 是 Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务…

暑期第三周(7.28-8.3)

其实 web [SWPUCTF 2021 新生赛]easy_sql 开启环境后看到一个提示“球球你输入点东西吧!”没有其他信息,就看看源码 直接试试get传参 有所显示 看看是字符型还是数字型 可以判定是字符型 接下来判断闭合类型 根据显示,可以得知是单引…

【物联网】基于树莓派的物联网开发【21】——MQTT获取树莓派传感器数据广播实战

场景介绍 今天程序猫带领大家如何获取树莓派传感器温湿度数据,并用MQTT进行广播。 实现过程 启动MQTT服务 1、终端启动Mosquitto服务 sudo systemctl start mosquitto 2、设置服务开机自动启动 sudo systemctl enable mosquitto硬件连接 树莓派4b连接GPIO引脚与DHT1…

Mysql自定义顺序查询

1、使用函数MySQL 的 ORDER BY FIELD() 函数可以按照指定的自定义顺序对查询结果进行排序,而不是默认的升序(ASC)或降序(DESC)。2、适用场景后端/运营人员经常需要临时把某几条记录‘拽’到最前(或最后&…

回归预测 | MATLAB实现RBF径向基神经网络多输入单输出回归预测+SHAP可解释分析

目录 基于RBF径向基神经网络多输入单输出回归预测及SHAP可解释分析的研究 摘要 1. 引言 1.1 研究背景 1.2 研究意义 1.3 研究目标与内容 2. 文献综述 2.1 RBF径向基神经网络研究现状 2.2 SHAP可解释分析研究进展 3. RBF径向基神经网络原理 4. SHAP可解释分析理论基础 4.1 Shapl…

--- Eureka 服务注册发现 ---

Euraka 是netfix开发的基于REST服务基于AP框架的注册中心,主要是用于服务的注册,管理,负载均衡,服务故障转移 Eureka主要分俩部分Eureka Server:服务中心Server端,提供服务注册 发现 健康检查等服务Eureka …

vue3 el-select 加载内容后 触发事件

在 Vue 3 中使用 Element UI 的 el-select 组件实现加载内容后触发事件,主要有以下两种常见需求及实现方式:加载数据后触发事件若需在数据加载完成后触发特定事件(如页面渲染完成),可通过自定义指令监听滚动容器状态&a…

c# winform 调用 海康威视工业相机(又全又细又简洁)

1.准备一个海康相机 从垃圾桶里翻出来一个USB口相机。 2.下载MVS 和SDK 海康机器人-机器视觉-下载中心 mvs: sdk: 用MVS 调试一下,能连接就行。 海康威视相机,MVS连接成功,但无图像怎么办?-CSDN博客 3.打…

前端页面直接生成PDF下载文件

前言 因为要实现业务需求如下图,业务逻辑,该凭证为前端代码实现,为了简单方便实现下载为pdf的需求。 一、怎么在前端直接生成PDF? 需求描述:浏览器打开的这个页面,点击下载,把当前弹框页面的…

性能优化——GPU的影响

关闭MSAA 之前在查一个渲染问题,一开始是定位到了CPU在waitforFrame所以知道是GPU的问题但如何定义GPU的问题在哪里,就很麻烦。我一开始以为是drawcall的问题,因为我发现drawcall有350个但降低到30个后,依然情况没有好转。毕竟dra…

软件需求关闭前的质量评估标准是什么

在 需求关闭前,进行 质量评估 是确保需求被完整实现、测试充分且满足业务目标的关键步骤。以下是需求关闭前的质量评估标准,涵盖了功能、非功能、测试覆盖率和用户满意度等方面:一、功能实现的质量评估标准需求完整性:所有功能需求…

vscode中创建python虚拟环境的方法

文章目录框架不同python解释器vscode运行python需要的插件vscode可以改变执行python脚本的默认终端虚拟环境解释创建虚拟环境的方法python的settings.json的一些好用配置框架 python解释器->虚拟环境->vscode 不同python解释器 在一台电脑中我们可以安装多个版本的pyt…

基于 ShardingSphere 的 Spring Boot 数据加密与模糊查询实现

基于 ShardingSphere 的 Spring Boot 数据加密与模糊查询实现 在数据安全与查询便捷性并重的今天,敏感数据加密存储后如何支持灵活查询成为关键挑战。本文将聚焦ShardingSphere 在实现数据加密的同时支持模糊查询的核心能力,详细介绍基于 Spring Boot 和 ShardingSphere 的完…

计算虚拟化技术

🧠 一、什么是计算虚拟化?(基础认识) ✅ 基本概念: 计算虚拟化(Compute Virtualization) 是指:在一台物理服务器上模拟多个“虚拟计算资源”,每个虚拟机看起来像是一台独…

Python编程基础与实践:Python基础数据结构:列表、字典和集合

Python数据结构:掌握列表、字典和集合 学习目标 通过本课程的学习,学员将掌握Python中基本的数据结构:列表、字典和集合。学员将了解它们的特性、使用场景以及如何高效地使用它们来解决实际问题。 相关知识点 列表、字典和集合使用 学习…