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