В чем разница между ROWNUM и ROW_NUMBER в базе данных Oracle?

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
24
0
36 155
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, поэтому не используйте Когда-либоORDER BY ROWNUM и не используйте WHERE ROWNUM < 10 с ORDER BY).

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

порядок по в порядке, например, выберите * из (выберите a, b, c из foo порядок по d), где rownum <10

Ron 04.12.2009 03:18

@Ron: Попробуй. Вы узнаете на собственном опыте, что он берет первые 10 результатов из всего набора результатов, а затем их упорядочивает.

Powerlord 04.12.2009 17:47

@Powerlord: если мы используем внутренний запрос, тогда rownum будет применяться к результату внутреннего запроса

Ali786 29.11.2014 07:56

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

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

-1 для «Они пронумерованы в порядке возврата строк». Неправда - они упорядочены в соответствии с тем, когда они были идентифицированы как часть окончательного набора результатов, так что это до предложения ORDER BY

David Aldridge 06.10.2008 19:17

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

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

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

Другие вопросы по теме