**

ORACLE SQL SET运算符

**

开发工具与关键技术:Oracle sql*plus  PLSQL Developer
作者:何任贤
撰写时间:2019年01月01日

SET运算符,主要是对两个查询或多个查询的结果进行运算,不过只有加减,意思是能把结果进行加减,不过该加减不是数字的加减而是集的加减。
SET运算符四大关键字(UNION 、 UNION ALL、INTERSECT、MINUS),意思分别是并集
(去重复)、并集(不去重复)、交集、差集。
注意事项:使用SET运算符时,要保证两个查询或多个查询数据数据类型一致,列数一致,但必须保证列数和数据类型一致,若列名不一致则默认为第一个查询的列名。
1、 UNION,合并数据并且把重复的数据去掉
2、 UNION ALL, 只合并数据不会把重复的数据去掉
可以理解为UNION只是比UNION ALL多了一个去重复,具体如示例一
示例一:

  图1                                  图2

图1是表数据 、图2是表结构,其中SNO代表学号、CNO代表科目号、SCORE代表成绩。

题目:获取每个科目成绩的最小值和每个科目成绩的最大值,并且要求把成绩的最大值和成绩的最小值合并,然后再列出科目号、成绩。

代码1:
SELECT CNO,MAX(SCORE) as SCORE FROM SC GROUP BY CNO
UNION
SELECT CNO,MIN(SCORE) as SCORE FROM SC GROUP BY CNO
代码2:
SELECT CNO,MAX(SCORE) as SCORE FROM SC GROUP BY CNO
UNION ALL
SELECT CNO,MIN(SCORE) as SCORE FROM SC GROUP BY CNO

    图3                图4

代码一的结果为图3 ,代码二的结果为图4,由此可以看出UNION和UNION ALL区别,明显的可以看到UNION不仅会把数据合并,并且会把重复的数据去掉,只保留重复数据中的其中一条,而UNION ALL只是合并数据不并会把数据进行任何的改动。
这就是UNION和UNION ALL的特点,我们可以根据自己的需求来应用。

3、 INTERSECT,获取两个查询或多个查询的数据的相同的数据,意思是保留相同的数据不同的去掉,且只保留一条相同的。
示例二:
图1是表数据 、图2是表结构,其中SNO代表学号、CNO代表科目号、SCORE代表成绩。

题目:获取每个科目成绩的最小值和每个科目成绩的最大值,并且要求把它们之间相同的数据保留出来,然后再列出科目号、成绩。

代码:
SELECT CNO,MAX(SCORE) as SCORE FROM SC GROUP BY CNO
INTERSECT
SELECT CNO,MIN(SCORE) as SCORE FROM SC GROUP BY CNO
结果为图5

图5
从结果可以看到INTERSECT的特点,它代表交集,它是把相同的部分保留一份出来,不同的全部去掉,该特点跟数学的交集非常相似。

4、 MINUS,差集,意思是集合一减去集合二所剩下的数据,叫做差集,差是被减数-减数=差,集是集合的意思。
示例三:
图1是表数据 、图2是表结构,其中SNO代表学号、CNO代表科目号、SCORE代表成绩。

题目:获取每个科目成绩的最小值和每个科目成绩的最大值,并且要求将最大值的数据减去最小值的数据,然后再列出科目号、成绩。
代码:
SELECT CNO,MAX(SCORE) as SCORE FROM SC GROUP BY CNO
MINUS
SELECT CNO,MIN(SCORE) as SCORE FROM SC GROUP BY CNO

结果为图6、最大值的数据为图7、最小值数据为图8

 图6                  图7                  图8

由图6、图7、图8,我们可以明显的看出MINUS的特点,图7减去图8等于图6,可以看到的是科目C003被去掉了,只保留了科目C001和C002的最大值,MINUS的特点就是把相同的数据去掉只保留第一个查询的数据,而第二个查询的数据不管有没有重复都不要。
上面我们说到SET 运算符是加减法,由示例一、二、三,我们可以看到的是UNION和UNION ALL都是加法,只不过是UNION只保留一条相同的数据,UNION ALL保留两条或多条相同的数据,而INTERSECT和MINUS是减法,INTERSECT则是减去不同的数据,且只保留一条相同的数据,而MINUS则是把数据一的数据减去和数据二相同的数据,保留和数据二不同的数据,不保留数据二的任何数据。

