RAG实战避坑指南:从文档切片到幻觉抑制的工业级落地
2026/6/11 1:20:56
UNION ALL是 SQL 中用于合并两个或多个SELECT查询结果集的操作符,其核心特点是保留所有行,包括重复行,且不进行排序。它在数据整合、日志合并、分表查询等场景中非常实用。下面从语法、使用条件、示例、性能特点及注意事项等方面系统讲解UNION ALL的使用方法。
UNION ALL的基本语法如下:
SELECT column1, column2, ... FROM table1 UNION ALL SELECT column1, column2, ... FROM table2;SELECT语句必须返回相同数量的列;INT与BIGINT可以合并);SELECT语句要成功使用UNION ALL,必须满足以下条件:
SELECT必须返回相同数量的字段;6
。例如,若一个查询返回
(id, name),另一个返回(code, title),只要id与code类型兼容、name与title类型兼容,即可使用UNION ALL,但最好用别名统一为(id, name)。
假设有两个表employees和contractors:
-- employees 表 id | name ---|------ 1 | Alice 2 | Bob -- contractors 表 id | name ---|------ 1 | David 2 | Alice执行:
SELECT name FROM employees UNION ALL SELECT name FROM contractors;结果为:
name ------ Alice Bob David Alice ← 重复项被保留这体现了UNION ALL不去重的特性
假设每季度销售数据存储在不同表中(Q1_sales,Q2_sales),结构相同:
SELECT product, sales FROM Q1_sales UNION ALL SELECT product, sales FROM Q2_sales ORDER BY sales DESC;注意:
ORDER BY必须放在整个UNION ALL语句的最后,不能在每个子查询中使用
将宽表sales_summary(A_sales, B_sales, C_sales)转换为长表格式:
SELECT 'A' AS product_type, A_sales AS amount FROM sales_summary UNION ALL SELECT 'B', B_sales FROM sales_summary UNION ALL SELECT 'C', C_sales FROM sales_summary;此技巧常用于数据重塑(pivoting),是UNION ALL的高级应用
UNION的关键区别| 特性 | UNION | UNION ALL |
|---|---|---|
| 去重 | 自动去除重复行 | 保留所有行(含重复) |
| 性能 | 较低(需排序+去重) | 更高(直接拼接) |
| 排序 | 默认对结果排序 | 不排序 |
| 适用场景 | 需唯一结果集 | 允许重复或已知无重复时 |
由于
UNION需要额外的去重操作(通常通过排序实现),在大数据量下性能显著低于UNION ALL8
。
UNION ALL因无需去重,执行速度更快,推荐在不需要去重时优先使用ORDER BY,否则结果顺序不可预测NULL被视为普通值,多个NULL会被全部保留UNION ALL汇总;UNION ALL是 SQL 中高效合并结果集的利器,其“保留重复、不排序、高性能”的特性使其在多数数据整合场景中优于UNION。使用时务必确保各查询的列数和数据类型一致,并根据业务需求决定是否需要后续去重或排序。掌握UNION ALL,能显著提升复杂查询的灵活性与效率。