在實際項目中分頁是常見的不能再說了,這裏我總結了MySql,SqlServer,Oracle這三個數據庫的sql分頁語句
在這三個數據庫中,個人覺得MySql的分頁語句是最簡單的,只用一個limit關鍵字就能完成
MySql數據庫:
select * from test limit 5,5;
test:表名
第一個參數5:從表中的第幾行開始查,從0開始數
第二個參數5:查詢出多少條記錄
在項目中運用時,如果一個頁面指定了顯示多少條記錄,通常第二個參數不會改變,都是該變的第一個參數
計算每頁的公式:這裏都是每頁顯示5條記錄
第一頁:(1-1)*5
第二頁:(2-1)*5
第三頁:(3-1)*5
第N頁:(n-1)*5
公式:
開始的行數=(當前頁-1)*每頁顯示的行數
所以最後在代碼中的sql語句可以寫爲:
int pageSize=5;//每頁顯示行數
int pageNo=4;//當前頁
int num=(pageNo-1)*pageSize;//開始查找的行
select * from test limit num,pageSize;
我瞭解的MySql數據的分頁語句就只有這一種了
在SqlServer數據庫中目前我瞭解的sql分頁語句有兩種
第一種:
select top(5) * from test where id not in( select top((2-1)*5) id from test )
第二種:
select * from( select ROW_NUMBER() Over(order by id) as rownum,* from test ) t where rownum between (2-1)*5+1 and 2*5
在Oracle數據庫中我瞭解的一隻有兩種:
第一種:
select * from (
select t.*,rownum rn from emp t
) t1
where rn>(2-1)*3 and rn<=2*3
也可以使用between
select * from (
select t.*,rownum rn from emp t
)
where rn between (2-1)*3+1 and 2*3
第二種:
select * from ( select t.*,rownum rn from ( select * from emp )t where rownum<=2*3 ) where rn>(2-1)*3
這兩種比較起來,個人認爲第一種查詢相對比較快,因爲第一種只查詢了兩次,而第二種查詢的三次
至於怎樣使用,看個人比較適合哪一種了