MINUS
是 Oracle 数据库中的一种集合操作符,用于返回第一个查询结果中存在但第二个查询结果中 不存在 的 唯一行。其核心功能是 排除交集数据,常用于数据差异分析或过滤特定记录
一、核心功能
-
排除交集:返回第一个查询结果中 不在第二个查询结果中出现的行。
-
自动去重:结果集中的每行数据唯一(即使原查询结果有重复)。
-
排序输出:默认按第一列升序排序(除非显式指定
ORDER BY
)。
SELECT column1, column2, ... FROM table1
MINUS
SELECT column1, column2, ... FROM table2
[ORDER BY column1, column2, ...];
关键规则:
-
列数与类型匹配:所有
SELECT
语句的列数必须相同,对应列的数据类型必须兼容。 -
列名以第一个查询为准:最终结果集的列名由第一个
SELECT
语句决定。
场景 :数据迁移验证
-- 检查旧表中有但新表中缺失的记录
SELECT product_id FROM old_inventory
MINUS
SELECT product_id FROM new_inventory;
二、与相似操作的对比
操作符 | 功能 | 是否去重 | 是否排序 |
---|---|---|---|
MINUS | 返回第一个查询存在但第二个查询不存在的行 | 是 | 是(默认) |
NOT EXISTS | 通过子查询排除匹配行 | 否 | 否 |
LEFT JOIN ... WHERE b.key IS NULL | 类似 MINUS ,但保留左表所有未匹配行 |
特性 | 说明 |
---|---|
功能 | 返回第一个查询中存在但第二个查询中不存在的唯一行。 |
去重 | 自动去除重复行。 |
排序 | 默认按第一列升序排序,可通过 ORDER BY 自定义。 |
性能优化 | 优先使用索引,考虑替代方案(如 NOT EXISTS 或 LEFT JOIN )处理大数据集。 |
适用场景 | 数据差异分析、排除特定记录、数据完整性验证等。 |