俺#

新潟市でIT業を営むおっさんのブログ。

Oracleってなんて使いにくいんだろう...(その1)

PostgreSQLMySQL*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との互換性のために実装されたらしいけど、それはそれで非常に有難い話だよな。