oracle第八章集合查询,oracle学习笔记七——查询之集合运算

七.集合运算

可以根据下图图示并文字理解集合运算

70b5191ab537

集合运算示意图

(1)union/union all 并集

--union,两张表都有的数据只取一次

--union all,两张表都有的数据,各取一次

--当两张表没有公共部分时,union和union all一样

(2)交集 intersect:A、B两张表都有的记录

(3)差集 minus:只有A表有,而B表没有的记录

1.查询10号和20号部门的员工信息(3种方法)

法1. select * from emp where deptno=10 or deptno=20;

法2. select * from emp where deptno in (10,20);

法3. 集合运算 select * from emp where deptno=10

加上

select * from emp where deptno=20

SQL> select * from emp where deptno=10

union

select * from emp where deptno=20;

-->结果:

70b5191ab537

法3.集合运算的方式

2.使用并集实现group by语句的增强

--概念

group by rollup(a,b)

=

group by a,b

union

group by a

union

group by null

--实例

select deptno, job, sum(sal)

from emp

group by rollup(deptno, job);

=

--只是像下面这样简单的并起来是错误的

select deptno, job, sum(sal) from emp group by deptno, job

union

select deptno,sum(sal) from emp group by deptno

union

select sum(sal) from emp;

--需要补数据

select deptno, job, sum(sal) from emp group by deptno, job

union

select deptno, to_char(null), sum(sal) from emp group by deptno

union

select to_number(null), to_char(null), sum(sal) from emp;

-->结果:

70b5191ab537

使用并集实现group by语句的增强功能

补:oracle中的sql语句优化

5.尽量不要使用集合运算,也就是说rollup要比union要好,想一下,集合运算要操作多次数据库

--关于sql优化的评判,主要就是执行时间,这里补充两条sqlplus命令

--打开执行时间

set timing on

--关闭执行时间

set timing off

补:sqlplus命令

(1)可以通过sqlplus命令调整命令行的显示格式:

SQL> break on deptno skip 2

(2)取消用:

SQL> break on null

3.交集举例

SQL> select ename,sal from emp

where sal between 700 and 1300

INTERSECT

select ename,sal from emp

where sal between 1201 and 1400;

-->结果:

70b5191ab537

交集(INTERSECT)示例

4.差集举例

SQL> select ename,sal from emp

where sal between 700 and 1300

MINUS

select ename,sal from emp

where sal between 1201 and 1400;

-->结果:

70b5191ab537

差集(MINUS)示例

注:集合运算需要注意的问题:

1.参与运算的各个集合必须列数相同,且类型一致

2.采用第一个集合的表头作为最后的表头

3.如果使用order by排序,必须在每个集合后使用相同的order by(不能只有一个使用)

4.可以使用括号改变集合执行的顺序

【完整Oracle SQL开发教程课件如下】 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作与事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建和维护表(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值