在顯示記錄條目時往往要用到分頁,一種常用的辦法是利用各種數據庫自帶的定位接口對原始查詢語句進行改寫,從而只取出特定范圍的某些記錄。不同的數據庫,查詢定位接口是不一樣的,下面做一匯總:
數據庫 |
分頁查詢語句 |
說明 |
MySql |
"QUERY_SQL limit ?,?" | 使用limit關鍵字,第一個"?"是起始行號, 第二個"?"是返回條目數 |
Oracle |
SELECT * FROM |
結合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 ?” | 第一個"?"為起始行號,第二個"?"代表 返回記錄數 |
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 按照勒個字段排序