PostgreSQLやMySQL*1にあるLIMIT/OFFSETが存在しない。
・LIMIT/OFFSETがある場合
SELECT * FROM テーブル名 WHERE 条件 ORDER BY 並び順 LIMIT 5 OFFSET 10
Oracleでは「ROWNUM」というモノがSELECTした結果に1で始まる通し番号を振ってくれるので、それを使って以下の様に書く。
・ORDER BYを併用しない場合
SELECT * FROM (SELECT * FROM テーブル名) WHERE ROWNUM BETWEEN 11 AND 15
・ORDER BYを併用する場合
SELECT B.* FROM (
SELECT ROWNUM AS RN, A.* FROM (
SELECT * FROM テーブル名 WHERE 条件 ORDER BY 並び順
)A
)B WHERE RN BETWEEN 11 AND 15
ひーん、メンドウくさいよ〜。こんなの良くある処理でしょ。何故SELECTを3回も叫ばないと実現できんのだ...orz
*1:MySQLではPostgreSQLとの互換性のために実装されたらしいけど、それはそれで非常に有難い話だよな。