Резюме: в этой статье вы научитесь применять операнд SQL LIMIT для ограничения количества строк, возвращаемых запросом.
Введение в SQL LIMIT
Чтобы ограничить список строк, отдаваемых командой select в запросе, используются выражения LIMIT и OFFSET.
Пример ниже демонстрирует синтаксис выражений LIMIT и OFFSET:
В данном синтаксисе:
- LIMIT row_count задает непосредственно количество строк (row_count), которые будут возвращены по запросу.
- Предложение OFFSET offset пропускает смещенные строки, прежде чем начать возвращать строки.
Оговорка OFFSET является необязательной. Если его опустить, запрос вернет строки row_count, начиная с первой строки, возвращенной предложением SELECT.
При использовании предложение LIMIT, важно применять ORDER BY, чтобы обеспечить упорядоченность записей в конечном наборе результатов.
Не каждая система баз данных поддерживают предложение LIMIT. Оно доступно только в таких СУБД как MySQL, PostgreSQL, SQLite, Sybase SQL Anywhere и HSQLDB.
Если вы работаете с Microsoft SQL Server, то вместо него следует применять операнд SELECT TOP.
Например: select top 100 * from employees.
Примеры применения SQL LIMIT
Чтобы показать использование LIMIT и OFFSET на конкретных примерах, мы возьмем знакомую нашим читателям таблицу employees.
Следующий оператор возвращает все строки таблицы employees, с сортировкой по колонке first_name.
Следующий пример применяет операнд LIMIT для возврата первых 5 строк в результирующем наборе команды SELECT:
В примере ниже можно увидеть как используются одновременно оба предложения LIMIT и OFFSET для возврата пяти строк, начиная с 4-й строки:
В MySQL разрешено применять более краткую форму предложений LIMIT & OFFSET:
Применение лимитирования для получения N верхних строк с максимальным или минимальным значением
Применяйте LIMIT, чтобы получить N верхних строк с наибольшим или наименьшим значением. Например, следующий оператор получает пять сотрудников с самыми высокими зарплатами.
Сначала предложение ORDER BY отсортирует сотрудников по зарплате от большей к меньшей, а затем предложение LIMIT ограничивает пятью записями, количество отображаемых результатов из запроса.
Чтобы получить пять сотрудников с самой низкой зарплатой, нужно отсортировать сотрудников по зарплате в порядке возрастания.
Получение строк с N-м максимальным значением
Предположим, вам нужно получить сотрудников, у которых вторая по сумме зарплата в компании. Пробуйте применить предложение LIMIT OFFSET вот так.
Предложение ORDER BY сортирует сотрудников по зарплате в порядке убывания. А предложение LIMIT 1 OFFSET 1 получает вторую строчку из набора результатов.
Этот запрос работает в предположении, что у каждого сотрудника своя зарплата. Он завершится неудачей, если есть два сотрудника, у которых одинаковая наибольшая зарплата.
Кроме того, если у двух или более сотрудников одинаковая вторая наибольшая зарплата, запрос просто вернет первую.
Чтобы решить эту проблему, можно сначала получить вторую наибольшую зарплату с помощью следующего оператора.
И передать результат в другой запрос:
Если вы знаете подзапросы, вы можете объединить оба запроса в один запрос следующим образом:
Сводка
Пользуйтесь предложением LIMIT & OFFSET, чтобы отсечь заданное количество строк, которые возвращает запрос.
LIMIT & OFFSET не является стандартом SQL.
Предыдущая статья: SELECT DISTINCT в SQL
Следующая статья: OFFSET FETCH