JavaDB(Derby)のLIMITもしくはROWNUM
条件に合致するレコードの先頭5行だけ表示させたい場合、
# MySQL,PostgreSQLなど SELECT * FROM TABLE1 LIMIT 5 # Oracle SELECT * FROM TABLE1 WHERE ROWNUM <= 5
のようにします。
では、JavaDB(Apache Derby)の場合はどう書くのでしょうか。
以前Apacheプロジェクトに昇格した直後くらいのとき(たしか10.2くらい)に調べた時には英語の記事を探しても見つかりませんでした。
あらためて調べてみると、10.4でROW_NUMBER関数が、10.5でOFFSET&FETCH句がサポートされたようです。ちなみに手元にある最新のJRE1.6.0_18に付属しているJavaDBは10.5.3.0です。
ROW_NUMBER関数を使う場合は、
SELECT * FROM ( SELECT ROW_NUMBER() OVER() AS ROWNUM, TABLE1.* FROM TABLE1) AS T WHERE ROWNUM <= 5
と書きます。これはちょっと使い勝手が悪いし、パフォーマンスもよろしくないようです。
FETCH句を使う場合は、
SELECT * FROM TABLE1 FETCH FIRST 5 ROWS ONLY
と大変分かり易くなりました。「最初の5行だけ取ってくる」ですね。