Oracle学习之集合运算

一、集合运算操作符

          UNION:(并集)返回两个集合去掉重复值的所有的记录

          UNION ALL:(并集)返回两个集合去掉重复值的所有的记录       

           INTERSECT:(交集)返回两个集合的所有记录,重复的只取一次

          MINUS:(差集)返回属于第一个集合,但不属于第二个集合的所有

                       记录

           集合运算中各个集合必须有相同的列数,且类型一致,集合运算的结

       果采用第一个集合的表头作为最终的表头,order by必须放在每个

       集合后

二、集合运算

          使用UNION操作符查询scott表中10部门和20部门的员工信息

Sql代码  收藏代码
  1. SQL> select * from emp  
  2.   2  where deptno=10  
  3.   3  union  
  4.   4  select * from emp  
  5.   5  where deptno=20;  
  6.   
  7.      EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO  
  8. ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------  
  9.       7369 SMITH      CLERK           7902 17-12月-80            880                    20  
  10.       7566 JONES      MANAGER         7839 02-4月 -81           2975                    20  
  11.       7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10  
  12.       7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20  
  13.       7839 KING       PRESIDENT            17-11月-81           5000                    10  
  14.       7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20  
  15.       7902 FORD       ANALYST         7566 03-12月-81           3000                    20  
  16.       7934 MILLER     CLERK           7782 23-1月 -82           1300                    10  
  17.   
  18. 已选择8行。  

           使用UNION操作符统计scott用户下emp表中得各个部门的总工资,

       和各部门各职位的工资

Sql代码  收藏代码
  1. SQL> break on deptno skip 2;  
  2. SQL> select deptno,job,sum(sal) from emp group by deptno,job  
  3.   2  union  
  4.   3  select deptno,to_char(null),sum(sal) from emp group by deptno  
  5.   4  union  
  6.   5  select to_number(null),to_char(null),sum(sal) from emp;  
  7.   
  8.     DEPTNO JOB         SUM(SAL)  
  9. ---------- --------- ----------  
  10.         10 CLERK           1300  
  11.            MANAGER         2450  
  12.            PRESIDENT       5000  
  13.                            8750  
  14.   
  15.   
  16.         20 ANALYST         6000  
  17.            CLERK           1980  
  18.            MANAGER         2975  
  19.                           10955  
  20.   
  21.   
  22.         30 CLERK            950  
  23.            MANAGER         2850  
  24.            SALESMAN        5600  
  25.                            9400  
  26.   
  27.   
  28.                           29105  
  29.   
  30.   
  31.   
  32. 已选择13行。  

           使用UNION ALL操作符查询scott用户下dept表中的信息

Sql代码  收藏代码
  1. SQL> select * from dept  
  2.   2  union all  
  3.   3  select * from dept;  
  4.   
  5.     DEPTNO DNAME          LOC  
  6. ---------- -------------- -------------  
  7.         10 ACCOUNTING     NEW YORK  
  8.         20 RESEARCH       DALLAS  
  9.         30 SALES          CHICAGO  
  10.         40 OPERATIONS     BOSTON  
  11.         10 ACCOUNTING     NEW YORK  
  12.         20 RESEARCH       DALLAS  
  13.         30 SALES          CHICAGO  
  14.         40 OPERATIONS     BOSTON  
  15.   
  16. 已选择8行。  

            使用INTERSECT操作符查询scott用户下dept表和emp表中都存在的

        部门号

Sql代码  收藏代码
  1. SQL> select deptno from emp  
  2.   2  intersect  
  3.   3  select deptno from dept;  
  4.   
  5.     DEPTNO  
  6. ----------  
  7.         10  
  8.         20  
  9.         30  

               使用MINUS操作符查询scott用户下dept表中存在而emp表中

               不存在的部门号

Sql代码  收藏代码
  1. SQL> select deptno from dept  
  2.   2  minus  
  3.   3  select deptno from emp;  
  4.   
  5.     DEPTNO  
  6. ----------  
  7.         40  

                使用MINUS操作符查询scott用户下emp表中的员工工资属于

          (1200-2000)这个档,而不属于(1400-3000)这个档的员工

Sql代码  收藏代码
  1. SQL> select empno,ename,job,sal  
  2.   2  from emp  
  3.   3  where sal between 1200 and 2000  
  4.   4  minus  
  5.   5  select empno,ename,job,sal  
  6.   6  from emp  
  7.   7  where sal between 1400 and 3000;  
  8.   
  9.      EMPNO ENAME      JOB              SAL  
  10. ---------- ---------- --------- ----------  
  11.       7521 WARD       SALESMAN        1250  
  12.       7654 MARTIN     SALESMAN        1250  
  13.       7934 MILLER     CLERK           1300  
原文地址:https://www.cnblogs.com/tian830937/p/4641089.html