Oracle选取有限条数据记录

来源:互联网 发布:js实现继承的几种方法 编辑:程序博客网 时间:2024/06/07 06:25

Oracle rownum 用法

rownum是加在结果集上的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先有结果集后有rownum)。它总是从1开始排起的。
例如,选取前5行:select rownum,ename from emp where rownum <= 5;
rownum 不能接 > 号和 >= 号,只能使用<=,选取行范围时使用子查询:
select r,rownum,ename from (select rownum r, ename from emp) where r>=5 and r <=10;
这里比较了r,rownum的不同,就可以看到使用子查询选择行范围时,要把rownum转换成实列。

求最近雇用的10名员工:
SELECT rownum,empno,ename,hiredate
FROM (SELECT *
    FROM emp
     ORDER BY hiredate DESC)
WHERE ROWNUM <= 10;
本语句的执行顺序是:先排序再取10条行。

SELECT rownum,empno,ename,hiredate
    FROM emp
    WHERE ROWNUM <= 10
ORDER BY hiredate DESC;
本语句的执行顺序是:先取10条行再排序。

注意:本语句的执行顺序和order by列有关,如果order by列是主键,就先排序,再取10条(速度比第一种语句快);否则就是先取10条再排序,此时结果就与要求不一样了,所以第二种写法一定要在排序列是主键的情况下才能保证结果正确。

使用rownum求当月的所有天数:
SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1
    FROM DUAL
CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))