Oracle数据库分页查询
1.直接使用rownum
直接使用rownum时,不能对 rownum 使用 >(大于或等于 1 的数值)、>=(大于 1 的数值)、=(不等于 1 的数值),否则无结果。
因此,直接用rownum的时候只能从1开始。(rownum >= 1)
原因:如果第一条不满足,去掉的话,第二条的rownum还会是1,你条件不包括1,就永远没有符合条件的记录了。
单独使用rownum,Demo:
正确用法:
select * from EMP where ROWNUM >= 1;
select * from EMP where ROWNUM <= 1;
select * from EMP where ROWNUM <= 10;
以下用法查询无结果:
select * from EMP where ROWNUM > 1;
select * from EMP where ROWNUM >= 2;
select * from EMP where ROWNUM < 1;
select * from EMP where ROWNUM = 0;
2.使用rownum分页查询
2.1 rownum嵌套使用
select *
from (
select ROWNUM AS rnum, e.*
from EMP e
)
WHERE rnum >= 10;
2.2 rownum嵌套查询1
内层放结束游标,外层放起始游标。反之查询为空,后面同理。
select * from
(
select
ROWNUM rnum,
e.*
FROM
EMP e
WHERE
ROWNUM <= 4
)
WHERE
rnum >= 2;
2.3 rownum嵌套查询2(排序后分页)
若需要排序,先在内层排序好后,再进行分页
SELECT * FROM
(
SELECT * FROM
(
SELECT
ROWNUM rnum,
E .*
FROM
EMP E ORDER BY SAL
)
WHERE
rnum <= 5
)
WHERE
rnum >= 2;
2.4 rownum嵌套查询2(BETWEEN)
使用此函数分页,查询效率略低一些
SELECT * FROM(
SELECT ROWNUM rnum, e.*
FROM EMP e
)WHERE rnum BETWEEN 3 AND 6;