Какое ключевое слово используется по умолчанию для сортировки в SQL
Что проверяют
Знаете ли вы, что сортирует ORDER BY, а направление по умолчанию ASC. Для тестировщика вопрос быстро уходит в практику: гарантирован ли порядок без ORDER BY и где сортировка ломается на реальных данных.
Как отвечать
Коротко: сортировку задаёт ORDER BY, направление по умолчанию ASC, по возрастанию, DESC пишут явно. Дальше то, что отличает ответ тестировщика:
- направление у каждой колонки своё: в
ORDER BY department, salary DESCубывание относится только кsalary,departmentидёт по возрастанию; - без
ORDER BYпорядок не гарантирован: ни PostgreSQL, ни MySQL не обещают отдавать строки в порядке вставки или по первичному ключу. После обновления строк или смены плана запроса порядок другой, и тест, который на него опирается, начинает мигать; - NULL: в PostgreSQL и Oracle
NULLбольше любого значения и приASCуходит в конец, в MySQL и SQL Server оказывается в начале. В PostgreSQL и Oracle место задают явно:NULLS FIRST,NULLS LAST; - строки и collation: порядок зависит от правил сравнения базы. Регистр, буква «ё», числа в текстовой колонке:
'10'окажется раньше'9'; - пагинация:
ORDER BY created_at LIMIT 20 OFFSET 20при одинаковых датах может показать запись на двух страницах и потерять другую. Нужен уникальный добавочный ключ:ORDER BY created_at, id.
Всё это готовые проверки: сортировка таблицы в интерфейсе по колонке с пустыми значениями, по кириллице, по числам в строковом поле, стабильность выдачи между страницами.
Где спотыкаются
Отвечают ORDER BY и замолкают, хотя вопрос про направление. Или путают и называют DESC.
Считают, что ORDER BY a, b DESC сортирует обе колонки по убыванию.
Проверяют сортировку на аккуратных тестовых данных без NULL, дублей и смешанного регистра. Именно на таких данных сортировка в продукте и ломается.