После того как запрос сформировал выходную таблицу (после обработки списка выбора), данные в ней могут быть отсортированы. Если сортировка не задана, строки будут возвращены в неопределенном порядке. Фактический порядок в этом случае будет зависеть от типов планов сканирования и соединения, а также от физического порядка на диске, но на него не следует полагаться. Конкретный порядок вывода может быть гарантирован только в том случае, если этап сортировки выбран явно.
Предложение ORDER BY определяет порядок сортировки:
команда SELECTselect_listпредложение FROMtable_expressionORDER BYsort_expression1[ASC | DESC] [NULLS { FIRST | LAST }] [,sort_expression2[ASC | DESC] [NULLS { FIRST | LAST }] ...]
В качестве выражений сортировки могут использоваться любые выражения, допустимые в списке выбора команды SELECT. Например:
SELECT a, b FROM table1 ORDER BY a + b, c;
Если указано несколько выражений,
последующие значения используются для сортировки строк, значения которых совпали при сравнении
по предыдущим выражениям. После каждого выражения может следовать необязательное
ASC или DESC ключевое слово для задания направления сортировки
по возрастанию или по убыванию. ASC порядок используется по умолчанию.
При сортировке по возрастанию сначала располагаются меньшие значения, где
««меньшее»» определяется с помощью
< оператора <. Аналогично, порядок сортировки по убыванию определяется с помощью > оператор.
[6]
Предложение NULLS FIRST и NULLS LAST опции могут быть использованы для определения того, будут ли значения null следовать до или после значений, отличных от null, в порядке сортировки. По умолчанию значения null при сортировке считаются больше любого значения, отличного от null; то есть NULLS FIRST является значением по умолчанию для
DESC порядка, а NULLS LAST в противном случае.
Обратите внимание, что параметры сортировки рассматриваются независимо для каждого столбца. Например, ORDER BY x, y DESC означает
ORDER BY x ASC, y DESC, что не то же самое, что
ORDER BY x DESC, y DESC.
Табличное выражение 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; -- ошибка
Данное ограничение введено для устранения неоднозначности. Неоднозначность все еще возможна,
если ORDER BY элемент представляет собой простое имя, которое может соответствовать либо имени выходного столбца, либо столбцу из табличного выражения. В таких случаях используется выходной столбец. Это может привести к путанице только в том случае, если вы используете AS для переименования выходного столбца так, чтобы его имя совпадало с именем какого-либо другого столбца таблицы.
ORDER BY может быть применено к результату
UNION, INTERSECT, или EXCEPT
объединения, но в этом случае допускается сортировка только по именам или номерам выходных столбцов, а не по выражениям.
[6]
Фактически, Digital Q.DataBase использует класс операторов B-дерево
по умолчанию для типа данных выражения, чтобы определить порядок сортировки для ASC и DESC. Как правило,
типы данных настраиваются так, чтобы < и
> операторы соответствовали этому порядку сортировки, но разработчик пользовательского типа данных может выбрать иное поведение.