В чём разница между ASC и DESC в SQL?

Направление сортировки, несколько ключей ORDER BY и явный порядок для NULL на примере PostgreSQL.

Короткий ответ

Что ответить на собеседовании

ASC сортирует по возрастанию, DESC — по убыванию. Направление задаётся отдельно для каждого выражения ORDER BY; если его не указать, используется ASC. Для предсказуемого результата при равенстве значений добавляют ещё один ключ. Положение NULL зависит от СУБД, поэтому его лучше задавать явно, когда это важно.

Подробный разбор

Ответ с пояснениями

ASC и DESC относятся к ORDER BY и меняют порядок строк результата, а не данные в таблице.

SELECT id, price, created_at
FROM products
ORDER BY price ASC, created_at DESC, id ASC;

Сначала идут товары с меньшей ценой. Среди товаров с равной ценой выше будут более новые; если совпадает и дата, порядок определит id. DESC после created_at не распространяется на предыдущий столбец.

Для чисел возрастание означает от меньшего к большему, для дат — от раннего к позднему. Сортировка текста зависит от правил сравнения и collation: её нельзя всегда описывать как простой порядок байтов.

В PostgreSQL ORDER BY price равнозначен ORDER BY price ASC. По умолчанию NULL при ASC идут последними, при DESC — первыми. При необходимости задают явно:

SELECT id, price
FROM products
ORDER BY price DESC NULLS LAST, id;

Правила и поддержка NULLS FIRST/LAST различаются между СУБД. В ответе на собеседовании стоит назвать выбранную систему.

Без ORDER BY гарантированного порядка нет — даже если несколько запусков показывают строки одинаково. Для пагинации особенно важен однозначный порядок: уникальный дополнительный ключ исключает произвольную перестановку равных значений, хотя сам по себе не решает все вопросы изменения данных между запросами.

Документация PostgreSQL: сортировка строк.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку