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 按照勒個字段排序
          主站蜘蛛池模板: 濮阳市| 湘乡市| 花莲市| 淅川县| 南丹县| 于田县| 股票| 会昌县| 萍乡市| 孟州市| 二连浩特市| 光泽县| 南川市| 通渭县| 崇仁县| 航空| 鲜城| 开阳县| 日土县| 平原县| 六盘水市| 遵义市| 岳阳县| 绵竹市| 广丰县| 诸暨市| 无锡市| 蛟河市| 大厂| 遂平县| 尚志市| 泸水县| 金寨县| 微博| 息烽县| 台中市| 连城县| 重庆市| 东平县| 盐边县| 来凤县|