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

SQL:合并查询(UNION)

目录

🧩 什么是 UNION?

UNION vs UNION ALL

✅ 简单例子

UNION 的常见应用场景

与其他子句联合使用

🚧 UNION注意事项

性能优化建议


🧩 什么是 UNION

UNION 是 SQL 中的一个关键字,用于 合并多个 SELECT 查询结果,并去除重复的记录,形成一个新的结果表。

基本语法:

SELECT 列1, 列2, ...
FROM 表1
UNION
SELECT 列1, 列2, ...
FROM 表2;

重点规则:

  1. 每个 SELECT 查询的列数量必须一致。

  2. 每个对应列的数据类型要兼容(如都是字符串、都是数字)。

  3. UNION 会自动去除重复行,如果你想保留重复,可以使用 UNION ALL

UNION vs UNION ALL

操作符是否去重性能用途
UNION较慢(多了去重操作)多来源整合数据,避免重复记录
UNION ALL更快统计所有记录(包括重复项)
-- 去除重复
SELECT name FROM employees
UNION
SELECT name FROM managers;-- 保留重复
SELECT name FROM employees
UNION ALL
SELECT name FROM managers;

✅ 简单例子

假设我们有两个表:

表:students_2023
+----+--------+
| id | name   |
+----+--------+
| 1  | Alice  |
| 2  | Bob    |
+----+--------+表:students_2024
+----+--------+
| id | name   |
+----+--------+
| 3  | Carol  |
| 4  | Bob    |
+----+--------+

 用 UNION 合并名字:

SELECT name FROM students_2023
UNION
SELECT name FROM students_2024;

 结果:

+--------+
| name   |
+--------+
| Alice  |
| Bob    |
| Carol  |
+--------+

Bob 出现了两次,但只保留了一个。

用 UNION ALL 不去重: 

SELECT name FROM students_2023
UNION ALL
SELECT name FROM students_2024;

结果: 

+--------+
| name   |
+--------+
| Alice  |
| Bob    |
| Carol  |
| Bob    |
+--------+

 

UNION 的常见应用场景

1. 多张表中合并数据

合并来自不同年度的学生名单:

SELECT id, name FROM students_2023
UNION
SELECT id, name FROM students_2024;

 2. 合并来自不同来源的相似数据

SELECT email FROM customers
UNION
SELECT email FROM suppliers;

3. 加标签显示不同来源 (分类展示)

SELECT name, '2023' AS 来源 FROM students_2023
UNION
SELECT name, '2024' FROM students_2024;

 

与其他子句联合使用

1. UNIONORDER BY

如上所示,ORDER BY 必须在最后一个 SELECT 的末尾出现。

2. UNIONLIMIT

你可以限制最终结果的行数:

SELECT name FROM customers
UNION
SELECT name FROM employees
LIMIT 10;

3. UNIONWHERE

每个 SELECT 可以有自己的条件:

SELECT id, name FROM orders WHERE status = 'shipped'
UNION
SELECT id, name FROM orders_archive WHERE status = 'shipped';

🚧 UNION注意事项

错误信息原因解决方法
列数不一致两个 SELECT 的列数不同确保 SELECT 的列数相同
类型不一致比如一个是数字,一个是字符串CAST()CONVERT() 转换类型
排序无效ORDER BY 写错位置必须写在最后的 SELECT 之后

正确排序方式:

SELECT name FROM students_2023
UNION
SELECT name FROM students_2024
ORDER BY name;

性能优化建议

  • 如果你不需要去重,尽量用 UNION ALL,性能会提升。

  • 各子句中尽可能使用索引字段进行过滤。

  • 对于大型数据源,先进行聚合再合并结果(如 GROUP BY + UNION)。

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

相关文章:

  • .gitignore 的基本用法
  • vSphere 7.0 client 提示HTTP状态 500- 内部服务器错误
  • day021-定时任务
  • 创业团队建设与管理(一)
  • 扣子平台上如何进行对象序列化,JSON序列化和反序列化节点的使用
  • MPI实现中对消息传递的优化
  • 通用的管理账号设置设计(一)
  • 学习python day8
  • leetcode 93. Restore IP Addresses
  • mac for vscode集成的源代码管理 撤销和删除文件报错Permission denied
  • 宫格导航--纯血鸿蒙组件库AUI
  • 【C++篇】list模拟实现
  • SBT开源构建工具
  • 基于python+Django+Mysql的校园二手交易市场
  • 深入Java TCP流套接字编程:高效服务器构建与高并发实战优化指南​
  • Python实例题:Python应用马尔可夫链算法实现随机文本生成
  • sass,less是什么?为什么要使用他们?
  • 学员投稿:华为,ov等手机主流大厂桌面未读计数角标更新接口汇总
  • 项目三 - 任务8:实现词频统计功能
  • [论文阅读]Prompt Injection attack against LLM-integrated Applications
  • Linux 网络配置现代实践:Netplan 与 ifcfg 的全景对比与工程指南20250526
  • 炫云云渲染,构筑虚实交融的3D数字新视界
  • python(linux环境)-pickle、json、time、zipfile模块的使用
  • 【C++11】lambda表达式 || 函数包装器 || bind用法
  • Cesium 实战 26 - 自定义纹理材质 - 实际应用之飞线(抛物线)
  • HTML与Flask表单之间的关系(chatgtp提供)
  • 【每日渲美学】3ds Max橱柜材质教程:厨房高光烤漆、木纹、亚克力、亚光板材渲染优化指南
  • 智能灾备驱动数字政府转型:从合规保障到智能治理跃升
  • 人工智能的能源困境:繁荣与危机并存的未来
  • Unity---OSC(Open Sound Control)、TouchOSC Editor、创建布局