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

Oracle里的MINUS是什么

在 Oracle 中,MINUS是 SQL 中的一个集合操作符,它用于比较两个查询的结果集,并返回第一个查询中有而第二个查询中没有不重复记录。

核心概念

MINUS执行的是集合的“差集”操作。你可以把它想象成数学中的减法:结果集A - 结果集B

关键规则

  1. 列数与顺序:两个SELECT语句必须拥有相同数量和类型的列,且顺序需对应。
  2. 去重:最终结果会自动去除重复行。
  3. 排序:结果集的列名取自第一个SELECT语句。

在存储过程中的使用

在存储过程、函数或任何PL/SQL代码块中,MINUS的用法和含义与在普通SQL中完全一样。你直接把它用在两个SELECT语句之间即可。

基本语法:

SELECTcolumn1,column2,...FROMtable1WHEREconditions MINUSSELECTcolumn1,column2,...FROMtable2WHEREconditions;

举例说明

假设有两个表:employees(所有员工)和assigned_employees(已分配任务的员工)。

目标:找出尚未分配任务的员工。

-- 获取所有员工IDSELECTemployee_idFROMemployees MINUS-- 减去已分配任务的员工IDSELECTemployee_idFROMassigned_employees;

执行逻辑

  1. 第一个查询结果集为:{101, 102, 103, 104, 105}
  2. 第二个查询结果集为:{102, 104}
  3. MINUS操作后,最终结果为:{101, 103, 105}

NOT EXISTS/NOT IN的对比

MINUS可以实现与NOT EXISTSNOT IN类似的效果,但有其特点:

特性MINUSNOT EXISTSNOT IN(对NULL需谨慎)
核心逻辑集合差集运算关联子查询检查存在性检查值是否不在列表中
去重自动去重通常需要DISTINCT通常需要DISTINCT
可读性意图明确,适合集合操作灵活,可关联复杂条件简单直接
NULL值安全处理NULL安全处理NULL子查询结果有NULL时,总返回空
性能取决于索引和数据量,通常对大型结果集优化较好常利用索引,关联查询效率高可能全表扫描

NOT EXISTS实现相同例子:

SELECTe.employee_idFROMemployees eWHERENOTEXISTS(SELECT1FROMassigned_employees aWHEREa.employee_id=e.employee_id);

在存储过程中的示例

CREATEORREPLACEPROCEDUREfind_unassigned_employeesISCURSORc_unassignedISSELECTemployee_id,nameFROMemployeesWHEREdepartment='IT'MINUSSELECTemployee_id,nameFROMassigned_employees;BEGINFORrecINc_unassignedLOOPDBMS_OUTPUT.PUT_LINE('未分配员工: '||rec.employee_id||' - '||rec.name);ENDLOOP;END;/

总结

在 Oracle 存储过程中,MINUS是一个用于获取两个查询结果差集的集合操作符。它的主要特点是:

  1. 直观清晰:语义明确,是“A有B无”的直接表达。
  2. 自动去重:省去了手动写DISTINCT的麻烦。
  3. 处理NULL安全:不像NOT IN那样对NULL值敏感。

当你需要从一个结果集中排除另一个结果集,并且希望代码清晰表达集合运算意图时,MINUS是一个很好的选择。在存储过程中,它的用法和普通SQL中无异,可以直接用于数据筛选和业务逻辑实现。

http://www.jsqmd.com/news/581947/

相关文章:

  • Java面向对象三大特性:构建高质量代码的基石
  • C++ Move 语义的性能分析与优化
  • 保姆级教程:用国产龙虾AiPy自己打造全链路写文到一键发布
  • 终极指南:5步解锁MacBook Touch Bar在Windows系统的完整显示功能
  • d2s-editor:革新暗黑破坏神2存档编辑体验的开源工具
  • 智能家居中枢:OpenClaw+Qwen3-32B统一控制米家与HomeKit设备
  • 炸穿 AI 圈!Claude Code 51.2 万行源码全泄露:封号机制、隐藏彩蛋与 Harness 工程顶级架构全解密
  • 利用快马平台快速构建openclaw机器人抓取配置模型的可交互原型
  • 如何打造专属漫画体验?Venera主题定制全攻略
  • 网站爬虫原理,基于浏览器点击行为还原可接口请求
  • 3分钟上手AppImageLauncher:让Linux应用安装像Windows一样简单 [特殊字符]
  • 实在Agent实测:人与Agent将如何协同工作?深度拆解企业级AI助理重塑生产力的5大真相
  • java的@ComponentScan(com.sx)怎么理解?
  • Local Moondream2快速部署:VS Code Dev Container一键开发环境
  • 毕业设计作品精选【芳芯科技】酒驾检测座椅设计
  • 3个技术突破让赛博朋克2077玩家实现游戏体验自由定制
  • 通用物体识别-ResNet18镜像5分钟快速部署:零基础搭建AI图像分类服务
  • Redis 从入门到精通(四):字符串操作详解
  • 游戏脚本助手,电脑点击器,脚本自动点击识图找图_无限试用版
  • c/c++代码如何在python环境中调用(本次应用需求:通过c++中的算法处理来自串口的数据)
  • 第一次才搞清楚,什么叫医保报销【以职工医保带入说明】!
  • Tree-sitter解析代码
  • Qwen3-32B部署全攻略:3步搞定,零基础也能快速上手
  • AgentCPM深度研报助手企业级部署架构设计:高并发下的性能与成本优化
  • 【西工大主办、连续多届稳定检索】第七届机械仪表与自动化国际学术会议(ICMIA 2026)
  • 技术方案: 封装 OpenCode 和 ClaudeCode 作为LLM API 服务,open ai LLM API 风格的,一个深度研究技术方案报告
  • C语言main函数到底该怎么写?6种写法全解析
  • 2026年农民工工资保函担保公司如何选择?一份专业排名与对比指南 - 速递信息
  • 2026年揭秘:GEO搜索优化公司如何赢得专业好名声?
  • Mac Mouse Fix安装方式决策指南:从需求分析到方案选择