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

oracle TOP-N 与分页查询

2016-09-08 21:10 323 查看
一、Oracle 12C之前的TOP-N与分页查询

在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都能取出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle TOP-N 分页查询