ROWNUM used in ORACLE

博客主要围绕Oracle数据库中ROWNUM排序查询展开。指出单纯用ROWNUM无法实现查询排序,介绍了通过取记录再排序解决问题的方法,还提及在oracle9i上可直接用order by但效率低,以及order by列唯一时的处理方式,同时说明了ROWNUM与符号搭配使用的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于单纯地使用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  

------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值