Условие PostgreSQL FETCH

Читать первым в Telegram

Данная статья относится к циклу статей, посвященных PostgreSQL. В предыдущей статье мы говорили об условии PostgreSQL LIMIT. Теперь же мы углубимся в изучение условия FETCH, используемого для получения части строк, возвращаемых запросом.

Введение в условие PostgreSQL FETCH

Чтобы ограничить количество строк, возвращаемых запросом, зачастую прибегают к условию LIMIT, которое широко используется во многих системах управления реляционными базами данных, таких как MySQL, H2 и HSQLDB. Однако, условие LIMIT не является стандартом SQL.

Чтобы соответствовать стандарту SQL, PostgreSQL предоставляет условие FETCH для получения части строк, возвращаемых запросом. Обратите внимание, что условие FETCH было введено в SQL:2008.

Углубимся в синтаксис условия FETCH:

OFFSET start { ROW | ROWS }
FETCH { FIRST | NEXT } [ row_count ] { ROW | ROWS } ONLY

Рассмотрим запрос детальнее:

  • ROW и FIRST синонимичны с ROWS и NEXT соответственно.
  • Ключевое слово start — это целое число, которое должно быть больше или равно нуля. Изначально (при не выставленном значении условия OFFSET) оно равно нулю. В случае, если start больше, чем число строк в базовом наборе результатов, строки не возвращаются.
  • Ключевое слово row_count больше или равно единице. Изначально, значение row_count равно единице.

В связи с тем, что порядок строк, хранящихся в таблице, непредсказуем, вам необходимо использовать условие FETCH с условием ORDER BY, чтобы сделать набор результатов согласованным.

Обратите внимание, что в SQL:2008 условие OFFSET должно стоять перед условием FETCH. Однако, в PostgreSQL они могут располагаться в любом порядке.

Примеры использования PostgreSQL FETCH

Для наглядности будем использовать таблицу film из примера базы данных.

Следующий запрос возвращает первую строку film, отсортированную по названию:

SELECT
    film_id,
    title
FROM
    film
ORDER BY
    title
FETCH FIRST ROW ONLY;

Что эквивалентно следующему запросу:

SELECT
    film_id,
    title
FROM
    film
ORDER BY
    title
FETCH FIRST 1 ROW ONLY;

Запрос, возвращающий первые пять фильмов, отсортированных по названию:

SELECT
    film_id,
    title
FROM
    film
ORDER BY
    title
FETCH FIRST 5 ROW ONLY;

Данный запрос возвращает следующие пять фильмов, отсортированных по названию, после первых пяти фильмов, указанных выше:

SELECT
    film_id,
    title
FROM
    film
ORDER BY
    title
OFFSET 5 ROWS
FETCH FIRST 5 ROW ONLY;

Рассмотрев условие PostgreSQL FETCH, мы можем двигаться к следующему руководству, в котором вы узнаете, как использовать оператор IN в условии WHERE для проверки списка значений.

Источник: PostgreSQL Tutorial from Scratch

Поддержать проект

Социальные сети проекта:

Подпишись, чтобы ничего не пропустить!