Ⅰ sql Server 分頁 查詢語句
四種方式實現SQLServer 分頁查詢
SQLServer 的數據分頁:
假設現在有這樣的一張表:
CREATE TABLE test
(
id int primary key not null identity,
names varchar(20)
)
然後向裡面插入大約1000條數據,進行分頁測試
假設頁數是10,現在要拿出第5頁的內容,查詢語句如下:
--10代表分頁的大小
select top 10 *
from test
where id not in
(
--40是這么計算出來的:10*(5-1)
select top 40 id from test order by id
)
order by id
原理:需要拿出資料庫的第5頁,就是40-50條記錄。首先拿出資料庫中的前40條記錄的id值,然後再拿出剩餘部分的前10條元素
第二種方法:
還是以上面的結果為例,採用另外的一種方法
--數據的意思和上面提及的一樣
select top 10 *
from test
where id >
(
select isnull(max(id),0)
from
(
select top 40 id from test order by id
) A
)
order by id
原理:先查詢前40條記錄,然後獲得其最id值,如果id值為null的,那麼就返回0
然後查詢id值大於前40條記錄的最大id值的記錄。
這個查詢有一個條件,就是id必須是int類型的。
第三種方法:
select top 10 *
from
(
select row_number() over(order by id) as rownumber,* from test
) A
where rownumber > 40
原理:先把表中的所有數據都按照一個rowNumber進行排序,然後查詢rownuber大於40的前十條記錄
這種方法和oracle中的一種分頁方式類似,不過只支持2005版本以上的
第四種:
存儲過程查詢
創建存儲過程
alter procere pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @temp=@pageSize*(@page - 1)
begin
select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id
end
執行存儲過程
exec 10,5
Ⅱ sql分頁語句查詢問題
從t1結果集中取數據的時候沒有排序,當然結果不會變
改成這樣
select * from(select top 3 * from(select top 3 * from student order by 編號 desc) t1 order by 編號 desc) t2 order by 編號 asc
Ⅲ 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 Server 2000/2005
SELECT TOP 頁大小 *
FROM table1
WHERE id NOT IN
SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER BY id
Ⅳ 一條sql語句實現分頁查詢,且能返回記錄總數
select *,(select count(*) from t1) from(
select top 2 * from(
select top 4 * from(
select * from t1
)as ttb0 order by id
)as ttb1 order by id desc
)as ttb2 order by id
在select後加個子查詢就OK了,
Ⅵ 求SQL分頁的語句
2個參數Start end
start 開始 end 結束
例如第二頁從Start11條開始 結束end 21百
select * from (select rownum a,NEWS.* from NEWS where rownum<='"+end+"') b where b.a>'"+start+"'"
方法2 select * from NEWS limit a,b
a就是從第幾條開始 b就是查詢出的條數
例如 從第10條開始後的10條select * from NEWS limit 10,10
從第6條開始後的8條select * from NEWS limit 6,8
Ⅶ SQL分頁查詢,怎麼一次性顯示2頁的查詢結果
按照上面回答的,可以這樣修改下:
SELECT 產品, SUM(CASE 季度 WHEN '第一季度' THEN 銷售量 ELSE 0 END) AS 第一季度, SUM(CASE 季度 WHEN '第二季度' THEN 銷售量 ELSE 0 END) AS 第二季度, SUM(CASE 季度 WHEN '第三季度' THEN 銷售量 ELSE 0 END) AS 第三季度 FROM
(select *,ROW_NUMBER over(order by 產品) as rn from Tables )
where rn between @PageSize*(@PageIndex-1)+1 and @PageSize*@PageIndex
GROUP BY 產品 ORDER BY 產品,rn
@PageSize 每頁幾條數據
@PageIndex 頁碼
只需按照參數傳遞即可
Ⅷ sql分頁查詢語句 首頁,上一頁怎麼實現
--假如每頁顯示條數據10條
--哪么第一頁1~10 第二頁11~20 即起始行數=10*(頁數-1)+1,結束行=頁數*10
declare@startint
declare@endint
set@start=8
set@end=18
select*from(
selectP_ID,P_ClassName,ROW_NUMBER()OVER(orderbyP_ID)asrowfrom
dbo.AD_Position)asa
whererowbetween@startand@end
--太酷了,這樣一個分頁就搞定了。還可以這樣變化,可選參數只是[頁的大小]
declare@pagesizeint
declare@startint
declare@endint
declare@pagecountint
set@pagecount=2
set@pagesize=10
set@start=(@pagesize*(@pagecount-1)+1)
set@end=@pagecount*@pagesize
select*from(
selectP_ID,P_ClassName,ROW_NUMBER()OVER(orderbyP_ID)asrowfrom
dbo.AD_Position)asa
whererowbetween@startand@end
這是前幾年的一個博文摘錄,希望對你用!
Ⅸ 關於分頁查詢的sql語句
這里的K不僅僅是個別名的作用,他把 (select *,row_number() over(order BY UserID) rowIndex from userinfo)做為一個表來查詢 ,如果不加則作為一個查詢結果集,SQL無法再查詢結果集上在進行查詢
Ⅹ Access資料庫分頁查詢,效率sql語句
in的效率太低,不能利用索引,建議使用:
select top 每頁數量 * from 表 where id >(select top 1 max(id) from (select top (頁數-1)*每頁數量 from 表 order by id,name)) 或
select top 每頁數量 * from 表 where id <(此處根據順序和逆序)