В базе данных 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()
:
rownum псевдостолбцом, который может быть добавлен к любой запрос SELECT, чтобы количество строк (начиная с 1). Они упорядочиваются в соответствии с тем, когда они определены в качестве части конечного результата. (#ref)
функции row_number - функция аналитики, которая может использоваться для нумерации строк, возвращаемых запросом в порядке, установленном функцией row_number ().
Rownum начинается с 1 ..увеличивается после оценки состояния результатов до true . Следовательно, rownum >=1 возвращает все строки в таблице