您的位置:首页 > 数据库 > Oracle

Sql Server和Oracle的sql语句分页

2012-12-12 10:27 531 查看
在sql2005以上的版本中可以用如下代码:

--@PageNo 是页码(要查询第几页),@pageSize是页容量(即每页显示多少条数据)
select * from (
select row_number() over(order by id) rn,* from Test)
tb where rn >(@PageNo-1)*@pageSize and rn <=@PageNo*@pageSize

以上只是简单的分页,如果还有其他逻辑,比如排序 可以在over中加入排序的方法 test表 也可以换成子查询等其他逻辑

在oracle中,可以使用如下语句

select t2.*
from (select rownum r,t1.* from test t1 where rownum<=:PageNo*:pageSize) t2
where t2.r>(:PageNo-1)*:pageSize


参数由@变成了‘:’意义都是相同的! 只需在查询时传入需要的参数即可

下列语句只提供参考逻辑,各版本都可以使用

1.存储过程

1.

declare @PageNo int ,@pageSize int;
set @PageNo = 2
set @pageSize=20
select * from (
select row_number() over(order by object_id) rn,* from sys.objects)
tb where rn >(@PageNo-1)*@pageSize and rn <=@PageNo*@pageSize


2.

SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id


3.

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: