SQL Server OFFSET FETCH

В этом руководстве вы узнаете, как использовать предложения 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:

SQL Server СМЕЩЕНИЕ ВЫБОРКИ

Важно отметить, что вы должны использовать предложения 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;

Выход:

SQL Server OFFSET FETCH набор результатов

Чтобы пропустить первые 10 товаров и вернуть остальные, используйте предложение OFFSET, как показано в следующем операторе:

SELECT
    product_name,
    list_price
FROM
    production.products
ORDER BY
    list_price,
    product_name 
OFFSET 10 ROWS;

Выход:

Пример SQL Server OFFSET FETCH

Чтобы пропустить первые 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;

Выход:

SQL Server OFFSET FETCH пропустить 10 строк выбрать следующие 10 строк пример

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;

Выход:

SQL Server OFFSET FETCH топ-10 самых дорогих продуктов

В этом примере:

  • Во-первых, предложение ORDER BY сортирует продукты по их прейскурантным ценам в порядке убывания.
  • Затем предложение OFFSET пропускает ноль строк, а предложение FETCH извлекает первые 10 продуктов из списка.

Краткое содержание

  • Используйте предложения SQL Server OFFSET FETCH для ограничения количества строк, возвращаемых запросом.
Мирослав С.

Автор статей, ИБ-специалист