Pregunta

Cuál es la diferencia entre ROWNUM y ROW_NUMBER ?

¿Fue útil?

Solución

ROWNUM es una " pseudocolumn " 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 con 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

Otros consejos

De una pequeña lectura, ROWNUM es un valor asignado automáticamente por Oracle a un conjunto de filas (antes de que se evalúe ORDER BY, por lo que no nunca ORDER BY ROWNUM o use 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.

Además de las otras diferencias mencionadas en las respuestas, también debe considerar el rendimiento. Aquí hay un informe no autoritativo pero muy interesante, que compara varios 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

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

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

Rownum comienza con 1 .. aumenta después de que la condición evaluó los resultados como verdaderos. Por lo tanto, rownum & Gt; = 1 devuelve todas las filas de la tabla

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top