УРОК 5 / 27· ≈ 30 мин

LIMIT и DISTINCT

Ограничиваем и убираем повторы

LIMIT — сколько строк вернуть

Иногда не нужны все строки — например, нужен «топ-3 самых быстрых самолёта» или просто первые несколько записей, чтобы взглянуть на данные. Для этого есть LIMIT:

SELECT airplane_code, model, speed
FROM airplanes
ORDER BY speed DESC, airplane_code
LIMIT 3;            -- только первые 3 строки

LIMIT всегда применяется после сортировки, поэтому «топ-3» = сначала ORDER BY ... DESC, потом LIMIT 3.

Можно пропустить несколько первых строк через OFFSET — это основа «постраничного» вывода:

SELECT airplane_code, model
FROM airplanes
ORDER BY airplane_code
OFFSET 5 LIMIT 3;   -- пропустить 5, показать следующие 3
📌 В PostgreSQL пишут LIMIT n, в стандарте SQL то же самое — FETCH FIRST n ROWS ONLY. Мы будем пользоваться LIMIT — он короче и понятнее.

DISTINCT — только уникальные строки

Если в столбце значения повторяются, а нужен список уникальных — добавьте DISTINCT сразу после SELECT:

SELECT DISTINCT fare_conditions
FROM seats;

В таблице seats тысячи строк (по месту в каждом самолёте), но классов обслуживания всего несколько. DISTINCT схлопнет повторы и вернёт только разные значения: Business, Comfort, Economy.

DISTINCT смотрит на все выбранные столбцы вместе: SELECT DISTINCT city, country вернёт уникальные пары «город + страна».

Типичные ошибки

  • LIMIT без ORDER BY. LIMIT 3 просто отрезает первые три строки результата. Чтобы это были «три самых быстрых», строки сначала нужно отсортировать.
  • Одинаковые значения на границе. Если у третьего и четвёртого самолёта одинаковая скорость, какой из них попадёт в «топ-3» — дело случая. Добавляйте в сортировку уникальный столбец: ORDER BY speed DESC, airplane_code.
  • DISTINCT убирает повторы целых строк. SELECT DISTINCT airplane_code, fare_conditions оставит каждую пару «самолёт + класс» один раз, а не каждый самолёт.
  • Большой OFFSET медленный. Чтобы пропустить 100 000 строк, базе всё равно нужно их перебрать. Для учебных задач это не важно, но в реальных системах для дальних страниц используют другие приёмы.
💡 Итог трёх уроков о SELECT: вы умеете выбирать столбцы (SELECT, *, AS), сортировать (ORDER BY ... ASC/DESC), ограничивать (LIMIT/OFFSET) и убирать повторы (DISTINCT). Это уже полноценные запросы!

Практика

8
  1. Тест 1 — Почему «SELECT model FROM airplanes LIMIT 3;» не годится для «топ-3 самых быстрых»?
  2. Тест 2 — Что считается повтором в «SELECT DISTINCT airplane_code, fare_conditions FROM seats»?
  3. Задача 1 — Топ-3 самых быстрых самолёта
  4. Задача 2 — Какие бывают классы обслуживания
  5. Задача 3 — Первые 10 стран
  6. Задача 4 — Постраничный вывод: OFFSET
  7. Задача 5 — Вторая страница аэропортов
  8. Задача 6 — Последние страны по алфавиту

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

Зарегистрироваться и решитьВойти

Потренируйтесь в тренажёре

6

Задачи на ту же тему, но на другой базе — продажи магазина электроники. Хороший способ проверить, что тема понятна, а не просто запомнилась на примерах урока.

Все задачи тренажёра →
ORDER BY: сортируем результатСледующий урок: WHERE и условия: сравнение, AND, OR, NOT