Oracleデータベースでは、ROWNUMとROW_NUMBERの違いは何ですか?
-
05-07-2019 - |
質問
ROWNUM
とROW_NUMBER
の違いは何ですか?
解決
ROWNUMは<!> quot; pseudocolumn <!> quot;です。クエリによって返された各行に番号を割り当てます:
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は、行グループ内の順序に従って各行に番号を割り当てる分析関数です。
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
他のヒント
少し読むと、ROWNUMはOracleによって行セットに自動的に割り当てられる値です(ORDER BYが評価される前に、 ever ORDER BY ROWNUM
を使用したり、WHERE ROWNUM < 10
を< ORDER BY
)。
ROW_NUMBER()サブクエリまたはパーティションによって返される結果セットに行番号を割り当てるための関数である。
回答で言及した他の違いとは別に、パフォーマンスも考慮する必要があります。ここには権限のないが非常に興味深いレポートがあり、さまざまなページネーションの方法を比較しています。その中で、 ROW_NUMBER()OVER()
と比較して ROWNUM
を使用しています:
rownum は、任意の選択に追加できる疑似列です。クエリ、返される行の番号(1から始まる)。それらは、最終結果セットの一部であると識別された時期に従って順序付けられます。 ( #ref )
row_number はアナリティクスの関数であり、 row_number()関数で指定された順序で、クエリによって返された行に番号を付けるために使用されます。
Rownumは1で始まり、条件評価の結果がtrueになった後に増加します。 したがって、rownum&gt; = 1はテーブル内のすべての行を返します
所属していません StackOverflow