Первые строки с LIMIT
Часто нужны не все строки, а только несколько первых: три самых новых заказа, пять самых дешёвых игр. LIMIT в самом конце запроса говорит, сколько строк показать не больше:
SELECT id, ordered_at
FROM orders
ORDER BY ordered_at DESC
LIMIT 3;| id | ordered_at |
|---|---|
| 30 | 2025-12-22 |
| 29 | 2025-12-12 |
| 28 | 2025-11-28 |
ORDER BY сортирует строки, а LIMIT оставляет первые три. Вместе они отвечают на вопросы о «первых N»: самые дорогие, самые новые, с лучшими оценками. Если строк меньше, чем указано в лимите, вы просто получите их все.
LIMIT без ORDER BY — это лотерея. SELECT title FROM games LIMIT 3; покажет три игры, но какие именно, не гарантировано: без ORDER BY строки идут в любом порядке, как вы уже знаете. Это нормально, если вы просто хотите бегло взглянуть на большую таблицу, но не тогда, когда вопрос о первом, лучшем или последнем.
Остерегайтесь одинаковых значений на границе. Три самые дешёвые игры? Cube Logic за $5, Word Quest за $10, а потом три игры по $15. При ORDER BY price LIMIT 3 то, какая из них получит третье место, решает база данных. Это определяет второй столбец сортировки:
SELECT title, price
FROM games
ORDER BY price, title
LIMIT 3;| title | price |
|---|---|
| Cube Logic | 5 |
| Word Quest | 10 |
| Bakery Story | 15 |
LIMIT работает в SQLite, PostgreSQL и MySQL. В некоторых других базах данных это пишется иначе, например SELECT TOP 3 … в SQL Server или FETCH FIRST 3 ROWS ONLY в конце запроса в Oracle, но идея та же.
Типичная ошибка — LIMIT перед ORDER BY. LIMIT всегда последняя часть запроса, поэтому … LIMIT 3 ORDER BY price; заканчивается ошибкой near "ORDER": syntax error.
Задание
- 1
Покажите название и цену трёх самых дорогих игр, самая дорогая — первой. В результате будут только эти три строки:
title price Knight's Oath 60 Goal Rush 50 Ice Hockey Pro 45 - 2
Ниже покажите название и возрастной рейтинг (
age_rating) трёх игр для самых старших игроков: сначала самый высокий рейтинг, а игры с одинаковым рейтингом — по алфавиту:title age_rating Zombie Town 18 Dragon Forge 16 Knight's Oath 16