SQLLab
Теория· 7 мин· 10 XP

OFFSET — пропускаем строки, постраничный вывод

Зачем это нужно

LIMIT берёт первые N строк. А что если нужна не первая страница каталога, а вторая или третья? OFFSET говорит базе: «пропусти M строк, потом возьми N».

Аналогия с жизнью

Листаете каталог IKEA: страница 1 — товары 1–10, страница 2 — товары 11–20, страница 3 — товары 21–30. OFFSET — это «перелистнуть» нужное количество страниц.

Синтаксис

sql
SELECT колонки
FROM таблица
ORDER BY колонка
LIMIT N OFFSET M;

Сначала пропускаем M строк, потом берём N из оставшихся.

Расчёт для пагинации

Если на странице 10 товаров:

код
Страница 1: LIMIT 10 OFFSET 0   (строки 1–10)
Страница 2: LIMIT 10 OFFSET 10  (строки 11–20)
Страница 3: LIMIT 10 OFFSET 20  (строки 21–30)

Формула: OFFSET = (номер_страницы - 1) × размер_страницы

Разбор примера

sql
-- Вторая страница каталога (строки 11–20, по цене)
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 10 OFFSET 10;

OFFSET без ORDER BY — та же проблема

Как и с LIMIT, OFFSET без ORDER BY даёт непредсказуемый результат. Всегда явно сортируйте перед пагинацией.

Частые ошибки

OFFSET считают от 1 — OFFSET 1 пропускает первую строку и начинает со второй, а не с первой. Нумерация в OFFSET начинается с нуля.

OFFSET на больших таблицах — OFFSET 10000 заставляет БД «пролистать» 10000 строк перед выбором. На миллионах строк это медленно. В реальных приложениях используют «keyset pagination», но для учёбы OFFSET — то что нужно.

Запомни

LIMIT N OFFSET M — пропустить M строк, взять следующие N. Страница K при размере P: LIMIT P OFFSET (K-1)*P.


Мини-практика

Напиши запрос: выведи name, price для второй страницы каталога (по 5 товаров на странице, сортировка по name ASC).

Ответ
sql
SELECT name, price
FROM products
ORDER BY name ASC
LIMIT 5 OFFSET 5;

Страница 2: пропускаем первые 5 (OFFSET 5), берём следующие 5 (LIMIT 5).

Прочитайте урок до конца — прогресс засчитается автоматически