oracle TOP-N 与分页查询
2016-09-08 21:10
323 查看
一、Oracle 12C之前的TOP-N与分页查询
在Oracle 12C之前的查询中,如果要返回查询结果中前N条记录,或对查询结果进行分页显示,需要使用伪列rownum,对查询结果集进行排序。
例如:查询工资排序在6-10名的员工号、员工名、工资及工资排序号
二、在Oracle12C之后
在oracle12C中引入了
在Oracle 12C之前的查询中,如果要返回查询结果中前N条记录,或对查询结果进行分页显示,需要使用伪列rownum,对查询结果集进行排序。
例如:查询工资排序在6-10名的员工号、员工名、工资及工资排序号
select * from (select rownum num,employee_id,first_name,last_name,salary from (select employee_id,first_name,last_name,salary from employee order by salaryy desc) nested_order1 ) nested_order2 where num between 6 and 10;
二、在Oracle12C之后
在oracle12C中引入了
row_limiting_clause短语,可以方便的返回结果集中需要的记录。
offset : 指定跳过结果集的记录数,即从结果集的第offset+1个记录开始返回 row / rows : 使语句的语义更清晰,构成语法的完整性。两者没区别 fetch : 指定返回记录的数量 或 占整个结果集的百分比。如果没有指定改短语,则返回offset+1个记录开始的所有记录 frist / next : 使语句的语义更清晰,构成语法的完整性,两者没有区别 rowcount : 指定返回记录的数量 precent : 指定返回记录的数量占整个结果集的百分比 only : 表示实际返回的记录严格遵守指定返回的数量或百分比 with ties : 表示返回附加记录,这些附加记录与最后返回记录具有相同的排序字段值,此时select语句中必须具有order by 子句,否则不会返回附加记录 1.查询排在前5名的员工号,员工名,工资 select employee_id,first_name,last_name,salary from employee order by salary desc fetch first 5 rows whith ties; 2.查询工资排在6-10名的员工号,员工名,工资 select employee_id,first_name,last_name,salary from employee order by salary desc offset 5 rows fetch first 5 rows with ties; 3.查询5%的员工的员工号,员工名,员工工资 select employee_id,first_name,last_name,salary from employee order by salary desc fetch first 5 precent rows with ties; 注:with ties的作用 比如现在有一些数据. col 1 3 3 2 如果此时,我要取 ...order by col fetch first 3 rows 那结果就是1 2 3 只取一个3 如果加上with ties时, 则两个3都能取出来。
相关文章推荐
- redid 分页 查询 批量删除
- java分页查询 Criteria
- ExtJs3带条件的分页查询的实现
- Oracle分页查询语句
- 实现Hibernate分页查询原理解读
- ios Sqlite显示和分页查询
- mysql 分页查询语句数据库查询
- Oracle多条件查询分页存储过程
- mysql-分页查询方案
- MyBatis简单的增删改查以及简单的分页查询实现
- SQL优化-索引、查询优化及分页算法方案
- java中分页查询操作
- Ext js 4 简单实现分页查询续--客户端分页
- php 模糊查询数据库的技巧,以及数据分页原理, Date转换
- 通用的可带查询条件的SQL语句的分页存储过程(2)
- PostgreSQL分页查询引发的思考:OutOfMemoryError
- 查询优化及分页算法方案
- Java技术积累——用最原始的代码见证分页查询实现原理
- 分页查询
- 海量数据库的查询优化及分页算法方案