zoukankan      html  css  js  c++  java
  • 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                                                                                                                                                                                                                     
          7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                                                                              
    
    SQL>  select deptno,job,sum(sal) from emp group by rollup(deptno,job);
     助解:group by rollup(a,b)
    			这条语句相当于分组三次
    			第一次,a,b两个约束条件,即a相同,b也相同的分为同一组
    			第二次,只是用a一个条件进行分组,把上一次形成的结果在进行分组,把a相同的分   为一组
    			第三次,没有约束条件,将整个表数据分为一组
    			这样三次之后,我们就有了三个分组条件,那么sum函数,就会给每一个分组都执行一次计算总和
        DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
    ---------- --------- ----------                                                                                                                                                                         
            10     CLERK           1300                                                                                                                                                                                                                                                                                                                                      
            10     MANAGER            8750                                                                                                                                                                         
            20     CLERK           1900                                                                                                                                                                                                                                                                                                                           
            20     MANAGER          10875                                                                                                                                                                         
            30     CLERK            950                                                                                                                                                                         
            30     MANAGER         2850                                                                                                                                                                         
         
    
    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> 1、参与运算的各个集合必须列数相同 且类型一致
    SQL> 2、采用第一个集合作为最后的表头
    SQL> 3、order by永远在最后
    SQL> 4、括号
    
    
    SQL> --break on deptno skip 2
    助解:break on deptno skip 2; 
               break on deptno 表示相同的部门号只显示一次, skip 2 每个部门之间,相隔两个空行
    
    SQL> --SQL 执行的时间
    SQL> 
    SQL> set timing on
    SQL>  select deptno,job,sum(sal) from emp group by rollup(deptno,job);
    已用时间:  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;
    已用时间:  00: 00: 00.03
    SQL> --SQL优化 4、 尽量不要使用集合运算
    SQL> set timing off
    SQL> spool off
    
  • 相关阅读:
    css中vertical-align(垂直对齐)的使用
    CSS教程:div垂直居中的N种方法[转]
    前后端分离开发部署模式
    <a>标签的href和onclick属性
    css 字体样式
    谷歌开发者工具界面介绍
    cps和dsp渠道手法的研究
    网络资源汇总
    DataWorks(数据工场)
    vue入门学习笔记
  • 原文地址:https://www.cnblogs.com/Aaron-007/p/12814624.html
Copyright © 2011-2022 走看看