すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ROWNUM 擬似列

最終更新日:Mar 29, 2026

ROWNUM は、クエリから行が取得される順序に基づいて、各行に一意かつ増分の整数を割り当てる擬似列です。最初に取得された行には ROWNUM 1 が、2 番目の行には ROWNUM 2 が割り当てられ、以降も同様に続きます。

仕組み

ROWNUM の値は、ソートより前に割り当てられます。ORDER BY 句を含むクエリでは、結果セットが指定された順序で返されますが、ROWNUM の値はソート後の順序ではなく、元の取得順序を反映します。

クエリが返す行数の制限

WHERE 句で ROWNUM を使用して、クエリが返す行数を上限付きで制限できます。

SELECT empno, ename, job FROM emp WHERE ROWNUM < 5;

出力結果:

 empno | ename |   job
-------+-------+----------
  7369 | SMITH | CLERK
  7499 | ALLEN | SALESMAN
  7521 | WARD  | SALESMAN
  7566 | JONES | MANAGER
(4 rows)

ROWNUM と ORDER BY の併用

ROWNUM はソート前に割り当てられるため、同じクエリレベルで ROWNUM と ORDER BY を併用すると、ROWNUM の値はソートされていない状態になります。

SELECT ROWNUM, empno, ename, job FROM emp WHERE ROWNUM < 5 ORDER BY ename;

出力結果:

 rownum | empno | ename |   job
--------+-------+-------+----------
      2 |  7499 | ALLEN | SALESMAN
      4 |  7566 | JONES | MANAGER
      1 |  7369 | SMITH | CLERK
      3 |  7521 | WARD  | SALESMAN
(4 rows)

行は ename でソートされていますが、ROWNUM の値(2、4、1、3)は元の取得順序を反映しています。

ROWNUM を使用した連番の割り当て

UPDATE 文で ROWNUM を使用して、既存の行に連番を割り当てることができます。以下の例では、seqno 列を jobhist テーブルに追加し、その列に値を設定します。

ALTER TABLE jobhist ADD seqno NUMBER(3);
UPDATE jobhist SET seqno = ROWNUM;

結果を確認します。

SELECT seqno, empno, TO_CHAR(startdate,'DD-MON-YY') AS start, job FROM jobhist;

出力結果:

 seqno | empno |   start   |    job
-------+-------+-----------+-----------
     1 |  7369 | 17-DEC-80 | CLERK
     2 |  7499 | 20-FEB-81 | SALESMAN
     3 |  7521 | 22-FEB-81 | SALESMAN
     4 |  7566 | 02-APR-81 | MANAGER
     5 |  7654 | 28-SEP-81 | SALESMAN
     6 |  7698 | 01-MAY-81 | MANAGER
     7 |  7782 | 09-JUN-81 | MANAGER
     8 |  7788 | 19-APR-87 | CLERK
     9 |  7788 | 13-APR-88 | CLERK
    10 |  7788 | 05-MAY-90 | ANALYST
    11 |  7839 | 17-NOV-81 | PRESIDENT
    12 |  7844 | 08-SEP-81 | SALESMAN
    13 |  7876 | 23-MAY-87 | CLERK
    14 |  7900 | 03-DEC-81 | CLERK
    15 |  7900 | 15-JAN-83 | CLERK
    16 |  7902 | 03-DEC-81 | ANALYST
    17 |  7934 | 23-JAN-82 | CLERK
(17 rows)