2008-10-06 18 views

Respuesta

35

ROWNUM es un "pseudocolumna" que asigna un número a cada fila devuelta por una consulta:

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 es una función analítica que asigna un número a cada fila de acuerdo a su orden dentro de un grupo de filas :

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

de un poco de lectura, ROWNUM es un valor asignado de forma automática por Oracle a un conjunto de filas (antes de ORDER BY que se está evaluando, por lo que no siempre ORDER BY ROWNUM o utilizar un WHERE ROWNUM < 10 con un ORDER BY).

ROW_NUMBER() parece ser una función para asignar números de fila a un conjunto de resultados devuelto por una subconsulta o partición.

+0

ordenar por es correcto, por ejemplo, seleccionar * de (seleccionar a, b, c desde foo ordenar por d) donde rownum <10 – Ron

+2

@Ron: Pruébelo. Descubrirá de la peor manera que toma los primeros 10 resultados de todo el conjunto de resultados, y luego los ordena. – Powerlord

+0

@Powerlord: si usamos la consulta interna, se aplicará rownum en el resultado de la consulta interna – Ali786

-1

rownum es una pseudocolumna que se puede agregar a cualquier consulta de selección, para numerar las filas devueltas (empezando por 1). Se ordenan según el momento en que se identificaron como parte del conjunto de resultados final. (#ref)

row_number es la función de una analítica, que puede ser utilizado para numerar las filas devueltas por la consulta en un orden dispuesto por la función row_number().

+1

-1 para "Están numerados en el orden en que se devuelven las filas". No es cierto: se ordenan de acuerdo con el momento en que se identificaron como parte del conjunto de resultados final, por lo que es anterior a una cláusula ORDER BY –

0

Aparte de las otras diferencias mencionadas en las respuestas, también debe considerar el rendimiento. Hay un informe de no autorizada, pero muy interesante aquí, la comparación de diversos medios de paginación, entre los cuales el uso de ROWNUM en comparación con ROW_NUMBER() OVER():

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

-1

ROWNUM comienza con 1 ..increases después condición evaluada resultados a cierto . Por lo tanto, rownum> = 1 devuelve todas las filas en la tabla

Cuestiones relacionadas