如何用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)
MySQL分頁的sql語言怎么寫
1、首先我們建立一個表表的數據,這個表里有25條數據,id從1到25。(下圖是部分截圖)
2、要分頁數據,首先我們假設一頁有10條數據,我們可以用mysql的 limit關鍵字來限定返回多少條數據。并且用order by來排序數據,這里用 id來排序。所以第一頁的sql可以如圖這樣寫。
3、執行后得到的數據如圖,就是 id從1到10的前10條數據,因為我們是按id升序來排序的。
4、上面第一頁的sql是簡化的寫法,完整的寫法如圖,得到的結果和上圖的一模一樣。代碼里 limit 0, 10 的意思是從第一條數據開始,取10條數據。(注意的是第一條數據是從0開始的)
5、那么第二頁的數據,關鍵是要知道是從哪一條數據開始,可以用這個公式得到: (頁碼-1) * 每頁顯示多少條,即 (2-1) * 10 = 10, 所以sql語句如圖, limit 10, 10。
6、執行后,結果正確,得到id從11到20的10條數據。
7、同理第三頁數據的sql如圖,<br/>;就是 limit 20, 10。
8、查詢的結果如圖,因為這頁只剩下5條數據了,所以只顯示5條數據。如果你有更多頁的數據,后面的數據只需要按上面的公式,得到從哪行開始,就可以寫對應的sql語句了。
如何實現分頁,sql語句如何實現
在絕大多數的應用中,返回大量的符合條件的記錄是司空見慣的,最典型的莫過于搜索了。在搜索的應用中,用戶給出搜索條件,服務器查出符合條件的記錄。但往往搜索會返回大量的數據記錄,如果在網頁中,往往是通過分頁的方式來實現,頁面提供諸如上一頁,下一頁等等按鈕來實現分頁。
現在主要有以下幾中方式來實現分頁:
*的Find方法
2.在顯示第一頁前將所有的記錄放在collection對象中,后續的各頁都在內存中取。
3.每一頁都到數據庫作一次重復的查詢,然后將符合條件的記錄顯示出來。
4.保存前幾頁的搜索結果在內存中(經常使用到的),后續的記錄(這些數據是多數用戶都沒有耐心看的)再通過連數據庫取得。
5.其他各種cache機制。
我們可以根據實際情況來選擇適合自己的方法,我給大家介紹一個通過標準的SQL語句來得到符合條件的數據。如從第10到20條的符合條件(where語句中的)的記錄。通過這種方法取得記錄有一個必要條件,必須有一個能夠標識記錄順序的字段,如id,time等等。下面我為大家演示一個例子:
查詢t_table表中所有記錄第10到20條,按id排序。
SQL語句為:
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE * < * ) > = 10 AND (SELECT count(*) FROM t_table t2 WHERE * < * ) < 20
又如查詢t_table表中key='123'第10到20條的記錄,按id排序。
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE * < * AND * = '123') > = 10 AND (SELECT count(*) FROM t_table t2 WHERE * < * AND * = '123') < 20 AND * = '123'
當然條件中的id可以換為任何能表識記錄順序的字段。
在oracle數據庫中的分頁SQL語句怎么寫
前提:
分頁參數:size = 20 page = 2;
沒有order by的查詢;
嵌套子查詢,兩次篩選(推薦使用)。
SQL語句:
SELECT *
FROM (SELECT ROWNUM AS rowno, t.*
FROM DONORINFO t
WHERE *AY BETWEEN TO_DATE ('19800101', 'yyyymmdd')
AND TO_DATE ('20060731', 'yyyymmdd')
AND ROWNUM <= 20*2) table_alias
WHERE table_* > 20*(2-1);
擴展資料:
rownum總是從1開始的,第一條不滿足去掉的話,第二條的rownum 又成了1。依此類推,所以永遠沒有不滿足條件的記錄。
可以這樣理解:rownum是一個序列,是Oracle數據庫從數據文件或緩沖區中讀取數據的順序。它取得第一條記錄則rownum值為1,第二條為2。
依次類推:當使用“>;、>;=、=、between。and”這些條件時,從緩沖區或數據文件中得到的第一條記錄的rownum為1,不符合sql語句的條件,會被刪除,接著取下條。下條的rownum還會是1,又被刪除,依次類推,便沒有了數據。
有關JSP分頁的SQL語句
oracle的分頁:
select uuid,shopid,name,owner,tel,compname from
(Select rownum r,uuid,shopid,name,owner,tel,compname From Tbl_shop) where r>"+startCount+" and r <="+endCount;
startCount:開始記錄數
endCount:結束記錄數
mysql的分頁:
select * from article limit "+startCount+", "+pageSize+";
startCount:開始記錄數
pageSize:每頁記錄數
MSSQL的分頁:
select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
pagesize: 每頁顯示記錄數
cureentpage:當前頁數