当前位置: 代码迷 >> 综合 >> 《Oracle编程自学与面试指南》11-03:集合运算符(Set Operators)
  详细解决方案

《Oracle编程自学与面试指南》11-03:集合运算符(Set Operators)

热度:51   发布时间:2024-02-07 00:25:55.0

封面:扫描上图二维码关注课程

内容导航

  • 1、UNION(合并)
  • 2、EXCEPT(除外)
  • 3、INTERSECT(交集)
  • 4、MINUS(差集)
  • 5、独立案例

集合运算符将两个组件查询的结果组合成一个结果集。故包含集合运算符的查询称为复合查询。

表:集合运算符

运算符 含义 返回
UNION 并集 由任何查询选择的所有不重复行
UNION ALL 合并所有 由任何查询选择的所有行,包括所有重复行
EXCEPT 除外 Oracle不支持
INTERSECT 交集 返回多个查询结果中相同的部分。两个查询中都存在的所有不重复行
MINUS 差集 返回两个查询结果的差集。所有不重复行都是由第一个查询选择的,而不是第二个查询

1、UNION(合并)

注意:
1、列名称对应;
2、列顺序对应;
3、列类型对应;
4、列数量对应;

/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:注意:*/
-------------------------------------------------------------------------------
--Sample1:UNION  合并
SELECT *  FROM emp WHERE sal < 2000
UNION
SELECT *  FROM emp WHERE sal >= 2000;-------------------------------------------------------------------------------
--Sample2:
SELECT  * FROM  emp
UNION
SELECT  *  FROM  dept;-------------------------------------------------------------------------------
--Sample3:
SELECT  *  FROM  emp
UNION
SELECT  empno,ename,sal  FROM emp;-------------------------------------------------------------------------------
--Sample4:
SELECT  empno,ename,sal  FROM emp
UNION
SELECT  empno,sal,ename  FROM emp;
-------------------------------------------------------------------------------

2、EXCEPT(除外)

注意:
Oracle不支持EXCEPT。

/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:注意:*/
-------------------------------------------------------------------------------
--EXCEPT  除外
SELECT * FROM tab1 
EXCEPT 
SELECT * FROM tab2;
-------------------------------------------------------------------------------
SELECT  *  FROM  emp
EXCEPT
SELECT  *  FROM  emp  WHERE  sal > 2500;-------------------------------------------------------------------------------

3、INTERSECT(交集)

/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:注意:*/
---------------------------------------------------------------------------------INTERSECT  相交 SELECT  *  FROM  emp  WHERE  sal > 2000
INTERSECT
SELECT  *  FROM  emp  WHERE  sal > 3000;-------------------------------------------------------------------------------

4、MINUS(差集)

/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:注意:*/
---------------------------------------------------------------------------------MINUS  补集SELECT  *  FROM  emp  WHERE  sal > 2000
MINUS
SELECT  *  FROM  emp  WHERE  sal > 3000;
-------------------------------------------------------------------------------

5、独立案例

/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:注意:*/
-------------------------------------------------------------------------------
--测试用表
CREATE TABLE tab1 (A INT ,B CHAR(4)
);INSERT INTO tab1 VALUES(1,'ABC');
INSERT INTO tab1 VALUES(2,'DEF');
INSERT INTO tab1 VALUES(3,'GHI');
COMMIT;CREATE TABLE tab2 (A INT ,B CHAR(4)
);INSERT INTO  tab2 VALUES(3,'GHI');
INSERT  INTO tab2 VALUES(4,'JKL');
INSERT  INTO tab2 VALUES(5,'MNO');
COMMIT;CREATE TABLE tab3 (A INT ,b CHAR(4),C CHAR(4)
);INSERT INTO  tab3 VALUES(3,'GHI','GHI');
INSERT  INTO tab3 VALUES(4,'JKL','GHI');
INSERT  INTO tab3 VALUES(5,'MNO','GHI');
COMMIT;
---------------------------------------------------------------------------------UNION  合并
SELECT * FROM tab1 
UNION 
SELECT * FROM tab2;-------------------------------------------------------------------------------
--UNION  ALL  合并所有
SELECT * FROM tab1 
UNION ALL 
SELECT * FROM tab2;-------------------------------------------------------------------------------
--EXCEPT  除外
SELECT * FROM tab1 
EXCEPT 
SELECT * FROM tab2;---------------------------------------------------------------------------------INTERSECT 交叉
SELECT * FROM tab1 
INTERSECT 
SELECT * FROM tab2;---------------------------------------------------------------------------------MINUS 差集
SELECT * FROM tab1 
MINUS 
SELECT * FROM tab2;-------------------------------------------------------------------------------
--删除表
DROP TABLE tab1;
DROP TABLE tab2;
DROP TABLE tab3;-------------------------------------------------------------------------------

好好学习,天天向上!继续下一章…??????


扫码关注AT阿宝哥,畅读更多内容!


感谢您阅读,如果对作者其它文章也很感兴趣,请扫码关注!??????


  相关解决方案