Oracle 12c R1 (12.1) 以降では、行制限句があります。使い慣れたLIMIT
構文は使用しませんが、より多くのオプションを使用すると、より適切に機能します。ここで完全な構文を見つけることができます。(また、これが Oracle で内部的にどのように機能するかについては、こちらの回答を参照してください)。
元の質問に答えるために、クエリは次のとおりです。
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
(以前の Oracle バージョンについては、この質問の他の回答を参照してください)
例:
次の例は、リンクの腐敗を防ぐために、リンクされたページから引用されています。
設定
CREATE TABLE rownum_order_test (
val NUMBER
);
INSERT ALL
INTO rownum_order_test
SELECT level
FROM dual
CONNECT BY level <= 10;
COMMIT;
表には何がありますか?
SELECT val
FROM rownum_order_test
ORDER BY val;
VAL
----------
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
20 rows selected.
最初のN
行を取得する
SELECT val
FROM rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
VAL
----------
10
10
9
9
8
5 rows selected.
最初のN
行を取得します。行に同順位がある場合N
は、同順位のすべての行を取得します
SELECT val
FROM rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS WITH TIES;
VAL
----------
10
10
9
9
8
8
6 rows selected.
行の上位x
%
SELECT val
FROM rownum_order_test
ORDER BY val
FETCH FIRST 20 PERCENT ROWS ONLY;
VAL
----------
1
1
2
2
4 rows selected.
オフセットを使用すると、ページネーションに非常に役立ちます
SELECT val
FROM rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;
VAL
----------
3
3
4
4
4 rows selected.
オフセットとパーセンテージを組み合わせることができます
SELECT val
FROM rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 20 PERCENT ROWS ONLY;
VAL
----------
3
3
4
4
4 rows selected.