← Все вопросы

Как ограничить количество строк в результате (LIMIT и TOP)?

Задан 22 месяца назад1.5к просмотров2 ответа
10

Таблица огромная, а мне нужно посмотреть только первые 10 строк. Как ограничить число строк в SQL-запросе? И почему в одних примерах пишут LIMIT, а в других TOP — это одно и то же?

2 ответа

13
✓ Принятый ответ — помог автору

Способ зависит от СУБД, потому что это исторически не входило в стандарт 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 — на больших смещениях он медленный, потому что СУБД всё равно читает и отбрасывает пропущенные строки.

5

Коротко: LIMIT и TOP делают одно и то же — обрезают вывод, но это диалекты разных СУБД. LIMIT — в MySQL/PostgreSQL/SQLite, TOP — в SQL Server. Если переносите запрос между базами, это первое, что придётся переписать. И не забывайте ORDER BY, иначе «первые N» — это лотерея.

Ваш ответ

Войдите, чтобы ответить на вопрос.