Oracle集合运算
SQL> --什么是集合运算?
SQL> --查询10号部门和20号部门的员工
SQL> --第一种
SQL> select *
2 from emp
3 where deptno=10 or deptno=20;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择8行。
SQL> --第二种
SQL> select *
2 from emp
3 where deptno in (10,20);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择8行。
SQL> --第三种:集合运算
SQL> -- select * from emp where deptno=10;
SQL> -- select * from emp where deptno=20;
SQL> -- 集合的三种运算:并,交,差
SQL> select * from emp where deptno=10
2 union
3 select * from emp where deptno=20;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择8行。
SQL> --关于并集,讨论性能
SQL> --group by的增强
SQL> select deptno,job,sum(sal)
2 from emp
3 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行。
SQL> break on deptno skip 2
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
MANAGER 2450
PRESIDENT 5000
8750
20 CLERK 1900
ANALYST 6000
MANAGER 2975
10875
DEPTNO JOB SUM(SAL)
---------- --------- ----------
30 CLERK 950
MANAGER 2850
SALESMAN 5600
9400
29025
已选择13行。
SQL> host cls
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> --1. 参与运算的集合必须列数相同
SQL> --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> --打开sql运行时间开关
SQL> set timing on
SQL> /
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行。
已用时间: 00: 00: 00.56
SQL> select deptno,job,sum(sal)
2 from emp
3 group by rollup(deptno,job);
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
MANAGER 2450
PRESIDENT 5000
8750
20 CLERK 1900
ANALYST 6000
MANAGER 2975
10875
DEPTNO JOB SUM(SAL)
---------- --------- ----------
30 CLERK 950
MANAGER 2850
SALESMAN 5600
9400
29025
已选择13行。
已用时间: 00: 00: 00.50
SQL> set timing off
SQL> break on null
SQL> host cls
SQL> --交集:
SQL> -- 查询工资属于1000~2000这个区间和1500~2500这个区间
SQL> select * from emp where sal between 1000 and 2000
2 intersect
3 select * from emp where sal between 1500 and 2500;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
SQL> --差集:
SQL> --查询工资属于1000~2000,但不属于1500~2500
SQL> ed
已写入 file afiedt.buf
1 select * from emp where sal between 1000 and 2000
2 minus
3* select * from emp where sal between 1500 and 2500
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ----- ---------- ----------
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
SQL> --1.列数相同
SQL> --2. 采用第一个集合的表头
SQL> spool off
Oracle集合运算相关推荐
- 【学亮IT手记】oracle集合运算
[学亮IT手记] oracle集合运算 union做并集运算: ①union集合运算的结果不包括去掉重复记录. ②union all集合运算的结果包括重复记录. intersect进行交集运算 min ...
- Oracle学习XII —— Oracle集合运算
Oracle集合运算 Oracle集合运算就是把多个查询结果组合成一个查询结果,oralce的集合运算包括:INTERSECT(交集).UINION ALL(交集重复).UINION(交集不重复).M ...
- Oracle——集合运算
集合运算 示例 1:查询10和20号部门的员工 1. select * from emp where deptno=10 or deptno=20; 2. select * from emp wher ...
- oracle union all写法,【oracle】-集合运算:UNION,UNION ALL...
在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:求并,重复记录只显示一次. UNION ALL:求并集,显示所有记录信息. INT ...
- 5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算
1 Oracle基于用户的管理方案 2 DDL语句可以管理数据库的对象有:视图 索引 序列 同义词 约束 3 创建一个表,有2个条件(1 有权限:2有表空间) Oracle给你提 ...
- Oracle(二):查询、函数、集合运算
一.单表查询 (一)简单条件查询 1.精确查询 需求:查询水表编号为 30408 的业主记录,查询语句: select * from T_OWNERS where watermeter='30408' ...
- 318分组聚合,关联查询(多表连接查询)(连接查询),连接查询oracle写法,集合运算ld
----------分组聚合:对表里面的数据进行各个维度/角度的统计 -------------统计:需要用 聚合函数 max(目标字段):求最大值 min(目标字段) :求最小值 avg(目标字段) ...
- Oracle 多表查询与集合运算
select * from bonus;select * from salgrade;/*多表查询:笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义格式: select * from 表 ...
- Oracle数据库之集合运算
集合运算符 集合运算符查询组合两个组件查询的结果到一个结果,包含集合运算符的查询称为复合查询.SQL集合运算符如下: 集合运算符 UNION:All distinct rows selected by ...
最新文章
- python内置函数教程_Python内置函数详解
- python redis模块_python redis 模块 官方文档(中)
- 多线程与高并发(四):LockSupport,高频面试题,AQS源码,以及源码阅读方法论
- 记得重用layout
- NBU计算机专业期末考试记录
- 黑色30s高并发IIS设置
- 腾讯阿里美团相继搞事,渣本程序员的出路在哪?
- WPF设计の自定义窗体
- Drawable转换为Bitmap两种方法
- excel清空sheet内容 poi_Excel隐藏了一个sheet表,java poi中是可以读出来的,现在我不想读取隐藏的sheet表。...
- MEncoder的基础用法—6.7. 媒体流复制
- CSS(刷漆)学习总结
- 初中计算机知识ppt,初中信息技术操作考试系统题库PowerPoint部分
- 原子结构示意图全部_所有原子结构示意图
- 技术指南 | 理解零知识证明算法之Zk-stark
- 一个并肩战斗的同事将离开团队,去家乡追寻梦想
- 安大计算机学院导师有姓汪的,汪西莉-陕西师范大学计算机科学学院
- 苹果手机上网很慢_手机4G信号满格,上网速度却很慢?原来都是它们在“搞鬼”...
- 惠普暗影精灵II代pro进入biso
- 跳槽的新公司,我直接让项目的性能提升了一半
热门文章
- JavaScript实现Knapsack problem背包问题算法(附完整源码)
- OpenCASCADE绘制测试线束:拓扑命令之纹理映射到形状
- OpenCASCADE:绘制演示脚本
- wxWidgets:wxCollapsiblePane类用法
- boost::variant2模块转换构造抛出相关的测试程序
- boost::assertion_failed_msg相关的测试程序
- boost::regex模块用于测试特定于语言环境的表达式的帮助程序类
- BOOST使用 proto::extends 扩展终端类型的简单示例
- boost::gil::compute_hessian_responses用法的测试程序
- boost::coroutine2模块实现协程的测试程序