OFFSET — пропускаем строки, постраничный вывод
Зачем это нужно
LIMIT берёт первые N строк. А что если нужна не первая страница каталога,
а вторая или третья? OFFSET говорит базе: «пропусти M строк, потом возьми N».
Аналогия с жизнью
Листаете каталог IKEA: страница 1 — товары 1–10, страница 2 — товары 11–20,
страница 3 — товары 21–30. OFFSET — это «перелистнуть» нужное количество страниц.
Синтаксис
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) × размер_страницы
Разбор примера
-- Вторая страница каталога (строки 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).
Ответ
SELECT name, price
FROM products
ORDER BY name ASC
LIMIT 5 OFFSET 5;
Страница 2: пропускаем первые 5 (OFFSET 5), берём следующие 5 (LIMIT 5).
Прочитайте урок до конца — прогресс засчитается автоматически