針對不同的資料庫,分頁的實現方法是不一樣的。
oracle分頁技術
oracle資料庫為我們提供了兩個很重要的字段:rowid和rownumber。rowid是乙個絕對的值,是針對某一行分配的乙個唯一的行識別符號,根據它我們可以非常迅捷地定位到某乙個具體的行。它也起著主鍵的作用,即它是唯一的(unique)、必有的(mandatory)字段。rownumber是乙個相對的值,是指查詢結果的行號。例如standard標準題錄表中有三條題錄資訊,那麼每行對應的rownumber即為1、2、3。它是乙個從1開始標記的行數資訊。根據rownumber,我們就可以實現分頁技術了。
但是在實施的過程中,也遇到了乙個問題。最開始我認為這樣寫就可以了:
select * from thetable
where rownumber between ((頁碼-1) * 頁容量 + 1) and (頁碼 * 頁容量)
例如如果10條一頁,取第二頁的內容,那麼就是:select * from thetable where rownumber between (2-1)*10+1 and 2*10。但這是錯誤的,返回結果會是乙個空集合。對rownumber實施where條件查詢是有限制的,只能求前多少多少行,即where rownumber
sqlserver分頁技術
sqlserver的分頁方法和oracle不盡相同。sqlserver並沒有提供oracle特有的rowid和rownumber兩個字段,而是使用了top這個關鍵字:select top 10 * from thetable或是select top (10) * from thetable。sqlserver2000使用前者不加括號的書寫方法,sqlserver2005開始支援括號,增加可讀性。通過top關鍵字,可以限制查詢只取得結果集的前多少行。這個等價於oracle的where rownumber(
select max (id) from(
select top ((頁碼-1)*頁容量) id from table1 order by id))
order by id
mysql分頁技術
mysql資料庫的分頁技術實現起來要比前兩種資料庫簡單一些。由於加入了關鍵字limit,分頁在mysql下面顯得非常簡單。語句如下:
select * from thetable limit (頁碼-1)*頁容量 , 頁碼*頁容量
limit關鍵字是個index,即起始值從0開始。
不同資料庫分頁
oracle分頁 分頁的宗旨是控制查詢出來的資料個數,下面這條語句對於oracle分頁已經足夠了。注 該語句只能用於oracle select from select aa.rownum rn from select from users order by id desc aa where rown...
資料庫分頁技術
1 無order by排序的寫法。效率最高 經過測試,此方法成本最低,只巢狀一層,速度最快!即使查詢的資料量再大,也幾乎不受影響,速度依然!select from select rownum as rowno,t.from k task t where flight date between to ...
不同資料庫的分頁實現
oracle 1 偽列 rownum select from select t.rownum rn from t user t where rownum page.getcurrentpage 1 page.getpagesize 2 物理列 rowid select from t user t w...