Собесов

Может ли ORDER BY уменьшить число строк в результате?

SQLСемантика SQLЛёгкаяJunior

Условие

Может ли ORDER BY приводить к уменьшению числа строк в результате выполнения?

Решение

Нет. ORDER BY — это только сортировка: меняет порядок строк, не отбрасывает и не добавляет ни одной.

Количество строк в результате определяется операциями над множеством строк:

  • WHERE — фильтр (может уменьшить).
  • JOIN — соединение (может уменьшить и увеличить).
  • GROUP BY + агрегаты — схлопывание (уменьшает).
  • DISTINCT — удаление дублей (уменьшает).
  • HAVING — фильтр после GROUP BY (уменьшает).
  • LIMIT/FETCH — ограничение (уменьшает).
  • UNION (без ALL) — удаление дублей (уменьшает).

ORDER BY ни в одном диалекте SQL не отсеивает строки.

Где можно ошибиться

В реальных системах есть «псевдо-уменьшение»:

  • ORDER BY ... LIMIT n — отсечёт всё после n-й строки. Но «обрезает» именно LIMIT, а не ORDER BY.
  • SELECT TOP n ... ORDER BY в SQL Server — то же самое: режет TOP, не ORDER BY.

Подводные камни

  1. Думать, что ORDER BY ... DISTINCT-эффект. Это разные операции: DISTINCT дубли удаляет, ORDER BY — нет.
  2. Считать, что ORDER BY бесплатен. Сортировка — это O(n log n) и часто требует временной памяти/диска. На больших таблицах бывает узким местом.
  3. Полагаться на порядок без ORDER BY. В SQL без явного ORDER BY порядок строк не определён, даже если «обычно» возвращается одинаковым.

Эталонный ответ

Нет.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти