ASC сортирует по возрастанию, DESC — по убыванию. Направление задаётся отдельно для каждого выражения ORDER BY; если его не указать, используется ASC. Для предсказуемого результата при равенстве значений добавляют ещё один ключ. Положение NULL зависит от СУБД, поэтому его лучше задавать явно, когда это важно.
В чём разница между ASC и DESC в SQL?
Направление сортировки, несколько ключей ORDER BY и явный порядок для NULL на примере PostgreSQL.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
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 гарантированного порядка нет — даже если несколько запусков показывают строки одинаково. Для пагинации особенно важен однозначный порядок: уникальный дополнительный ключ исключает произвольную перестановку равных значений, хотя сам по себе не решает все вопросы изменения данных между запросами.