Зарегистрируйтесь, чтобы продолжить обучение

Ограничение выборки SQL

LIMIT

Таблицы в веб-проектах содержат огромное количество данных, поэтому их никогда не показывают на страницах сразу все. Обычно выводится лишь небольшая часть — например, 10 строк.

Чтобы ограничить выборку, используется LIMIT. В этом уроке разберем, как работать с таким запросом.

Как ограничивать выборку таблицы

Представим, что нам нужно извлечь 10 записей. Для этого выполним такой запрос:

SELECT
    id,
    username,
    email
FROM users LIMIT 10;

id username email
1 Duncan3 Trevion53@yahoo.com
2 Michaela11 Baylee52@yahoo.com
3 Margarete_Hegmann6 Casimer_Cronin@yahoo.com
4 Kayley.Turcotte98 Angelita.Altenwerth96@hotmail.com>
5 Curtis_Baumbach Hobart91@hotmail.com
6 Leola.Ward Kenya_Legros17@yahoo.com
7 Stan_Sauer4 Kiera73@hotmail.com
8 Bernie.Crooks Baby_Wintheiser@hotmail.com
9 Woodrow14 Wyatt9@hotmail.com
10 Berta.Trantow Dorian31@gmail.com

View on DB Fiddle

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

Оператор LIMIT без сортировки практически никогда не используется. Поэтому нужно задать сортировку таким образом:

SELECT
    id,
    username,
    email
FROM users ORDER BY id LIMIT 10;
id username email
1 Duncan3 Trevion53@yahoo.com
2 Michaela11 Baylee52@yahoo.com
3 Margarete_Hegmann6 Casimer_Cronin@yahoo.com
4 Kayley.Turcotte98 Angelita.Altenwerth96@hotmail.com>
5 Curtis_Baumbach Hobart91@hotmail.com
6 Leola.Ward Kenya_Legros17@yahoo.com
7 Stan_Sauer4 Kiera73@hotmail.com
8 Bernie.Crooks Baby_Wintheiser@hotmail.com
9 Woodrow14 Wyatt9@hotmail.com
10 Berta.Trantow Dorian31@gmail.com

View on DB Fiddle

Как показать все данные по выборкам

Допустим, пользователь хочет посмотреть следующие 10 записей. Это реализуется через пагинацию — механизм, который позволяет перемещаться по страницам.

Чтобы реализовать пагинацию, одного LIMIT недостаточно. Еще понадобится смещение OFFSET:

SELECT
    id,
    username,
    email
FROM users ORDER BY id LIMIT 10 OFFSET 10;
id username email
--- --------------- -------------------------------
11 Winston.Mann24 Kendall_Aufderhar@gmail.com>
12 Abelardo58 Cole.Paucek@yahoo.com
13 Tina_Huels Tyree89@yahoo.com
14 Frank_Murazik97 Marlon69@yahoo.com
15 Gia67 Anika_OReilly58@gmail.com
16 Davonte78 Dewayne_Lueilwitz69@hotmail.com>
17 Mercedes14 Filomena.Hodkiewicz@yahoo.com>
18 Saul25 Rashawn.Altenwerth@gmail.com>
19 Gregory9 Dallin_Lebsack88@hotmail.com>
20 Kenyatta70 Marvin_Hettinger24@yahoo.com>

View on DB Fiddle

Этот запрос:

  • Отсортирует все записи.
  • Пропустит первые 10 записей за счет части OFFSET 10.
  • Возьмет следующие 10 записей.

Если менять OFFSET, можно обойти все данные в таблице:

-- Выбрать записи с 21 по 30
SELECT
    id,
    username,
    email
FROM users ORDER BY id LIMIT 10 OFFSET 20;

-- Выбрать записи с 31 по 40
SELECT
    id,
    username,
    email
FROM users ORDER BY id LIMIT 10 OFFSET 30;

View on DB Fiddle

Выводы

В этом уроке мы научились ограничивать выборку с помощью оператора LIMIT. Это помогает работать с таблицами, в которых слишком много данных.

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


Дополнительные материалы

  1. LIMIT

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff