⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

SQL UNION 合并

学习 UNION 和 UNION ALL · 难度:进阶 · +15XP

SQL UNION 合并查询结果

在数据库查询中,有时需要将多个 SELECT 语句的结果合并为一个结果集。例如,你需要同时查询两个部门中绩效优秀的员工,或者汇总不同年份的销售数据。SQL 提供了 UNIONUNION ALL 操作符来实现结果集的纵向拼接。两者的核心区别在于:UNION 会自动去重,而 UNION ALL 保留所有行(包括重复)。

UNION 基本语法

SELECT 列1, 列2, ... FROM 表1
UNION [ALL]
SELECT 列1, 列2, ... FROM 表2
ORDER BY 列名;

关键规则:所有 SELECT 语句必须有相同数量的列,且对应列的数据类型必须兼容。列名以第一个 SELECT 语句为准。

UNION 示例

-- 合并两个查询结果并去重
SELECT name FROM students WHERE score >= 85
UNION
SELECT name FROM students WHERE age <= 20
ORDER BY name;

-- 使用 UNION ALL 保留所有行(不去重) SELECT name FROM students WHERE score >= 85 UNION ALL SELECT name FROM students WHERE age <= 20;

UNION vs UNION ALL 性能对比

特性UNIONUNION ALL
去重是(自动去除重复行)否(保留所有行)
性能较慢(需排序+去重)较快(直接拼接)
适用场景需要保证结果唯一性确定无重复或允许重复

不同列数时的处理

如果两个 SELECT 的列数不同,可以用 NULL 或常量补齐:

-- 表A有3列,表B只有2列,用NULL补齐
SELECT id, name, score FROM students
UNION
SELECT id, name, NULL FROM alumni;  -- 补齐第三列

ORDER BY 的位置

UNION 的排序必须放在最后一个 SELECT 之后,对整个合并结果排序:

SELECT name, score FROM class_a
UNION
SELECT name, score FROM class_b
ORDER BY score DESC;  -- 对整个合并结果排序

常见使用场景

  1. 多表汇总:汇总多个结构相似的表(如各年份销售表)
  2. 多条件查询合并:将不同条件的查询结果拼接展示
  3. 报表生成:交叉统计多个维度数据后合并为统一格式
  4. 数据迁移校验:对比源表和目标表的差异

实战任务

  1. 将分数>=85和年龄<=20的学生姓名合并为一个列表
  2. 对比 UNION 和 UNION ALL 的结果差异
  3. 合并两个不同表(如 students 和 archive_students)的数据
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0