waterye

          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  

          posted on 2005-08-20 10:56 waterye 閱讀(4789) 評論(9)  編輯  收藏 所屬分類: oracle

          Feedback

          # re: Oracle高級查詢 2005-08-25 12:39 江南白衣@ITO

          嚴重懷疑3,4有沒有人敢用阿。  回復  更多評論   

          # re: Oracle高級查詢 2005-08-25 12:49 Water Ye

          3, 財務計算很有用啊

          當年進ITO就靠它啊  回復  更多評論   

          # re: Oracle高級查詢 2005-08-25 12:53 David@ITO

          要繼續推廣,來個實際項目說說:)  回復  更多評論   

          # re: Oracle高級查詢 2005-08-25 12:55 Water Ye@ITO

          3, Cayrix已在項目中應用  回復  更多評論   

          # re: Oracle高級查詢 2006-04-20 10:06 kelo

          我就用到了,謝謝  回復  更多評論   

          # re: Oracle高級查詢 2006-06-13 15:55 kelo

          樹查詢有用  回復  更多評論   

          # re: Oracle高級查詢 2007-11-05 20:47 Vale_Jones

          請教高手在SQL中語句為select * from table1 where id = @txtId
          轉換成Oracle 的語句應該是這樣的,我是剛學oracle很多不懂的,特前來向前輩們請教。  回復  更多評論   

          # re: Oracle高級查詢 2007-11-05 22:45 water ye

          查一下oracle pl/sql reference就可以了,今年做wap site的工作,沒有機會oracle, online db基本上都是mysql  回復  更多評論   

          # re: Oracle高級查詢 2007-11-06 09:15 Vale_Jones

          菜鳥求救高手:在Oracle里接受用房輸入信息為條件的查詢語句該怎樣寫啊!在SQLserver為正常語句:select * from table1 where ID = @txtID
          txtID為用戶界面文本框。在Oracle中如何改寫才會不報錯呢?謝謝指教!  回復  更多評論   

          主站蜘蛛池模板: 呈贡县| 治多县| 柳林县| 玉山县| 白城市| 赤壁市| 塘沽区| 滦平县| 建宁县| 柘荣县| 平江县| 贵溪市| 含山县| 阜宁县| 罗源县| 中阳县| 龙江县| 永清县| 谢通门县| 隆回县| 利辛县| 泽库县| 香河县| 昌黎县| 晴隆县| 贺州市| 芮城县| 车致| 榆林市| 始兴县| 巴楚县| 嘉祥县| 吐鲁番市| 信丰县| 霍城县| 仲巴县| 澎湖县| 忻城县| 贺州市| 永州市| 洞口县|