SQL LIMIT

SQL LIMIT

Резюме: в этой статье вы научитесь применять операнд SQL LIMIT для ограничения количества строк, возвращаемых запросом.

Введение в SQL LIMIT

Чтобы ограничить список строк, отдаваемых командой select в запросе, используются выражения LIMIT и OFFSET.

Пример ниже демонстрирует синтаксис выражений LIMIT и OFFSET:

select limit

В данном синтаксисе:

  1. LIMIT row_count задает непосредственно количество строк (row_count), которые будут возвращены по запросу.
  2. Предложение 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 table

Следующий оператор возвращает все строки таблицы employees, с сортировкой по колонке first_name.

select order by

result select order by

Следующий пример применяет операнд LIMIT для возврата первых 5 строк в результирующем наборе команды SELECT:

example uses the LIMIT clause to return the first 5 rows

result example uses the LIMIT clause to return the first 5 rows

В примере ниже можно увидеть как используются одновременно оба предложения LIMIT и OFFSET для возврата пяти строк, начиная с 4-й строки:

example uses both LIMIT & OFFSET clauses to return five rows starting from the 4th row

result example uses both LIMIT & OFFSET clauses to return five rows starting from the 4th row

В MySQL разрешено применять более краткую форму предложений LIMIT & OFFSET:

MySQL LIMIT and OFFSET

Применение лимитирования для получения N верхних строк с максимальным или минимальным значением

Применяйте LIMIT, чтобы получить N верхних строк с наибольшим или наименьшим значением. Например, следующий оператор получает пять сотрудников с самыми высокими зарплатами.

SQL LIMIT

SQL LIMIT to get the top N rows with the highest or lowest value

result SQL LIMIT to get the top N rows with the highest or lowest value

Сначала предложение ORDER BY отсортирует сотрудников по зарплате от большей к меньшей, а затем предложение LIMIT ограничивает пятью записями, количество отображаемых результатов из запроса.

Чтобы получить пять сотрудников с самой низкой зарплатой, нужно отсортировать сотрудников по зарплате в порядке возрастания.

2 result SQL LIMIT to get the top N rows with the highest or lowest value

Получение строк с N-м максимальным значением

Предположим, вам нужно получить сотрудников, у которых вторая по сумме зарплата в компании. Пробуйте применить предложение LIMIT OFFSET вот так.

Getting the rows with the Nth highest value

Предложение ORDER BY сортирует сотрудников по зарплате в порядке убывания. А предложение LIMIT 1 OFFSET 1 получает вторую строчку из набора результатов.

Этот запрос работает в предположении, что у каждого сотрудника своя зарплата. Он завершится неудачей, если есть два сотрудника, у которых одинаковая наибольшая зарплата.

Кроме того, если у двух или более сотрудников одинаковая вторая наибольшая зарплата, запрос просто вернет первую.

Чтобы решить эту проблему, можно сначала получить вторую наибольшую зарплату с помощью следующего оператора.

get the second highest salary first using the following statement

И передать результат в другой запрос:

result to another query

Если вы знаете подзапросы, вы можете объединить оба запроса в один запрос следующим образом:

subquery

Сводка

Пользуйтесь предложением LIMIT & OFFSET, чтобы отсечь заданное количество строк, которые возвращает запрос.

LIMIT & OFFSET не является стандартом SQL.

Предыдущая статья: SELECT DISTINCT в SQL

Следующая статья: OFFSET FETCH

SQL LIMIT

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: