由于单纯地使用ROWNUM无法实现对于查询的排序, 下面是一个简单的利用例子:
select username,rownum from dba_users
where rownum < 4 order by username;
USERNAME ROWNUM
-------------------------- ------
OUTLN 3
SYS 1
SYSTEM 2
这样就可以通过取得记录然后排序解决问题:
不过经过测试在oracle9i上可以直接用order by 可能甲骨文公司在发行新版本的时候改正了这个缺点
SELECT username,rownum FROM
(SELECT username FROM dba_users ORDER BY username)
WHERE ROWNUM < 4;
USERNAME ROWNUM
-------------------------- ------
AURORA$ORB$UNAUTHENTICATED 1
CTXSYS 2
DBSNMP 3
但是这样效率比较低
如果你order by 的列是唯一的可以通过设置该列为加主键或索引就可以直接使用
select username,rownum from dba_users
where rownum < 4 order by username;
方法来得到排序后前3个行。
一个(>)符号和 rownum 一起使用时遇到负数则不会有结果:
1 SELECT username,rownum FROM
2 (SELECT username FROM dba_users ORDER BY username)
3* WHERE ROWNUM > 4
SQL> /
no rows selected
要显示最末的三条记录就不能使用(>):
1 SELECT username,rownum FROM
2 (SELECT username FROM dba_users ORDER BY username desc)
3* WHERE ROWNUM < 4
SQL> /
USERNAME ROWNUM
-------------------------- ------
TESTUSER 1
SYSTEM 2
SYS 3
------------