Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Ограничение выборки Основы 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

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 21 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 21 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 21 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 21 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 21 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 21 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»