如何用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 語句實現數據庫分頁
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。
對sqlserver 語句進行分頁
declare @iPage int --所取的頁的序數 (第幾頁)
declare @iPageNum int --所取的數據行數(除最后一頁外,每頁所取的行數應該都是一樣的)
declare @iRecordNumber int --取@iPage頁時,結尾記錄所在行數
declare @iRecordCount int --總記錄行數
--變量初始化
set @iPage=1 --可用參數傳遞
set @iPageNum=10 --默認每頁取10行
set @iRecordNumber=@iPage*@iPageNum
select @iRecordCount=count(cirDeId) from (select cirDeId from CircleDetails group by cirDeId) a
--取最后一頁時,重算結尾所在行數(@iRecordNumber)、所取記錄數(@iPageNum)
if @iRecordNumber>@iRecordCount
begin
set @iRecordNumber=@iRecordCount
if (@iRecordNumber%@iPageNum)>0
set @iPageNum=@iRecordNumber%@iPageNum
end
select * from (
select top @iPageNum * from(
select top @iRecordNumber cirDeId,
(select count(1) from CirclePost where *d = *d_cp) circlepostcount
,(select count(1) from CircleAttention where *d = *d_ca) circleattentioncount
from CircleDetails group by cirDeId order by 3 desc,2 desc
) order by 3,2
) order by 3 desc,2 desc
用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語句如何實現
在絕大多數的應用中,返回大量的符合條件的記錄是司空見慣的,最典型的莫過于搜索了。在搜索的應用中,用戶給出搜索條件,服務器查出符合條件的記錄。但往往搜索會返回大量的數據記錄,如果在網頁中,往往是通過分頁的方式來實現,頁面提供諸如上一頁,下一頁等等按鈕來實現分頁。
現在主要有以下幾中方式來實現分頁:
*的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數據庫分頁原理
要想分頁,首先得做好準備工作。你要先聲明每頁顯示多少條數據,還得獲取當前選擇的是多少頁的頁碼。有了這兩個分頁就好辦了。
sql如下:select top 10 from tableName
where (id not in(select top 20 from tableName order by Id desc)) order by Id desc
每頁顯示的數量:自己定義。
總頁數:數據總條數/每頁顯示的條數
當前頁碼的計算方法:(頁碼-1)*每頁顯示的數量。比如我要瀏覽第3頁的數據,3從客戶端傳送過來后,在后臺對頁碼進行處理:(3-1)*每頁顯示的數量(假如是10).算出來后的結果就是20.你在把20以參數注入的方式動態添加到上面那個20那里就ok了。
sql中的10表示你每頁顯示的數據,這里跟10,就代表每頁顯示10條。(你可以定義一個常量作為每頁顯示的條數)
where中的20表示不包括前面的20條數據,也就是查詢出從第21條到30之間的數據。
不知道我這樣說你是否理解,其實只要理解了sql語句,分頁就很好做了。
使用sql 語句進行分頁問題
雖然從沒使用過這樣的分頁,不過,想法很獨特
建議修正如下:
select top 20 id,small,productid,marketprice,exchangenumber,robBuystate,robBuyBegan,robBuyEnd,robzk,robBuynum,robBuyprice,newprice,zt from likebuy_productlist where id not in (select top 20 id from likebuy_productlist where 1=1 and zt<>'5' and productid like '%IDee%' and updown='1' and productid <> 'likibuy' and vipSpecial <> 1 ORDER BY zt,bbsnum desc) and zt<>'5' and productid like '%IDee%' and updown='1' and productid <> 'likibuy' and vipSpecial <> 1 ORDER BY zt,bbsnum desc)
and zt<>'5' and productid like '%IDee%' and updown='1' and productid <> 'likibuy' and vipSpecial <> 1 ORDER BY zt,bbsnum desc
第三頁時,第二個select top 20 修改為select top 40 ,第四頁修改為select top 60
網上好多分頁的存儲過程,建議還是使用那個好.