====== Oracle-ROWNUM擬似列 ======
PostgreSQLやMySQLなどを使用してDBを構築したシステムの場合、クエリの演算結果を部分的に取得したい時は**OFFSET**や**LIMIT**のキーワードを使用してクエリを発行するが、Oracleにはこの**OFFSET**や**LIMIT**は存在しない。\\
同様の処理を行いたい場合は、**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
[[http://www.oracle.co.jp/2shin/2002/ora55/18_19.html|参考(オラクル通信)]]
==== 追記 ====
PostgreSQLとMySQLの場合、OFFSETとLIMITを使用する際は、ORDER BYでソートする事で順序が保障される。\\
またOracleと異なり、仮想表を作ったりする事も無くてよい。