После того как запрос выдал итоговую результирующую таблицу (после
обработки списка выбора), эта таблица по желанию может быть
отсортирована. Если сортировка не задана, строки выдаются в
несортированном виде. Фактически, сортировка в этом случае
будет зависеть от плана сканирования и объединения и порядка
расположения на диске, но вы не должны доверять этим соображениям.
Определённый порядок вывода может быть гарантирован только,
если явно задана и выполнена сортировка.
Предложение ORDER BY задаёт порядок сортировки:
SELECT список_выбора
FROM табличное_выражение
ORDER BY выражение_сортировки1 [ASC | DESC] [NULLS { FIRST | LAST }]
[, выражение_сортировки2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]
Выражение(я) сортировки могут быть любыми выражениями, которые
являются допустимыми в списке выбора. Например:
SELECT a, b FROM table1 ORDER BY a + b, c;
Когда задаётся более чем одно выражение сортировки, более поздние
значения используются для сортировки строк, которые уже были отсортированы
в соответствии с более ранними значениями. За каждым выражением может
следовать необязательное ключевое слово ASC или DESC,
чтобы указать направление сортировки: по возрастанию или по убыванию.
По умолчанию используется ASC. Сортировка по возрастанию
помещает меньшие значения вначале, где "меньшее"
определяется согласно оператору <. Точно также,
сортировка по убыванию определяется оператором >.
Для указания порядка следования значений NULL при сортировке, могут быть
использованы опции NULLS FIRST и NULLS LAST.
По умолчанию, значения NULL сортируются так, как если бы любое
значение было больше NULL; таким образом NULLS FIRST
для DESC является порядком по умолчанию, в противном
случае NULLS LAST.
Обратите внимание, что опции упорядочивания указываются независимо
для каждой сортируемой колонки. Например, ORDER BY x, y DESC
означает ORDER BY x ASC, y DESC, а не
ORDER BY x DESC, y DESC.
Для обратной совместимости с версией стандарта SQL92, в
выражении_сортировки могут быть метка
или номер колонки в выводе:
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;
Оба вышеуказанных примера, выполняют сортировку по первой
колонке. Обратите внимание, что имя выходной колонки должно
быть самостоятельным именем, оно не может быть использовано в
выражении, например так неправильно:
SELECT a + b AS sum, c FROM table1 ORDER BY sum + c; -- ошибка
Это ограничение снижает путаницу. Путаница возможна, если элемент
ORDER BY является простым именем, которое может
совпадать либо с именем выводимой колонки, либо с колонкой
из табличного выражения. В таких случаях используется
выводимая колонка. Такое поведение может вызвать путаницу
только, если вы используете AS для переименования
выходной колонки, чтобы она совпадала с некоторыми другими
именами колонок таблицы.
ORDER BY может применяться к результатам комбинирования
UNION, INTERSECT или EXCEPT,
но в этому случае допускается только сортировка по именам или
номерам выходных колонок, а не по выражениям.