如何用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)
如何使用sql語句進行分頁操作
利用SQL語句分頁要看你用的什么數據庫。
Oracle數據庫可以使用ROWNUM或row_number(),例如:Select * from (select ROWNUM rn, t.* from table t) where rn between 11 and 20;Select * from (select row_number() over (ORDER BY col1) rn, t.* from table t) where rn between 11 and 20;SQLServer數據庫可以用Top或者row_number()函數,道理同上。利用SQL分頁有局限性,就是針對不同的數據庫有不同的寫法,所以通常會在應用程序里面做分頁通用性比較強。
但是對于數據量非常龐大的應用來說,還是用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可以換為任何能表識記錄順序的字段。
如何用sql語句 實現分頁查詢
分頁:一般會把當前頁通過get方式傳遞,PHP通過$_GET['page']接收。
查詢:可以從當前乘以每頁顯示數通過limit來實現分頁效果。 //每頁顯示條數 $pageSize = 10; //當前頁 $_GET['page']?$page = 1:$page = $_GET['page']; //開始查詢位置 $seat = $page * $pageSize; //sql語句 $sql = "select * from table limit $seat, $pageSize"; //輸出數據到view即可。
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語句,要求不占用服務器內存的
select top everypage *from student where stu_id not in(select top(nowpage-1)*everypage stu_id from student)
本語句關鍵點:
everypage:指的是分頁是每頁顯示的信息數
nowpage:指的是當前顯示的是第幾頁
比如:
select top 10 *from student where stu_id not in(select top(2-1)*10 stu_id from student)
的意思是從學生表中查找出第二頁顯示的學生的信息(每頁顯示10條學生信息)
本人覺得此語句不太占用服務器內存,因為每次請求只是查找了數據庫中表的一部分而已!
用SQL語句怎么實現數據庫分頁
CREATE PROC sp_PageView
@tbname sysname, --要分頁顯示的表名
@FieldKey nvarchar(1000), --用于定位記錄的主鍵(惟一鍵)字段,可以是逗號分隔的多個字段
@PageCurrent int=1, --要顯示的頁碼
@PageSize int=10, --每頁的大小(記錄數)
@FieldShow nvarchar(1000)='', --以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段
@FieldOrder nvarchar(1000)='', --以逗號分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序順序
@Where nvarchar(1000)='', --查詢條件
@PageCount int OUTPUT --總頁數
AS
SET NOCOUNT ON
--檢查對象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'對象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、視圖或者表值函數',1,16,@tbname)
RETURN
END
--分頁字段檢查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分頁處理需要主鍵(或者惟一鍵)',1,16)
RETURN
END
--其他參數檢查及規范
IF ISNULL(@PageCurrent,0)0
SELECT @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1
+N' AND a.'+LEFT(@s,CHARINDEX(N',',@s)-1)
+N'='+LEFT(@s,CHARINDEX(N',',@s)-1)
SELECT @Where1=STUFF(@Where1+N' AND a.'+@s+N'='+@s,1,5,N''),
@TopN=@TopN1-@PageSize
--執行查詢
EXEC(N'SET ROWCOUNT '+@TopN1
+N' SELECT '+@FieldKey
+N' INTO # FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder
+N' SET ROWCOUNT '+@TopN
+N' DELETE FROM #'
+N' SELECT '+@FieldShow
+N' FROM '+@tbname
+N' a WHERE EXISTS(SELECT * FROM # WHERE '+@Where1
+N') '+@FieldOrder)
END
一條sql 語句實現數據庫分頁
select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段 10 = 每頁記錄數 20 = (當前頁 + 1) * 每頁記錄數 以上語句即可以實現分頁,但是最后取出的結果排序是升序,如果需要結果集為降序(例如時間),則有兩種方法可以處理 1.使用以下語句,但效率可能要降低一些 select * from 表名 b, (select top 10 主鍵字段,排序字段 from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a order by 排序字段 ) c where b.主鍵字段 = c.主鍵字段 order by c.排序字段 desc 2.在ado里處理,將記錄集游標移到最后,然后前移 ''以下為asp范例 set rsTemp = *Object("*set") * 語句,conn,1,1 *st for i = 1 to *Count '取值。
. *evious next。