常用3種資料庫的Sql分頁

一劍平江湖發表於2013-11-04
在程式的開發過程中,處理分頁是大家接觸比較頻繁的事件,因為現在軟體基本上都是與資料庫進行掛釣的。但效率又是我們所追求的,如果是像原來那樣把所有滿足條件的記錄全部都選擇出來,再去進行分頁處理,那麼就會多多的浪費掉許多的系統處理時間。為了能夠把效率提高,所以現在我們就只選擇我們需要的資料,減少資料庫的處理時間,以下就是常用SQL分頁處理: 
   1、SQL Server、Access資料庫 
   這都微軟的資料庫,都是一家人,基本的操作都是差不多,常採用如下分頁語句: 
   PAGESIZE:每頁顯示的記錄數 
   CURRENTPAGE:當前頁號 
   資料表的名字是:components 
   索引主鍵字是:id 
select top PAGESIZE * from components where id not in
(select top (PAGESIZE*(CURRENTPAGE-1)) 
id from components order by id)order by id
   如下列: 
select top 10 * from components where id not in
(select top 10*10 id from components order by id)
order by id
從101條記錄開始選擇,只選擇前面的10條記錄
   2、Oracle資料庫 
   因為Oracle資料庫沒有Top關鍵字,所以這裡就不能夠像微軟的資料據那樣操作,這裡有兩種方法: 
   (1)、一種是利用相反的。 
   PAGESIZE:每頁顯示的記錄數 
   CURRENTPAGE:當前頁號 
   資料表的名字是:components 
   索引主鍵字是:id 
select * from components where id not 
in(select id from components where                
rownum<=(PAGESIZE*(CURRENTPAGE-1))) 
and rownum<=PAGESIZE order by id;
   如下例: 
select * from components where id not in
(select id from components where rownum<=100) 
and rownum<=10 order by id;
   從101到記錄開始選擇,選擇前面10條。 
   (2)、使用minus,即中文的意思就是減去。 
select * from components where rownum
<=(PAGESIZE*(CURRENTPAGE-1)) minus 
select * from components where rownum
<=(PAGESIZE*(CURRENTPAGE-2));
如例:select * from components where 
rownum<=10 minus select * from components 
where rownum<=5;.
   (3)、一種是利用Oracle的rownum,這個是Oracle查詢自動返回的序號,一般不顯示,但是可以通過select rownum from [表名]看到,注意,它是從1到當前的記錄總數。 
select * from (select rownum tid,components.
* from components where rownum<=100) where tid<=10;

相關文章