Резюме: в этой статье мы покажем, как применять команду SQL FETCH для ограничения строк выводимых в результате выполнения SQL запроса.
Вводная информация по предложению SQL FETCH
Ограничить количество строк, возвращаемых запросом SELECT можно если применить команду LIMIT. Операнд LIMIT поддерживается в большинстве систем распределенного управления базами данных. В том числе MySQL, H2 и HSQLDB. Тем не менее предложение LIMIT отсутствует в стандарте SQL.
В SQL:2008 было введено предложение OFFSET FETCH, которое имеет схожую функцию с предложением LIMIT.
OFFSET FETCH позволяет пропустить N начальных строк в полученном результате, прежде чем начать возвращать какие-либо строчки.
Рассмотрим синтаксис предложения SQL FETCH ниже:
Текущий синтаксис применяет следующие правила:
- ROW и ROWS, FIRST и NEXT являются синонимами. Поэтому их можно применять как взаимозаменяемые.
- Offset_rows — это целое число. Оно должно быть либо нулевым, либо положительным. Если offset_rows больше общего количества записей в наборе результатов, ни одна строка не будет возвращена.
- fetch_rows — это также целое число, определяющее количество возвращаемых строк. Значение fetch_rows всегда должно быть либо равно, либо больше 1.
Так как все строки хранятся в таблице в неопределенном разрозненном порядке, для получения последовательного вывода всегда рекомендуется применять операнд FETCH вместе с операндом ORDER BY.
Многие системы баз данных поддерживают предложение OFFSET FETCH, включая Oracle Database 12c+, PostgreSQL 10+ и Microsoft SQL Server 2012+. Однако каждая система баз данных реализует предложение OFFSET FETCH по-разному, с некоторыми отличиями.
Предложение OFFSET FETCH обычно используется в клиентских или веб-приложениях, где требуется постраничная сортировка. Например, если каждая страница содержит десять строк, то для получения строк второй страницы можно пропустить первые десять строк и вернуть следующие десять строк.
Примеры SQL FETCH
Чтобы продемонстрировать наглядно, будем использовать знакомую читателям нашего сайта таблицу employees в качестве примера.
Следующий оператор возвращает первого сотрудника, у которого самая высокая зарплата:
В данном случае, во-первых, предложение ORDER BY сортирует сотрудников по зарплате от высокой к низкой. Предложение OFFSET пропускает нулевые строки, а предложение FETCH возвращает первую строку.
Следующий оператор сортирует сотрудников по зарплате, пропускает первые пять сотрудников с самой высокой зарплатой и извлекает следующие пять.
Сводка
Применяйте команду SQL FETCH, для того чтобы ограничить количество строк итогового результата запроса.
Предложение SQL FETCH пропускает N строк в наборе результатов, прежде чем начать возвращать какие-либо строки.
Предыдущая статья: SQL LIMIT
Следующая статья: SQL WHERE