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

ORACLE数据库分页查询

2018-03-08 19:33 260 查看
在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)*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息