oracle集合运算

迈不过友情╰ 2022-06-04 03:37 361阅读 0赞

集合运算

主要运用 : 数据统计
并集: union
交集 :interset
差集:minus

使用oracle提供的scott用户进行演示

– 工资大于1500 或者是20号部门下的员工(并集运算)

  1. 1.使用union
  2. select * from emp where sal > 1500 union select * from emp where deptno = 20;

这里写图片描述

  1. 2.使用union all
  2. select * from emp where sal > 1500 union all select * from emp where deptno = 20;

这里写图片描述

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而union all只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用union all


–工资大于1500 并且是20号部门下的员工(交集运算)
select * from emp where sal > 1500
intersect
select * from emp where deptno = 20;

这里写图片描述


—- 工资大于1500 并且不是20号部门下的员工(差集运算)

  1. -- 工资大于1500 并且不是20号部门下的员工
  2. select * from emp where sal > 1500 minus select * from emp where deptno = 20;

这里写图片描述

注意事项演示

demo

  1. select ename,sal from emp where sal > 1500 union select ename from emp where deptno = 20;

这里写图片描述

出错原因,参数数量不匹配,oracle要求参数数量要一致

解决方案: 如果没有相同的列的话就是用null填充,
这里写图片描述


demo
这里写图片描述

出错原因 ,
参数类型不一致, sal 是 number 类型, job是varchar2类型 ,

解决方案,
使用 0 或 “” 或 null代替
这里写图片描述

这里写图片描述

建议的话使用null代替,因为null是万能的 , 0 只能代替 数字 , “”只能代替varchar类型

这里写图片描述


demo

还有一点要注意的是
这里写图片描述

问题归总

  1. 查询类型要一致
  2. 查询参数个数要一致
  3. 列的含义要求一致

总结 :
union 跟 union all 的区别

  • union 可去重,但是效率效率相对于较低
  • union all 不可去重,但是效率相对于较高

union: 其实就相当于或的意思
intersect : 其实就相当是并且的意思
minus :其实就相当是取反的意思,

以上就是oracle的集合运算,

发表评论

表情:
评论列表 (有 0 条评论,361人围观)

还没有评论,来说两句吧...

相关阅读

    相关 TOJ1743 集合运算 Set

    描述 给定两个集合A和B的所有元素,计算它们的交、并、差集。 输入 输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整

    相关 树实现集合运算

    ![70][] 如图,2棵树表示2个集合,用一个数组存储多棵树 注意:(1).用树表示集合,树的每一个节点代表集合中的一个元素,并且从上到下,从左到右放从小到大的元素 (

    相关 Java 集合运算

    问题描述 给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。 输入格式 第一行为一个整数n,表示集合A中的元素个数。   第二行有n个互不相同的

    相关 set和集合运算

    set集合 概念:set是可变的、无序的、不重复的元素集合。set的元素及元素里面的元素不能出现不可哈希类型。(即set的元素要求必须可以hash)