Oracle集合运算
2014-01-24 16:22
513 查看
SQL> /* SQL> 查询10和20号部门的员工 SQL> 1. select * from emp where deptno in (10,20); SQL> 2. select * from emp where deptno=10 or deptno=20; SQL> 3. 集合运算 SQL> select * from emp where deptno=10 SQL> + SQL> select * from emp where deptno=20; SQL> */ SQL> select * from emp where deptno=10 2 union 3 select * from emp where deptno=20; SQL> --利用集合运算实现group by的增强 SQL> select deptno,job,sum(sal) from emp group by deptno,job 2 union 3 select deptno,sum(sal) from emp group by deptno 4 union 5 select sum(sal) from emp; select deptno,sum(sal) from emp group by deptno * 第 3 行出现错误: ORA-01789: 查询块具有不正确的结果列数 SQL> /* SQL> 注意 SQL> 1. 参与运算的各个集合必须列数相同 且类型一致 SQL> 2. 采用第一个集合的表头作为最后的表头 SQL> 3. 如果排序,必须在每个集合后使用相同的order by SQL> 4. 可以使用括号 SQL> */ SQL> select deptno,job,sum(sal) from emp group by deptno,job 2 union 3 select deptno,to_char(null),sum(sal) from emp group by deptno 4 union 5 select to_number(null),to_char(null),sum(sal) from emp; DEPTNO JOB SUM(SAL) ------ --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 DEPTNO JOB SUM(SAL) ------ --------- ---------- 30 9400 29025 已选择13行。 SQL> break on deptno skip 2 SQL> select deptno,job,sum(sal) from emp group by deptno,job 2 union 3 select deptno,to_char(null),sum(sal) from emp group by deptno 4 union 5 select to_number(null),to_char(null),sum(sal) from emp; DEPTNO JOB SUM(SAL) ------ --------- ---------- 10 CLERK 1300 MANAGER 2450 PRESIDENT 5000 8750 20 ANALYST 6000 CLERK 1900 MANAGER 2975 10875 DEPTNO JOB SUM(SAL) ------ --------- ---------- 30 CLERK 950 MANAGER 2850 SALESMAN 5600 9400 29025 已选择13行。 SQL> break on null SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job); SQL> --打开sql执行时间 SQL> set timing on SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job); DEPTNO JOB SUM(SAL) ------ --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 CLERK 1900 20 ANALYST 6000 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 DEPTNO JOB SUM(SAL) ------ --------- ---------- 30 9400 29025 已选择13行。 已用时间: 00: 00: 00.00 SQL> select deptno,job,sum(sal) from emp group by deptno,job 2 union 3 select deptno,to_char(null),sum(sal) from emp group by deptno 4 union 5 select to_number(null),to_char(null),sum(sal) from emp; DEPTNO JOB SUM(SAL) ------ --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 DEPTNO JOB SUM(SAL) ------ --------- ---------- 30 9400 29025 已选择13行。 已用时间: 00: 00: 00.01 SQL> set timing off SQL>--交集 SQL> select ename,sal from emp 2 where sal between 700 and 1300 3 INTERSECT 4 select ename,sal from emp 5 where sal between 1201 and 1400; ENAME SAL ---------- ----- MARTIN 1250 MILLER 1300 WARD 1250 SQL>--差集 SQL> select ename,sal from emp 2 where sal between 700 and 1300 3 minus 4 select ename,sal from emp 5 where sal between 1201 and 1400; ENAME SAL ---------- ----- ADAMS 1100 JAMES 950 SMITH 800
相关文章推荐
- Oracle学习(7):集合运算
- oracle集合运算
- Oracle的集合运算
- Oracle 集合运算
- Oracle学习笔记 -- day05 多表查询、连接查询、子查询、分页、行转列、集合运算
- oracle 集合运算
- 数据库Oracle与Mysql语法对比:集合运算
- Oracle学习(七):集合运算
- oracle 多表联合查询,统计查询,组函数,order by,having,子查询,集合运算
- oracle集合运算:UNION UNION ALL
- oracle集合运算_10级 学员 马林 课堂总结
- oracle高级查询之连接查询、集合运算
- oracle 多表联合查询,统计查询,组函数,order by,having,子查询,集合运算
- oracle多表联合查询,统计查询,组函数,order by,having,子查询,集合运算
- Oracle_集合运算查询
- Oracle中的集合运算
- Oracle基础知识(十九) - 集合运算
- oracle--9.集合运算
- 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】
- oracle多表联合查询,统计查询,组函数,order by,having,子查询,集合运算