ORACLE SQL SET运算符相关推荐

  1. sql 两个表列包含_Oracle数据库扩展语言PL/SQL之运算符

    [本文详细介绍了Oracle数据库扩展语言PL/SQL的运算符,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 运算符是一个符号,告诉编译器执行特定的数学或逻辑操作. PL/SQL 语言有丰富的内置 ...

  2. oracle入门语,Oracle SQL 语言从入门到精通

    Oracle SQL 语言从入门到精通 作者:网络 佚名 2005-10-27 00:00 评论 分享 [IT168 服务器学院]数据库对象包括表.视图.索引.同义词.簇.触发器.函数.过程.包.数据 ...

  3. Oracle SQL 基础要点

    Oracle SQL 基础要点 本文是学习<程序员的SQL金典>时的读书摘要,记录一些自己不太熟悉或者很重要的知识点.方便后期对照复习. 1.各种主流数据库的优缺点比较 - DB2由IBM ...

  4. oracle查询sql走索引吗,Oracle SQL不走索引小记

    sql执行计划不走索引 一.优化器认为走全表扫描更优. 在这种情况下,需要重新分析一遍表,更新表的状态,有助于优化器分析出正确的执行计划. analyze table tablename comput ...

  5. oracle sql以及性能调优

    目 录 1.选用适合的ORACLE优化器 2 2.访问Table的方式 3 3.共享SQL语句 3 4.选择最有效率的表名顺序(只在基于规则的优化器中有效) 5 5.WHERE子句中的连接顺序. 6 ...

  6. 查询所有表、索引、视图信息的SQL语句-Mysql/oracle/sql server的不同实现方式

    注:所有查询默认在管理员用户下进行 ----------------------------------Mysql中------------------------------------------ ...

  7. 名师讲坛 php 光盘内容,《名师讲坛——Oracle SQL入门与实战经典 配光盘 》怎么样_目录_pdf在线阅读 - 课课家教育...

    第0章 Oracle的安装及相关配置 0.1 Oracle的安装 0.2 Oracle 11g中的SQL*Plus 0.3 scott用户及其对象维护 0.4 本书中将用到的表 0.5 SQL(Str ...

  8. Oracle SQL学习笔记

    参考:FreeIT-Oracle教程 实用sql 0.1.update内容中含有单引号 方案:用两个单引号代替一个单引号 select to_char('aa''否''aa') from dual;- ...

  9. oracle sql语句序列,Oracle SQL之 序列使用限制

    Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the following constructs: ■ A ...

最新文章

  1. python os system用法_Python调用系统命令os.system()和os.popen()的实现
  2. Unity新手教程:Roll-a-Ball游戏开发中的使用
  3. MSSQL 2005数据库与SP4补丁安装
  4. 机器学习实战之K近邻算法
  5. 计算机未来发展趋势四个字概括,授课教师-世界大学城.doc
  6. python中argmin函数_Python numpy.argmin()用法及代码示例
  7. oracle里面如何查询sqlid,Oracle SQL查询:如何使用count
  8. 微课计算机教学研究案例,《微课在中学信息技术教学中有效运用的案例研究》的开题报告...
  9. HFSS----微带天线设计实例之模型建立
  10. JAVA发送HttpClient请求及接收请求完整代码实例
  11. linux mysql ip_Linux下配置mysql允许指定IP远程访问
  12. 如何写好一份数据分析报告?
  13. @ConfigurationProperties(prefix = )异常报错解决方案:
  14. python怎么编辑excel_python 修改excel表格数据-关于如何用python 编辑 excel表格
  15. FlyAI小课堂:python机器学习笔记:深入学习决策树算法原理
  16. 数据库 —— mycat 代理
  17. 新概念英语2如何背诵啊?
  18. GO 发送邮件,官方连包都帮我们写好了
  19. 四足爬行机器人运动_四足爬行机器人控制研究
  20. 用zrender实现工作流图形化设计(附范例代码)

热门文章

  1. [转载自简书] ASPNetCore上传大文件碰到的一些问题总结
  2. Leetcode-937-Reorder Log Files-(Easy)
  3. Android开发 - 设置DialogFragment全屏显示
  4. Linux bridge 资料链接
  5. logstash 利用drop 丢弃过滤日志
  6. 使用 NodeJS + Express 從 GET/POST Request 取值 -摘自网络
  7. 重装系统后软件安装 ----一直更新
  8. js实时获取系统当前时间
  9. Hypertable hbase hdfs kfs java与c++的较量
  10. 程设13次作业总结--运算符重载