В чем разница между ROWNUM и ROW_NUMBER в базе данных Oracle?
-
05-07-2019 - |
Вопрос
В чем разница между ROWNUM
и ROW_NUMBER
? Р>
Решение
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 ROWNUM
и не используйте WHERE ROWNUM < 10
с ORDER BY
). р>
ROW_NUMBER () отображается для быть функцией для назначения номеров строк результирующему набору, возвращенному подзапросом или разделом.
Помимо других отличий, упомянутых в ответах, вы также должны учитывать производительность. Здесь есть неавторизованный, но очень интересный отчет, сравнивающий различные способы нумерации страниц, среди которых использование ROWNUM
по сравнению с ROW_NUMBER() OVER()
:
http://www.inf.unideb.hu/~gabora/ нумерация страницы / results.html р>
rownum - псевдоколонка, которую можно добавить к любому выбору запрос для нумерации возвращаемых строк (начиная с 1). Они упорядочены в соответствии с тем, когда они были определены как часть окончательного набора результатов. ( #ref )
row_number - это аналитическая функция, которая может быть используется для нумерации строк, возвращаемых запросом, в порядке, указанном функцией row_number ().
Rownum начинается с 1 .. увеличивается после того, как условие оценивает результаты как true. Следовательно, rownum & Gt; = 1 возвращает все строки в таблице