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)*
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)*
相关文章推荐
- Oracle数据库中分页查询中排序及效率问题
- Oracle数据库查询高效分页
- Oracle数据库查询高效分页
- Oracle数据库分页查询
- oracle数据库分页查询(直接套用就行,超级简单!)
- oracle数据库查询结果分页处理(Java +Jsp +Tag)
- Oracle数据库查询高效分页
- Oracle数据库查询高效分页
- Hibernate分页查询oracle数据库显示结果集与实际查询不匹配
- oracle数据库分页查询(带排序)
- oracle数据库下的分页查询
- 基于Oracle数据库,用SSM框架和easyUI实现分页查询操作
- 关于java的分页查询操作解析(本题只针对oracle数据库的分页查询)
- (Oracle技能篇) oracle数据库分页查询和各大数据库的分页查询
- Oracle数据库查询高效分页
- Oracle数据库查询高效分页
- Oracle数据库查询高效分页
- [置顶] oracle数据库分页查询原理与事例实现(五六种方法)
- Mybatis Example对Oracle数据库的分页查询
- Oracle数据库之分页查询