Was ist in einer Oracle -Datenbank der Unterschied zwischen Rownum und Row_Number?
-
05-07-2019 - |
Frage
Was ist der Unterschied zwischen ROWNUM
und ROW_NUMBER
?
Lösung
Rownum ist ein "Pseudocolumn", der jeder Zeile eine Nummer zuweist, die von einer Abfrage zurückgegeben wird:
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 ist eine analytische Funktion, die jeder Zeile gemäß ihrer Bestellung innerhalb einer Gruppe von Zeilen eine Nummer zuweist:
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
Andere Tipps
Aus einer kleinen Lektüre ist Rownum ein von Oracle automatisch einem Rowset zugewiesener Wert (vor der Bestellung durch Bewertung, also nicht je ORDER BY ROWNUM
oder verwenden a WHERE ROWNUM < 10
mit einem ORDER BY
).
ZEILENNUMMER() Scheint eine Funktion zum Zuweisen von Zeilennummern zu einem von einer Unterabfrage oder Partition zurückgegebenen Ergebniszahlen zu sein.
Neben den anderen in Antworten genannten Unterschieden sollten Sie auch die Leistung in Betracht ziehen. Hier gibt es einen nicht autoritativen, aber sehr interessanten Bericht, in dem verschiedene Paginierungsmittel verglichen werden, unter denen die Verwendung von ROWNUM
verglichen mit ROW_NUMBER() OVER()
:
Rownum ist ein Pseudocolumn, der jeder ausgewählten Abfrage hinzugefügt werden kann, um die zurückgegebenen Zeilen zu nummerieren (beginnend mit 1). Sie werden gemäß dem Zeitpunkt, an dem sie als Teil des Endergebnissatzes identifiziert wurden. (#Ref)
Zeilennummer ist eine Analytikfunktion, mit der die von der Abfrage zurückgegebenen Zeilen in einer von der Funktion row_number () vorgeschriebenen Bestellung verwendet werden können.
Rownum beginnt mit 1 .. Incastices nach dem Zustand bewertete die Ergebnisse zu true. Daher gibt Rownum> = 1 alle Zeilen in der Tabelle zurück