簡體   English   中英

在Oracle數據庫中,ROWNUM和ROW_NUMBER之間有什么區別?

[英]In an Oracle database, what is the difference between ROWNUM and ROW_NUMBER?

ROWNUMROW_NUMBER什么區別?

ROWNUM是一個“偽列”,它為查詢返回的每一行分配一個數字:

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

除了答案中提到的其他差異外,您還應該考慮績效。 這里有一個非權威但非常有趣的報告,比較了各種分頁方式,其中使用ROWNUMROW_NUMBER() OVER()

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

從一個小讀數,ROWNUM是Oracle自動分配到一個行集合的值(ORDER之前通過被評估,因此永遠不要ORDER BY ROWNUM或使用WHERE ROWNUM < 10ORDER BY )。

ROW_NUMBER()似乎是一個函數,用於將行號分配給子查詢或分區返回的結果集。

rownum是一個偽列,可以添加到任何選擇查詢中,對返回的行進行編號(從1開始)。 它們根據何時被識別為最終結果集的一部分進行排序。 #ref

row_number是一個解析函數,可用於按行row_number()函數強制要求的順序對查詢返回的行進行編號。

在條件評估結果為真后,Rownum以1 ..增加開始。 因此rownum> = 1返回表中的所有行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM