OracleでLimit句が使えなかった。
- MYSQL では使えててさ、わたし、Limit句大好きだったんだ…。
- Oracle初心者は使えると思って叩いた。
select ID from DUMMY limit 10;
[結果]
行1でエラーが発生しました。:
SQLコマンドが正しく終了されていません。
は?エラーとか聞いてないし。Oracleでは LIMIT句ってない んですね。
どうしても使いたかった。
だって、データ量が多すぎるけど中身なんだか知らなんだ…
ROWNUM を使用するとそれっぽいことができるらしい…?
ROWNUM ってなに?
ROWNUM とは?
- ROWNUM 疑似列
- WHERE 条件に入れることでレコード数を制限できる。
-
ORDER BY と WHERE に併用すると WHERE 条件が先に評価される。
←(うん??うううん?ソートして ROWNUM は別の方法になる…?)
実際に使ってみた。
select ID from DUMMY WHERE ROWNUM <= 10;
[結果]
ID
--------------
1
2
~ 略(10件データでてきた!!やった~)
できた!!
ソートしてID大きい順に出したい。出したい。
order by を使用するときは 副問合せ をすると良いらしい。
SELECT ID FROM
( SELECT ID FROM DUMMY ORDER BY ID DESC )
WHERE ROWNUM <= 10;
[結果]
ID
--------------
99672
99671
99670
99669
99668
99667
99666
99665
99664
99663
できた!
まとめ
- Oracleでlimitみたいなことするには、ROWNUM 疑似列 を使用する。
- ソートするときは副問合せの中でソートする。
- limit 句のことは忘れる。そんなやつはじめから、いなかった。