Oracle PL/SQL开发基础(第十一弹:表集合操作)

在Oracle中,可供使用的集合运算有:
- 联合运算:从两个查询返回的结果集去掉重复值后合并后的结果,使用UNION操作符。
- 全联合运算:与联合运算相似,返回两个查询结果的并集,但是包括所有重复值。使用UNION ALL操作符。
- 相交运算:返回多个查询结果中的相同的行,使用INTERSECT操作符 。
- 相减运算:返回在第一个查询中存在而第二个查询中不存在的行,使用MINUS操作符。

联合与全联合运算

联合与全联合用于合并两个表中的数据,二者的区别在于联合不包含重复值。
如:

SELECT   empno, ename, sal, hiredate, deptno
    FROM emp
   WHERE deptno = 20
UNION
SELECT   empno, ename, sal, hiredate, deptno
    FROM emp_history
   WHERE 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;  

使用联合运算UNION具有如下一些原则:
- 被选择的列数和列数据类型必须与所有用在查询中的SELECT语句一致。列名可以不相同。
- 联合运算在做重复检查的时候不忽略NULL值。
- 默认情况下,输出以SELECT子句的第一列的升序排序。
- IN运算有比UNION运算高的优先级。
- 联合运算在所有被选择的列上进行。

UNION ALL与UNION类似,只是UNION ALL不消除重复行,并且默认情况下不输出排序,不能使用DISTINCT关键字。

相交运算

INTERSECT返回多个查询中的相同的行,使用原则如下:
- 在查询中被SELECT语句选择的列数和数据类型必须与在查询中使用的所有的SELECT语句中的一样,但列名可以不同。
- 相交的表的倒序排序不改变结果。
- 相交不忽略NULL值。

如:

SELECT   empno, ename, sal, hiredate, deptno
    FROM emp
   WHERE deptno = 20
INTERSECT
SELECT   empno, ename, sal, hiredate, deptno
    FROM emp_history
   WHERE deptno = 20;     

相减运算

使用原则和INTERSECT完全相同。
如:

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时,ORDER BY只能出现在语句的最后,并且排序的列名是从第一个SELECT语句接受列名、别名或位置记号里选。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值