2008-10-06 2 views

ответ

35

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

Из небольшого чтения, ROWNUM это значение автоматически назначается Oracle в наборе строк (до ORDER BY оцениваемого, так что не никогдаORDER BY ROWNUM или использовать WHERE ROWNUM < 10 с ORDER BY).

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

+0

order by ok ok, например, выберите * from (выберите a, b, c из foo order by d) где rownum <10 – Ron 2009-12-04 00:18:35

+2

@Ron: Попробуйте. Вы поймете, насколько трудно получить первые 10 результатов из всего набора результатов, а затем заказывает их. – Powerlord 2009-12-04 14:47:32

-1

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

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

0

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

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

-1

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

Смежные вопросы