Начиная с Oracle 12c R1 (12.1), равно a ограничивающей строки строке . Он не использует знакомый синтаксис LIMIT
, но он может делать работу лучше с большим количеством опций. Вы можете найти полный синтаксис здесь .
Чтобы ответить на оригинальный вопрос, вот запрос:
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
th строка имеет связи, получить все связанные строки
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.