В базе данных Oracle, в чем разница между ROWNUM и номером строки?

в чем разница между ROWNUM и ROW_NUMBER ?

5 ответов


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 ROWNUM или использовать WHERE ROWNUM < 10 С ORDER BY).

функции row_number() представляется функцией для присвоения номеров строк результирующему набору, возвращаемому вложенным запросом или разделом.


помимо других различий, упомянутых в ответах, вы также должны рассмотреть производительность. Здесь есть не авторитетный, но очень интересный отчет, сравнивающий различные способы разбиения на страницы, среди которых использование ROWNUM по сравнению с ROW_NUMBER() OVER():

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


rownum псевдостолбцом, который может быть добавлен к любой запрос SELECT, чтобы количество строк (начиная с 1). Они упорядочиваются в соответствии с тем, когда они определены в качестве части конечного результата. (#ref)

функции row_number - функция аналитики, которая может использоваться для нумерации строк, возвращаемых запросом в порядке, установленном функцией row_number ().


Rownum начинается с 1 ..увеличивается после оценки состояния результатов до true . Следовательно, rownum >=1 возвращает все строки в таблице