ユーザ用ツール

サイト用ツール


ja:oracle:rownum擬似列

Oracle-ROWNUM擬似列

PostgreSQLやMySQLなどを使用してDBを構築したシステムの場合、クエリの演算結果を部分的に取得したい時はOFFSETLIMITのキーワードを使用してクエリを発行するが、OracleにはこのOFFSETLIMITは存在しない。
同様の処理を行いたい場合は、ROWNUM擬似列を使用する。
「問合せによって戻される各行について、表や結合処理された行の集合からOracle が行を選択する順序を示す番号を戻します(Oracle9i SQLリファレンス)」

使用例

テーブル「USERS」のデータを1行目から10行目までを取得する

 SELECT ID,NAME FROM USERS WHERE ROWNUM>=1 AND ROWNUM<=10;

注意点

  • ROWNUM擬似列はクエリの最終的な結果セットに対する行番号ではない。
  • ROWNUM擬似列はINSERTされた順序ではない。
  • 発行するクエリにORDER BYによるソートを指示した場合、ROWNUMによる条件を処理した結果に対してORDER BYのソートを行う為、ソート結果の行数を制御するわけではない
    この点をクリアする為には、仮想表などを使用する事。

ソートされたデータの出力行数を制御する

仮想表を使用して、ソート済みデータを作成。その仮想表に対してROWNUMを使う。

SELECT
    ID, NAME
FROM
    (SELECT
         ID, NAME
     FROM
         USERS
     ORDER BY
         ID)
WHERE
    ROWNUM>=1
  AND
    ROWNUM<=10

参考(オラクル通信)

追記

PostgreSQLとMySQLの場合、OFFSETとLIMITを使用する際は、ORDER BYでソートする事で順序が保障される。
またOracleと異なり、仮想表を作ったりする事も無くてよい。

ja/oracle/rownum擬似列.txt · 最終更新: 2014/07/15 07:58 by makoto