Dans une base de données Oracle, quelle est la différence entre ROWNUM et ROW_NUMBER?
-
05-07-2019 - |
Question
Quelle est la différence entre ROWNUM
et ROW_NUMBER
?
La solution
ROWNUM est une & "pseudocolonne &"; qui attribue un numéro à chaque ligne renvoyée par une requête:
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 est une fonction analytique qui attribue un numéro à chaque ligne en fonction de son classement dans un groupe de lignes:
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
Autres conseils
En quelques lectures, ROWNUM est une valeur automatiquement attribuée par Oracle à un ensemble de lignes (avant l'évaluation de ORDER BY, il ne faut donc pas jamais ORDER BY ROWNUM
ni utiliser un WHERE ROWNUM < 10
avec ORDER BY
).
ROW_NUMBER () apparaît pour est une fonction permettant d'affecter des numéros de ligne à un jeu de résultats renvoyé par une sous-requête ou une partition.
Hormis les autres différences mentionnées dans les réponses, vous devez également prendre en compte les performances. Il s'agit ici d'un rapport peu intéressant mais très intéressant, comparant différents moyens de pagination, parmi lesquels l'utilisation de ROWNUM
par rapport à ROW_NUMBER() OVER()
:
rownum est une pseudo-colonne qui peut être ajoutée à toute sélection query, pour numéroter les lignes retournées (en commençant par 1). Ils sont classés en fonction du moment où ils ont été identifiés comme faisant partie du jeu de résultats final. ( #ref )
row_number est une fonction d'analyse qui peut être utilisé pour numéroter les lignes renvoyées par la requête dans un ordre imposé par la fonction row_number ().
Rownum commence par 1 .. augmente après que la condition a évalué les résultats à vrais. Par conséquent, rownum & Gt; = 1 renvoie toutes les lignes du tableau
.