zoukankan      html  css  js  c++  java
  • oracle_集合函数

     查询10和20号部门的员工
    SQL> 1. select * from emp where deptno in (10,20);
    SQL> 2. select * from emp where deptno=10 or deptno=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> host cls
    
    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> 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.02
    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.04
    SQL> --SQL 优化 5. 尽量不要使用集合运算
    SQL> set timing off
    SQL> spool off
    
  • 相关阅读:
    v-show和v-if隐藏的区别(备份前端网)
    正则表达式别人好点的解析(备份前端网)
    【干货】vue2.0-模块化全局自定义过滤器和vue中export和export default用法(前端网备份)
    【干货】原生js做的一维数组对象,二维数组对象的模糊查询(前端网备份)
    JavaWeb学习笔记(六)—— Cookie&Session
    JavaWeb学习笔记(五)—— request
    JavaWeb学习笔记(四)—— response
    JavaWeb学习笔记(三)—— Servlet
    JavaWeb学习笔记(二)—— Tomcat服务器
    JavaWeb学习笔记(一)—— Http协议
  • 原文地址:https://www.cnblogs.com/jycjy/p/6726421.html
Copyright © 2011-2022 走看看