oracle 集合运算符

UNION/UNION ALL 并集

INTERSECT 交集

MINUS 差集

我们知道group by 增强中 http://www.cnblogs.com/liuwt365/p/4181256.html

group by rollup(a,b)
 =
 group by a,b
 +
 group by a
 +
 group by null

所以我们应该写sql语句应该为:

 1 SQL> select deptno,job,sum(sal) from emp group by deptno,job
 2   2  union
 3   3  select deptno,sum(sal) from emp group by deptno
 4   4  union
 5   5  select sum(sal) from emp group by null;
 6
 7 select deptno,job,sum(sal) from emp group by deptno,job
 8 union
 9 select deptno,sum(sal) from emp group by deptno
10 union
11 select sum(sal) from emp group by null
12
13 ORA-01789: 查询块具有不正确的结果列数

但是出错了,这是集合运算符的限制

  1. 参与运算的各个集合必须列数相同 且类型一致
  2. 采用第一个集合的表头作为最后的表头
  3. 如果排序,必须在每个集合后使用相同的order by
  4. 可以使用括号

 1 SQL> select deptno,job,sum(sal)
 2   2  from emp
 3   3  group by rollup(deptno,job)
 4   4  ;
 5
 6 DEPTNO JOB       SUM(DEPTNO)
 7 ------ --------- -----------
 8     10 CLERK              10
 9     10 MANAGER            10
10     10 PRESIDENT          10
11     10                    30
12     20 CLERK              20
13     20 ANALYST            20
14     20 MANAGER            20
15     20                    60
16     30 CLERK              30
17     30 MANAGER            30
18     30 SALESMAN          120
19     30                   180
20                          270
21
22 13 rows selected
23
24 SQL> select deptno,job,sum(sal) from emp group by deptno,job
25   2  union
26   3  select deptno,to_char(null),sum(sal) from emp group by deptno
27   4  union
28   5  select to_number(null),to_char(null),sum(sal) from emp group by null;
29
30     DEPTNO JOB         SUM(SAL)
31 ---------- --------- ----------
32         10 CLERK           1400
33         10 MANAGER         2450
34         10 PRESIDENT       5000
35         10                 8850
36         20 ANALYST         3000
37         20 CLERK            800
38         20 MANAGER         2975
39         20                 6775
40         30 CLERK            950
41         30 MANAGER         2850
42         30 SALESMAN        5600
43         30                 9400
44                           25025
45
46 13 rows selected
时间: 2024-08-04 12:27:44

oracle 集合运算符的相关文章

Oracle的集合运算符

Oracle的集合运算符有并集union.union all,交集intersect,差集minus 先建表myemp,进行集合运算的测试 create table myemp as select * from emp where empno = 7934; 并集 union all不过滤掉集合中重复的数据 union过滤掉集合中重复的数据 1 select * from emp 2 union all 3 select * from myemp; 4 5 select * from emp 6

小谈KVC中KeyPath的集合运算符

由于知识点比较简单,这里不再陈述一大堆的原理,直入主题. KVC中的集合运算符有以下三类: 1.简单集合运算符:@avg.@sum.@max.@min.@count (只能用在集合对象中,对象属性必须为数字类型)  2.对象操作符:                @unionOfObjects:返回指定属性的值的数组,不去重                @distinctUnionOfObjects:返回指定属性去重后的值的数组  3.数组 / 集体操作符:跟对象操作符很相似,只不过是在NSA

Oracle集合操作函数:union、intersect、minus

[转]Oracle集合操作函数:union.intersect.minus 集合操作符专门用于合并多条select 语句的结果,包括:UNION, UNION ALL, INTERSECT, MINUS.当使用集合操作符时,必须确保不同查询的列个数和数据类型匹配. 集合操作符具有以下注意事项: 集合操作符不适用于LOB.VARRAY和嵌套表列. UNION.INTERSECT.MINUS操作符不使用于 LONG列. 如果选择列表中包含有表达式或者函数,那么必须为表达式或者函数定义列别名. 1.U

集合运算符之全集、交集、补集【weber出品必属精品】

集合的概念 与数学中的全集.交集.补集的概念是一样的 常用的集合运算符 集合运算符的作用:把两个查询构造为一个联合查询 1. 全集:求连个查询的全集 union all:将两个查询的所有数据全部列出,不进行排序,不去掉重复的部分 SQL> create table t1 as select * from emp where deptno in (10,20); Table created. SQL> create table t2 as select * from emp where dept

oracle 集合变量以及自定义异常的用法

oracle 集合变量以及自定义异常的用法, 在过程 record_practice 有record变量和自定义异常的用法实例.具体在3284行. 1 CREATE OR REPLACE Package Pkg_Weiyl Is 2 Pkg_Name Constant Varchar2(20) := 'pkg_weiyl'; 3 Too_Young Constant Number := -20001; 4 Exc_Too_Young Exception; 5 Pragma Exception_I

oracle集合

oracle集合 1初识集合 集合是oracle中的一种数据类型 存放一组数据类型相同的数据 集合组成 由下标和值组成 下标的类型包含数字(整数,pls_integer,binary_integer)和字符串 值的类型可以是数据库中的所有类型(基本数据类型,记录类型(record,%rowtype),%type,集合类型) 集合三种类型 集合是一个比较广义的概念,在pl/sql中提供了3中类型的集合 索引表 可以通过数字或字符串作为下标来查找其中的元素,仅在pl/sql中使用 嵌套表 拥有索引表

oracle开发学习篇之集合运算符以及集合异常捕获

--取出集合;长度 declare type list_nested is table of varchar2(50) not null; v_all list_nested := list_nested('a','b','c','d','c','d'); begin dbms_output.put_line('list leng :' || cardinality(v_all)); end; / --从集合中取出取消重复的元素 declare type list_nested is table

Oracle集合操作

集合关键字: 1.UNION:并集,所有的内容都查询,重复的显示一次,默认进行升序排序: 2.UNIONALL:并集,所有的内容都显示,包括重复的,展示内容没有排序: 3.INTERSECT:交集,只显示多个查询中相同的元素部分: 4.MINUS:差集,显示第一个查询中有,第二个查询中没有的元素 例子: 在scott用户下,创建表emp2,该表只包含emp中20部门员工的信息: 代码:create table emp2 as select * fromemp where deptno=20; 先

oracle 表达式运算符优先级

oracle 有以下几种运算符 算数运算符 连接运算符 比较(关系)运算符 逻辑运算符 1.算数运算符 算数运算符有四个, + , - ,* ,/. SELECT sal,sal*12 from emp; #sal 和sal*12后的值. 2.连接运算符 连接运算符有  || 可以将两个字符串连接在一起. SELECT ename || “的工资是” || sal FROM emp; #此||就是将员工和工资连接在一起 bob (ename)“的工资是”1500(sal) 3.比较(关系)运算符