在顯示記錄條目時往往要用到分頁,一種常用的辦法是利用各種資料庫自帶的定位介面對原始查詢語句進行改寫,從而只取出特定範圍的某些記錄。不同的資料庫,查詢定位介面是不一樣的,下面做一彙總:
資料庫分頁查詢語句 說明
mysql
"query_sqllimit ?,?"
使用limit關鍵字,第乙個"?"是起始行號,
第二個"?"是返回條目數
oracle
select * from
( select a.*, rownum rn from
(query_sql) a where rownum
<= ?) where rn >= ?
結合rownum關鍵字,利用巢狀三層select
語句實現。第乙個"?"表示終止行號,
第二個"?"表示其實行號
sql server
尚無通用語句
可使用top n來返回前n條記錄或使用儲存過程
sql server
關於分頁 sql 的資料許多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資、效率低;使用儲存過程是個不錯的選擇,因為儲存過程是顛末預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。
方法1:
適用於 sql server 2000/2005
select top 頁大小 * from table1 where id not in ( select top 頁大小*(頁數-1) id from table1 order by id ) order by id
方法2:
適用於 sql server 2000/2005
select top 頁大小 * from table1 where id > ( select isnull(max(id),0) from ( select top 頁大小*(頁數-1) id from table1 order by id ) a ) order by id
方法3:
適用於 sql server 2005
select top 頁大小 * from ( select row_number() over (order by id) as rownumber,* from table1 ) a where rownumber > 頁大小*(頁數-1)
說明,頁大小:每頁的行數;頁數:第幾頁。使用時,請把「頁大小」以及「頁大小*(頁數-1)」替換成數碼。
mysql
select * from tt limit 1,20
select * from tt limit 21,30
/*如果你是幾千上萬資料,就直接使用mysql自帶的函式 limit的普通用法就ok了,如果是100萬以上的資料,可能就要講方法了,下面我們來做個百萬級資料的分頁查詢語句.
mysql> select * from news where id>=(select id from news limit 490000,1) limit 10; sec //很 明顯,這 種方式勝出 .*/mysql> select * from news limit 490000,10 sec;
以下的文章主要介紹的是mysql分頁的實際操作方案,其實關於實現mysql分頁的最簡單的方法就是利用利用mysql資料庫的limit函式,limit [offset,] rows可以從mysql資料庫表中第m條記錄開始檢索n條記錄的語句為:
select * from 表名稱 limit m,n
例如從表sys_option(主鍵為sys_id)中從第10條記錄開始檢索20條記錄,語句如下:
select * from sys_option limit 10,20
select * from table [查詢條件] order by id limit ?,?
oracle
因此,如果不介意在體系中使用hint的話,可以將分頁的查詢語句改寫為:
select /*+ first_rows */ * from
( select a.*, rownum rn
from (select * from table_name) a
where rownum <= 40
) where rn >= 21
簡單 sql 分頁學習
有關分頁 sql 的資料很多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資 效率低 使用儲存過程是個不錯的選擇,因為儲存過程是經過預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。方法1 適用於 sql server 2000 2005 select t...
SQL分頁語句及簡單的SQL分頁儲存過程
假分頁 從資料庫中選擇所有的記錄後再進行分頁 真分頁 只從資料庫中選擇當前頁的記錄 sql select top每頁顯示的記錄數 fromtopicwhereid not in select top 當前的頁數 1 每頁顯示的記錄數 idfromtopicorder byiddesc order b...
實現分頁的簡單sql語句
要求選取 tbllendlist 中 第n頁的記錄,每一頁100條記錄。方法1 select top 100 from tbllendlist where fldserialno not in select top n 1 100 fldserialno from tbllendlist order...