После того, как запрос создал выходную таблицу (после обработки списка выбора), ее можно дополнительно отсортировать. Если сортировка не выбрана, строки будут возвращены в неопределенном порядке. Фактический порядок в этом случае будет зависеть от типов плана сканирования и соединения и порядка на диске, но на него нельзя полагаться. Конкретный порядок вывода может быть гарантирован только в том случае, если шаг сортировки выбран явно.

Предложение ORDER BYопределяет порядок сортировки:

SELECT select_list
    FROM table_expression
    ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
             [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]

Выражение(я) сортировки может быть любым выражением, которое допустимо в списке выбора запроса. Пример:

SELECT a, b FROM table1 ORDER BY a + b, c;

Когда указано более одного выражения, более поздние значения используются для сортировки строк, которые равны в соответствии с более ранними значениями. За каждым выражением может следовать необязательное ключевое слово ASCили DESC, чтобы установить направление сортировки по возрастанию или по убыванию. ASCпорядок по умолчанию. В порядке возрастания сначала помещаются меньшие значения, где « меньше » определяется с точки зрения <оператора. Точно так же порядок убывания определяется >оператором.

Параметры NULLS FIRSTи NULLS LASTможно использовать, чтобы определить, появляются ли пустые значения до или после ненулевых значений в порядке сортировки. По умолчанию нулевые значения сортируются так, как если бы они были больше любого ненулевого значения; то есть NULLS FIRSTэто значение по умолчанию для DESCпорядка и в NULLS LASTпротивном случае.

Обратите внимание, что параметры упорядочения рассматриваются независимо для каждого столбца сортировки. Например ORDER BY x, y DESCозначает ORDER BY x ASC, y DESC, что не то же самое, что ORDER BY x DESC, y DESC.

A sort_expressionтакже может быть меткой столбца или номером выходного столбца, например:

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;          -- wrong

Это ограничение сделано для уменьшения неоднозначности. Неоднозначность сохраняется, если ORDER BYэлемент представляет собой простое имя, которое может соответствовать либо имени выходного столбца, либо столбцу из табличного выражения. Выходной столбец используется в таких случаях. Это может вызвать путаницу только в том случае, если вы ASпереименуете выходной столбец, чтобы он соответствовал имени какого-либо другого столбца таблицы.

ORDER BYможет применяться к результату UNION, INTERSECTили EXCEPTкомбинации, но в этом случае разрешена сортировка только по именам выходных столбцов или числам, а не по выражениям.