sql分页多次请求一页数据,sql语句实现分页
如何使用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分页查询,求高手指点
oracle 的话可以用 rownum
select * from ( 你的语句 ) where rownum 11
select * from ( 你的语句 ) where rownum 10 and rownum 21
sqlserver的话用 ROW_NUMBER()
SQL如何实现数据分页,要具体语句,谢谢
可以的,用存储过程
分页存储过程如下
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '*', -- 需要返回的列,默认为全部
@Orderfld varchar(255), -- 排序字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType varchar(50) = 'asc', -- 设置排序类型, 非 asc 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(1000) -- 主语句
declare @strTmp varchar(300) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @IsCount != 0 --执行总数统计
begin
if @strWhere != ''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end
else --执行查询操作
begin
if @OrderType != 'asc'
begin
set @strTmp = "(select min"
set @strOrder = " order by [" + @Orderfld +"] desc"
end
else
begin
set @strTmp = "(select max"
set @strOrder = " order by [" + @Orderfld +"] asc"
end
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "
+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder
if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
end
exec (@strSQL)
SQL语句分页查询,一页面多少数据合适
2万条。
在SQLServer中通过SQL语句实现分页查询,在SQLServer中通过SQL语句实现分页后插入数据2万条,用更多的数据测试会明显一些。微软的SQLSERVER提供了两种索引:聚集索引,也称聚类索引、簇集索引和非聚集索引,也称非聚类索引、非簇集索引。
建立一个web应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标。游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机。更重要的是,对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可,后来,网上有人改造了此存储过程,实现了分页储存。
几种流行的数据库SQL分页
sqlserver分页?
?第一种分页方法
?需用到的参数:?
?pageSize?每页显示多少条数据?
?pageNumber?页数?从客户端传来?
?totalRecouds?表中的总记录数?select?count?(*)?from?表名?
?totalPages?总页数?
?totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1?
?pages?计算前pages?条数据?
?pages=?pageSize*(pageNumber-1)?
?SQL语句:?
?select?top?pageSize?*?from?表名?where?id??not?in?(select?top?pages?id?from?表名?order?by?id)?order?by?id?
?第二种分页方法
?pageSize?每页显示多少条数据?
?pageNumber?页数?从客户端传来
?pages=pageSize*(pageNumber-1)+1
?select?top?pageSize?*?from?表名?where?id=(select?max(id)?from?(select?top?pages?id?from?表名?order?by?id?asc?)?t?)
mysql分页?
?需用到的参数:?
?pageSize?每页显示多少条数据?
?pageNumber?页数?从客户端传来?
?totalRecouds?表中的总记录数?select?count?(*)?from?表名?
?totalPages?总页数?
?totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1?
?pages?起始位置?
?pages=?pageSize*(pageNumber-1)?
?SQL语句:?
?select?*?from?表名?limit?pages,?pageSize;?
?mysql?分页依赖于关键字?limit?它需两个参数:起始位置和pageSize?
?起始位置=页大小*(页数-1)?
?起始位置=pageSize*(pageNumber?-1)?
oracle分页
?pageSize?每页显示多少条数据?
?pageNumber?页数?从客户端传来?
?totalRecouds?表中的总记录数?select?count?(*)?from?表名?
?totalPages?总页数?
?totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1?
?startPage?起始位置?
?startPage=?pageSize*(pageNumber-1)+1
?endPage=startPage+pageSize
?SQL语句
?select?a.*?from?
?(
???select?rownum?num?,t.*?from??表名?t?where?某列=某值?order?by?id?asc?
?)a
?where?a.num=startPage?and?a.numendPage
db2分页
?int?startPage=1??//起始页
?int?endPage;?????//终止页
?int?pageSize=5;??//页大小
?int?pageNumber=1?//请求页
?startPage=(pageNumber-1)*pageSize+1?
?endPage=(startPage+pageSize);
?SQL语句
?select?*?from?(select?字段1,字段2,字段3,字段4,字段5,rownumber()?over(order?by?排序字段?asc?)?as?rowid??from?表名?)as?a?where?a.rowid?=?startPage?AND?a.rowid?endPage
access分页
?pageSize?每页显示多少条数据?
?pageNumber?页数?从客户端传来
?pages=pageSize*(pageNumber-1)+1
?SQL语句
?select?top?pageSize?*?from?表名?where?id=(select?max(id)?from?(select?top?pages?id?from?表名?order?by?id?asc?)?t?)