posts - 68, comments - 19, trackbacks - 0, articles - 1

          各種數據庫的分頁sql

          Posted on 2010-10-07 22:27 viery 閱讀(501) 評論(0)  編輯  收藏 所屬分類: Oracle

          在顯示記錄條目時往往要用到分頁,一種常用的辦法是利用各種數據庫自帶的定位接口對原始查詢語句進行改寫,從而只取出特定范圍的某些記錄。不同的數據庫,查詢定位接口是不一樣的,下面做一匯總:

           

           數據庫

           分頁查詢語句

           說明

           MySql

             "QUERY_SQL limit ?,?"             使用limit關鍵字,第一個"?"是起始行號,
            第二個"?"是返回條目數

           Oracle

           SELECT * FROM
           ( SELECT A.*, ROWNUM RN   FROM 
           (QUERY_SQL ) A   WHERE ROWNUM
           <= ?) WHERE RN >= ?

           結合rownum關鍵字,利用嵌套三層select
           語句實現。第一個"?"表示終止行號,
            第二個"?"表示其實行號

           Sql Server

           尚無通用語句  可使用top n來返回前n條記錄或使用存儲過程

           DB2

           假設查詢語句:select t1.* from t1 order
           by t1.id; 分頁語句可為:
           "select * from ( select rownumber() over
            (order by t1.id) as row_, t1.* from t1
            order by t1.id) as temp_ where row_
            between ?+1 and ?"
            返回兩個"?"之間的記錄

           InterBase

           “QUERY_SQL row ? to ?”   返回兩個"?"之間的記錄
           PostgreSQL  “QUERY_SQL limit ? offset ?”   第一個"?"為起始行號,第二個"?"代表
            返回記錄數
          Mysql分頁采用limt關鍵字
          select * from t_order limit 5,10; #返回第6-15行數據
          select * from t_order limit 5; #返回前5行
          select * from t_order limit 0,5; #返回前5行
          Mssql 2000分頁采用top關鍵字(20005以上版本也支持關鍵字rownum)
          Select top 10 * from t_order where id not in (select id from t_order where id>5 ); //返回第6到15行數據
          其中10表示取10記錄 5表示從第5條記錄開始取
          Oracle分頁
          ①采用rownum關鍵字(三層嵌套)
          SELECT * FROM(
          SELECT A.*,ROWNUM num FROM
          (SELECT * FROM t_order)A
          WHERE
          ROWNUM<=15)
          WHERE num>=5;--返回第5-15行數據
          ②采用row_number解析函數進行分頁(效率更高)
          SELECT xx.* FROM(
          SELECT t.*,row_number() over(ORDER BY o_id)AS num
          FROM t_order t
          )xx
          WHERE num BETWEEN 5 AND 15;
          --返回第5-15行數據
          解析函數能用格式
          函數() over(pertion by 字段 order by 字段);
          Pertion 按照某個字段分區
          Order 按照勒個字段排序
          主站蜘蛛池模板: 富蕴县| 温泉县| 宿松县| 都江堰市| 都兰县| 迭部县| 建阳市| 百色市| 沙河市| 霍邱县| 青阳县| 广东省| 罗甸县| 阳高县| 迁安市| 嘉峪关市| 吉木萨尔县| 甘洛县| 儋州市| 新津县| 曲靖市| 北流市| 德庆县| 永新县| 黎城县| 会理县| 四平市| 湘西| 长葛市| 珲春市| 太原市| 柘城县| 韩城市| 嵊泗县| 石屏县| 台南县| 图木舒克市| 荔浦县| 八宿县| 和政县| 大理市|