Oracle 数据库入门之----------------------集合运算

集合运算

 

SQL> /*

SQL> 查询10和20号部门的员工

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

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

SQL> 3. 集合运算

SQL>     select * from emp where deptno=10

SQL>       加上

SQL>     select * from emp where deptno=20

SQL> */

SQL> select * from emp where deptno=10

  2  union

  3  select * from emp where deptno=20;

 

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                                                                              

---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                                                                              

      7369 SMITH      CLERK           7902 17-12-80            800                    20                                                                                                              

      7566 JONES      MANAGER         7839 02-4-81           2975                    20                                                                                                              

      7782 CLARK      MANAGER         7839 09-6-81           2450                    10                                                                                                              

      7788 SCOTT      ANALYST         7566 19-4-87           3000                    20                                                                                                              

      7839 KING       PRESIDENT            17-11-81           5000                    10                                                                                                              

      7876 ADAMS      CLERK           7788 23-5-87           1100                    20                                                                                                              

      7902 FORD       ANALYST         7566 03-12-81           3000                    20                                                                                                              

      7934 MILLER     CLERK           7782 23-1-82           1300                    10                                                                                                              

 

已选择 8 行。

 

SQL>  select deptno,job,sum(sal) from emp group by rollup(deptno,job);

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        10 CLERK           1300                                                                                                                                                                         

        10 MANAGER         2450                                                                                                                                                                         

        10 PRESIDENT       5000                                                                                                                                                                         

        10                 8750                                                                                                                                                                         

        20 CLERK           1900                                                                                                                                                                         

        20 ANALYST         6000                                                                                                                                                                         

        20 MANAGER         2975                                                                                                                                                                         

        20                10875                                                                                                                                                                         

        30 CLERK            950                                                                                                                                                                         

        30 MANAGER         2850                                                                                                                                                                         

        30 SALESMAN        5600                                                                                                                                                                         

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        30                 9400                                                                                                                                                                         

                          29025                                                                                                                                                                         

 

已选择 13 行。

 

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

  2   union

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

  4   union

  5   select sum(sal) from emp;

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

 *

 3 行出现错误: 

ORA-01789: 查询块具有不正确的结果列数

 

 

SQL> /*

SQL> 注意的问题:

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

SQL> 2、采用第一个集合作为最后的表头

SQL> 3、order by永远在最后

SQL> 4、括号

SQL> */

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

  2   union

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

  4   union

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

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        10 CLERK           1300                                                                                                                                                                         

        10 MANAGER         2450                                                                                                                                                                         

        10 PRESIDENT       5000                                                                                                                                                                         

        10                 8750                                                                                                                                                                         

        20 ANALYST         6000                                                                                                                                                                         

        20 CLERK           1900                                                                                                                                                                         

        20 MANAGER         2975                                                                                                                                                                         

        20                10875                                                                                                                                                                         

        30 CLERK            950                                                                                                                                                                         

        30 MANAGER         2850                                                                                                                                                                         

        30 SALESMAN        5600                                                                                                                                                                         

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        30                 9400                                                                                                                                                                         

                          29025                                                                                                                                                                         

 

已选择 13 行。

 

SQL> --break on deptno skip 2

SQL> host cls

 

SQL> --SQL 执行的时间

SQL> 

SQL> set timing on

SQL>  select deptno,job,sum(sal) from emp group by rollup(deptno,job);

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        10 CLERK           1300                                                                                                                                                                         

        10 MANAGER         2450                                                                                                                                                                         

        10 PRESIDENT       5000                                                                                                                                                                         

        10                 8750                                                                                                                                                                         

        20 CLERK           1900                                                                                                                                                                         

        20 ANALYST         6000                                                                                                                                                                         

        20 MANAGER         2975                                                                                                                                                                         

        20                10875                                                                                                                                                                         

        30 CLERK            950                                                                                                                                                                         

        30 MANAGER         2850                                                                                                                                                                         

        30 SALESMAN        5600                                                                                                                                                                         

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        30                 9400                                                                                                                                                                         

                          29025                                                                                                                                                                         

 

已选择 13 行。

 

时间:  00: 00: 00.01

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

  2   union

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

  4   union

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

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        10 CLERK           1300                                                                                                                                                                         

        10 MANAGER         2450                                                                                                                                                                         

        10 PRESIDENT       5000                                                                                                                                                                         

        10                 8750                                                                                                                                                                         

        20 ANALYST         6000                                                                                                                                                                         

        20 CLERK           1900                                                                                                                                                                         

        20 MANAGER         2975                                                                                                                                                                         

        20                10875                                                                                                                                                                         

        30 CLERK            950                                                                                                                                                                         

        30 MANAGER         2850                                                                                                                                                                         

        30 SALESMAN        5600                                                                                                                                                                         

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        30                 9400                                                                                                                                                                         

                          29025                                                                                                                                                                         

 

已选择 13 行。

 

时间:  00: 00: 00.01

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

  2   union

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

  4   union

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

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        10 CLERK           1300                                                                                                                                                                         

        10 MANAGER         2450                                                                                                                                                                         

        10 PRESIDENT       5000                                                                                                                                                                         

        10                 8750                                                                                                                                                                         

        20 ANALYST         6000                                                                                                                                                                         

        20 CLERK           1900                                                                                                                                                                         

        20 MANAGER         2975                                                                                                                                                                         

        20                10875                                                                                                                                                                         

        30 CLERK            950                                                                                                                                                                         

        30 MANAGER         2850                                                                                                                                                                         

        30 SALESMAN        5600                                                                                                                                                                         

 

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         

---------- --------- ----------                                                                                                                                                                         

        30                 9400                                                                                                                                                                         

                          29025                                                                                                                                                                         

 

已选择 13 行。

 

时间:  00: 00: 00.03

SQL> --SQL优化 4、 尽量不要使用集合运算

SQL> set timing off

SQL> spool off

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值