Как ограничить количество строк в результате (LIMIT и TOP)?
Таблица огромная, а мне нужно посмотреть только первые 10 строк. Как ограничить число строк в SQL-запросе? И почему в одних примерах пишут LIMIT, а в других TOP — это одно и то же?
2 ответа
Способ зависит от СУБД, потому что это исторически не входило в стандарт SQL.
PostgreSQL, MySQL, SQLite — ключевое слово LIMIT в конце:
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 10;
SQL Server (MS SQL) — TOP сразу после SELECT:
SELECT TOP 10 name, price
FROM products
ORDER BY price DESC;
Oracle (современный) — FETCH FIRST:
SELECT name FROM products
ORDER BY price DESC
FETCH FIRST 10 ROWS ONLY;
Важный момент: LIMIT без ORDER BY вернёт какие попало 10 строк — порядок строк в таблице не гарантирован. Если хотите «топ-10 дорогих», обязательно сортируйте.
Для пагинации (страница 3 по 10 штук) в MySQL/Postgres есть смещение:
SELECT name FROM products
ORDER BY id
LIMIT 10 OFFSET 20;
OFFSET 20 пропускает первые 20 строк. Минус OFFSET — на больших смещениях он медленный, потому что СУБД всё равно читает и отбрасывает пропущенные строки.
Коротко: LIMIT и TOP делают одно и то же — обрезают вывод, но это диалекты разных СУБД. LIMIT — в MySQL/PostgreSQL/SQLite, TOP — в SQL Server. Если переносите запрос между базами, это первое, что придётся переписать. И не забывайте ORDER BY, иначе «первые N» — это лотерея.