ORACLE数据库分页查询

在ORACLE中利用ROWNUM的特性,可以实现数据库端的分页查询

ROWNUM:
ROWNUM是一个伪列,伪列是使用类似于表中的列,而实际并没有存储在表中的特殊列;

ROWNUM的功能是在每次查询时,返回结果集的顺序号,这个顺序号是在记录输出时才一步一步产生的,第一行显示为1,第二行为2,以此类推。


ROWNUM使用的注意点:
1.如下SQL语句:

SELECT * FROM EMP WHERE ROWNUM > 2,查询不到任何记录,因为ROWNUM是在记录输出时才生成,并且总是从1开始,所有输出的第一条记录不满足>2的条件,被过滤掉,第二条的ROWNUM又成了1,又不满足>2的条件,又被过滤,依次类推,所有永远没有满足条件的记录,返回为空。所以对于ROWNUM只能执行<,>,<=运算,不能执行>,>=或一个区间运算Between....And等。

2.ROWNUM和ORDER BY一起使用时,因为ROWNUM在记录输出时生成,而ORDER BY子句在最后执行,所以当两者一起使用时,需要注意ROWNUM实际是已经被排除了序的ROWNUM。

分页查询:1,当未指定需要按照某列排序,语法为:

SELECT b.*
FROM  (SELECT ROWNUM rn,[列名1,列名2......列名n]
              FROM 表名1,表名2......表名n
              WHERE [条件表达式 AND] ROWNUM <= 目标页数*每页记录数) b

WHERE rn > (目标页数-1)*每页记录数;--取别名rn是为了和ROWNUM区别开

或写作

SELECT b.*
FROM  (SELECT ROWNUM rn,[列名1,列名2......列名n]
             FROM 表名1,表名2......表名n
             WHERE 条件表达式) b

WHERE rn <= 目标页数*每页记录数 and rn >  (目标页数-1)*每页记录数;

分页查询:2,指定需要按照某列排序时,语法为:

SELECT *
FROM  (SELECT ROWNUM rn, b.*
            FROM (SELECT  列名1 [, 列名2,.... 列名n]
                       FROM  表名1,[ 表名2,... 表名n]
                       [WHERE  子句]
                       ORDER BY 列 要排序的列 ASC | DESC ) b
            WHERE ROWNUM <= 目标页数* 每页记录数
)

WHERE rn > ( 目标页数-1)*数 每页记录数 ;

或写作:

SELECT *
FROM (SELECT ROWNUM rn, b.*
           FROM (SELECT  列名1 [, 列名2,.... 列名n]
           FROM  表名1,[ 表名2,... 表名n]
           [WHERE  子句]
           ORDER BY 列 要排序的列 ASC|DESC ) b
)
WHERE rn <= 目标页数*数 每页记录数 and rn > ( 目标页数-1)*

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值