七郎's JavaBlog

          草木竹石皆可為劒。至人之用人若鏡,不將不迎,應而不藏,故能勝物而不傷。
          posts - 60, comments - 14, trackbacks - 0, articles - 0

          Oracle高級查詢 --樹查詢

          Posted on 2007-04-26 10:16 七郎歸來 閱讀(351) 評論(0)  編輯  收藏

          Oracle高級查詢

          使用Oracle特有的查詢語法, 可以達到事半功倍的效果

          1. 樹查詢
          create table tree (
              id 
          number(10not null primary key,
              name 
          varchar2(100not null,
              super 
          number(10not null                // 0 is root
          );
          -- 從子到父
          select * from tree start with id = ? connect by id = prior super 
          -- 從父到子
          select * from tree start with id = ? connect by prior id = suepr
          -- 整棵樹
          select * from tree start with super = 0 connect by prior id = suepr

          2. 分頁查詢
          select * from ( 
              
          select my_table.*, rownum  my_rownum from ( 
                  
          select name, birthday from employee order by birthday
              ) my_table 
          where rownum < 120 
          where my_rownum >= 100;

          3. 累加查詢, 以scott.emp為例
          select empno, ename, sal, sum(sal) over(order by empno) result from emp;
           
               EMPNO ENAME             SAL     RESULT
          ---------- ---------- ---------- ----------
                7369 SMITH             800        800
                
          7499 ALLEN            1600       2400
                
          7521 WARD             1250       3650
                
          7566 JONES            2975       6625
                
          7654 MARTIN           1250       7875
                
          7698 BLAKE            2850      10725
                
          7782 CLARK            2450      13175
                
          7788 SCOTT            3000      16175
                
          7839 KING             5000      21175
                
          7844 TURNER           1500      22675
                
          7876 ADAMS            1100      23775
                
          7900 JAMES             950      24725
                
          7902 FORD             3000      27725
                
          7934 MILLER           1300      29025

          4. 高級group by
          select decode(grouping(deptno),1,'all deptno',deptno) deptno,
                 decode(
          grouping(job),1,'all job',job) job,
                 
          sum(sal) sal
          from emp 
          group by ROLLUP(deptno,job);
          DEPTNO                                   JOB              SAL
          ---------------------------------------- --------- ----------
          10                                       CLERK           1300
          10                                       MANAGER         2450
          10                                       PRESIDENT       5000
          10                                       all job         8750
          20                                       CLERK           1900
          20                                       ANALYST         6000
          20                                       MANAGER         2975
          20                                       all job        10875
          30                                       CLERK            950
          30                                       MANAGER         2850
          30                                       SALESMAN        5600
          30                                       all job         9400
          all deptno                               all job        29025

          5. use hint
          當多表連接很慢時,用ORDERED提示試試,也許會快很多
          SELECT /*+ ORDERED */* 
            
          FROM a, b, c, d 
           
          WHERE  

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 琼结县| 洛隆县| 邳州市| 留坝县| 岱山县| 枝江市| 永寿县| 铁岭市| 普宁市| 稷山县| 姚安县| 余庆县| 新化县| 涿州市| 象州县| 信丰县| 白银市| 阜新市| 榕江县| 涞源县| 叙永县| 军事| 通化县| 建始县| 翁牛特旗| 句容市| 北京市| 垣曲县| 穆棱市| 治县。| 林州市| 平凉市| 玉龙| 丘北县| 宁津县| 平阴县| 泉州市| 左云县| 兴仁县| 胶州市| 布尔津县|