2008-10-06 8 views

Répondre

35

ROWNUM est un « pseudo-colonne » 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 sa commande 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 
1

d'un peu de lecture, ROWNUM est une valeur attribuée automatiquement par Oracle à un ensemble de lignes (avant ORDER BY en cours d'évaluation, donc ne jamaisORDER BY ROWNUM ou utilisez un WHERE ROWNUM < 10 avec un ORDER BY).

ROW_NUMBER() semble être une fonction permettant d'attribuer des numéros de lignes à un ensemble de résultats renvoyé par une sous-requête ou une partition.

+0

par ordre est correct, par exemple, select * from (choisir a, b, c de l'ordre de foo par d) où rownum <10 – Ron

+2

@Ron: essayer. Vous découvrirez à la dure qu'il prend les 10 premiers résultats de l'ensemble des résultats, puis les commande. – Powerlord

+0

@Powerlord: si nous utilisons une requête interne alors rownum sera appliqué sur le résultat de la requête interne – Ali786

-1

rownum est une pseudocolonne qui peut être ajoutée à n'importe quelle requête de sélection, 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ée pour numéroter les lignes renvoyées par la requête dans un ordre mandaté par la fonction row_number().

+1

-1 pour "Ils sont numérotés dans l'ordre dans lequel les lignes sont retournées". Pas vrai - ils sont classés en fonction du moment où ils ont été identifiés comme faisant partie du jeu de résultats final, donc c'est avant une clause ORDER BY –

0

En dehors des autres différences mentionnées dans les réponses, vous devriez également considérer la performance. Il y a un non-autorité, mais très intéressant rapport ici, en comparant divers moyens de pagination, parmi lesquels l'utilisation de ROWNUM par rapport à ROW_NUMBER() OVER():

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

-1

ROWNUM commence par 1 ..increases après l'état évalué les résultats true . Ainsi rownum> = 1 renvoie toutes les lignes du tableau