在Oracle数据库中,ROWNUM和ROW_NUMBER有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (39)

有什么区别?

提问于
用户回答回答于

ROWNUM是一个“伪列”,它为查询返回的每一行分配一个数字:

SQL> select rownum, ename, deptno
  2  from emp;

    ROWNUM ENAME          DEPTNO
---------- ---------- ----------
         1 SMITH              99
         2 ALLEN              30
         3 WARD               30
         4 JONES              20
         5 MARTIN             30
         6 BLAKE              30
         7 CLARK              10
         8 SCOTT              20
         9 KING               10
        10 TURNER             30
        11 FORD               20
        12 MILLER             10

ROW_NUMBER是一个分析函数,它根据一组行中的排序为每行分配一个数字:

SQL> select ename, deptno, row_number() over (partition by deptno order by ename) rn
  2  from emp;

ENAME          DEPTNO         RN
---------- ---------- ----------
CLARK              10          1
KING               10          2
MILLER             10          3
FORD               20          1
JONES              20          2
SCOTT              20          3
ALLEN              30          1
BLAKE              30          2
MARTIN             30          3
TURNER             30          4
WARD               30          5
SMITH              99          1
用户回答回答于

ROWNUM是由Oracle自动分配给行集的值(在ORDER BY被评估之前,所以永远 不要ORDER BY ROWNUMWHERE ROWNUM < 10与an一起使用ORDER BY)。

ROW_NUMBER()似乎是一个将行号分配给由子查询或分区返回的结果集的函数。

扫码关注云+社区