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

时间:2008-10-06 14:47:46

标签: sql oracle row-number rownum

ROWNUMROW_NUMBER之间有什么区别?

5 个答案:

答案 0 :(得分:37)

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

答案 1 :(得分:1)

从稍微阅读开始,ROWNUM是Oracle自动分配给行集的值(在评估ORDER BY之前,所以不要永远 ORDER BY ROWNUM或使用{{1与WHERE ROWNUM < 10)。

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

答案 2 :(得分:1)

除了答案中提到的其他差异外,您还应该考虑表现。这里有一个非权威但非常有趣的报告,比较各种分页方式,其中使用ROWNUMROW_NUMBER() OVER()进行比较:

http://www.inf.unideb.hu/~gabora/pagination/results.html

答案 3 :(得分:-1)

rownum是一个伪列,可以添加到任何选择查询中,对返回的行进行编号(从1开始)。它们根据何时被识别为最终结果集的一部分进行排序。 (#ref

row_number是一个解析函数,可用于按行row_number()函数强制命令对查询返回的行进行编号。

答案 4 :(得分:-1)

在条件评估结果为真后,Rownum以1 ..增加开始。 因此rownum&gt; = 1返回表

中的所有行