ITPub博客

首页 > 数据库 > Oracle > oracle学习笔记18-表集合操作

oracle学习笔记18-表集合操作

Oracle 作者:dlhxkj2009 时间:2014-01-14 23:15:36 0 删除 编辑
我们通过多个select语句查询的结果有时候需要把他们合起来作为新的表格来使用。
而在oracle中有以下几种类型的集合运算:
  • 联合运算:从两个查询结果中去掉重复值后合并后的结果(重复值仅出现一次),使用UNION操作符
  • 全联合运算:与联合运算相似,返回两个查询结果的并集,但包括所有的重复值,使用UNION ALL操作
  • 相交运算:返回多个查询的结果中相同的行,使用INTERSECT操作符
  • 相减运算:返回在第一个查询中存在而在第二个查询中不存在的行,使用MINUS操作符
--创造一个emp的副本
CREATE TABLE emp_history AS SELECT * FROM emp;

SELECT * FROM emp_history;
--联合运算
--取出emp中部门为20的记录,与emp_history中部门为30的记录进行合并
SELECT empno,ename,sal,hiredate,deptno FROM emp
    WHERE deptno=20
UNION
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
    WHERE deptno=30
    ORDER BY deptno;
--ORDER BY 字句只能放在最后一个select中,放在其他位置会导致失败,如果不放的话默认安装第一列升序排列

--全联合运算
--从emp和emp_history中取出deptno=20的数据,结果会发现每条数据出现了两次
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
UNION ALL
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=20
ORDER BY empno;
--UNION ALL 不会默认按照第一列升序排列,因此我们加了一个 ORDER BY 语句


--相交运算
--从emp和emp_history中取出deptno=20的数据,结果会发现重复值已经被去掉了
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
INTERSECT
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=20
ORDER BY empno;


--相减运算
--从emp取出deptno=20的数据减去从emp_history中取出deptno=20的数据,结果会发现为空
SELECT empno,ename,sal,hiredate,deptno FROM emp
WHERE deptno=20
MINUS 
SELECT empno,ename,sal,hiredate,deptno FROM emp_history
WHERE deptno=20
ORDER BY empno;
<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22463467/viewspace-1117492/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-09-02