В этом руководстве вы узнаете, как использовать предложения SQL Server OFFSET FETCH для ограничения количества строк, возвращаемых запросом.
Введение в SQL Server OFFSET FETCH
Предложения OFFSET и FETCH являются опциями предложения ORDER BY. Они позволяют ограничить количество строк, возвращаемых запросом.
Вот синтаксис использования предложений OFFSET и FETCH:
ORDER BY column_list [ASC |DESC] OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY
В этом синтаксисе:
- Предложение OFFSET указывает количество строк, которые необходимо пропустить перед началом возврата строк из запроса. offset_row_count может быть константой, переменной или параметром, который больше или равен нулю.
- Предложение FETCH определяет количество строк, возвращаемых после обработки предложения OFFSET. offset_row_count может быть константой, переменной или скаляром, большим или равным единице.
- Предложение OFFSET является обязательным, а предложение FETCH — необязательным. Кроме того, FIRST и NEXT являются синонимами и могут использоваться взаимозаменяемо. Аналогично, вы можете использовать ROW и ROWS взаимозаменяемо.
На следующем рисунке показаны предложения OFFSET и FETCH:
Важно отметить, что вы должны использовать предложения OFFSET и FETCH с предложением ORDER BY. В противном случае вы столкнетесь с ошибкой.
Предложения OFFSET и FETCH более предпочтительны для реализации решений по разбиению запросов по сравнению с предложением TOP.
Предложения OFFSET и FETCH доступны с версии SQL Server 2012(11.x) и более поздних версий, а также в базе данных SQL Azure.
Примеры предложений OFFSET и FETCH в SQL Server
Для демонстрации мы будем использовать таблицу продуктов из образца базы данных.
1) Использование примера SQL Server OFFSET FETCH
Следующий запрос использует оператор SELECT для извлечения всех строк из таблицы товаров и сортирует их по ценам и наименованиям:
SELECT product_name, list_price FROM production.products ORDER BY list_price, product_name;
Выход:
Чтобы пропустить первые 10 товаров и вернуть остальные, используйте предложение OFFSET, как показано в следующем операторе:
SELECT product_name, list_price FROM production.products ORDER BY list_price, product_name OFFSET 10 ROWS;
Выход:
Чтобы пропустить первые 10 продуктов и выбрать следующие 10 продуктов, используйте предложения OFFSET и FETCH следующим образом:
SELECT product_name, list_price FROM production.products ORDER BY list_price, product_name OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
Выход:
2) Использование предложения OFFSET FETCH для получения первых N строк
В следующем примере предложение OFFSET FETCH используется для извлечения 10 самых дорогих продуктов из таблицы продуктов:
SELECT product_name, list_price FROM production.products ORDER BY list_price DESC, product_name OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY;
Выход:
В этом примере:
- Во-первых, предложение ORDER BY сортирует продукты по их прейскурантным ценам в порядке убывания.
- Затем предложение OFFSET пропускает ноль строк, а предложение FETCH извлекает первые 10 продуктов из списка.
Краткое содержание
- Используйте предложения SQL Server OFFSET FETCH для ограничения количества строк, возвращаемых запросом.