Сортировка
Результат выборки данных при выполнении оператора SELECT
по умолчанию никак не
упорядочивается (хотя довольно часто происходит упорядочение в хронологическом порядке
помещёния строк в таблицу операторами INSERT
). Предложение ORDER BY
позволяет задать
необходимый порядок при выборке данных.
Синтаксис:
SELECT ... FROM ...
...
ORDER BY <ordering-item> [, <ordering-item> ...]
<ordering-item> ::=
{col-name | col-alias | col-position | expression}
[COLLATE collation-name]
[ASC[ENDING] | DESC[ENDING]]
[NULLS {FIRST | LAST}]
col-name - Полное имя столбца. col-alias - Алиас (псевдоним) столбца. col-position - Позиция столбца. expression - Произвольное выражение. collation-name - Имя сопоставления (порядка сортировки).
В предложении через запятую перечисляются столбцы, по которым нужно упорядочить результирующий набор данных. Можно задавать имя столбца, псевдоним, присвоенный столбцу в списке выбора при помощи ключевого слова AS, или порядковый номер столбца в списке выбора. В одном предложении можно для разных столбцов смешивать форму записи. Например, один столбец в списке сортировки может быть задан своим именем, а другой порядковым номером.
Ключевое слово ASCENDING
задаёт упорядочение по возрастанию значений. Допустимо
сокращение ASC
. Применяется по умолчанию.
Ключевое слово DESCENDING
задаёт упорядочение по убыванию значений. Допустимо
сокращение DESC
.
В одном предложении упорядочение по одному столбцу может идти по возрастанию значений,
а по другому — по убыванию.
Ключевое слово COLLATE
позволяет задать порядок сортировки строкового столбца, если
нужен порядок, отличный от того, который был установлен для этого столбца (явно при
описании столбца или по умолчанию, принятому для соответствующего набора символов).
Ключевое слово NULLS
определяет, где в отсортированном наборе данных будут находиться
значения NULL
соответствующего столбца – в начале выборки (FIRST
) или в конце (LAST
). По
умолчанию принимается NULLS FIRST
.
В описанном ниже запросе выборка будет отсортирована по возрастанию по столбцам RDB
$CHARACTER_SET_ID
, RDB$COLLATION_ID
таблицы DB$COLLATIONS
:
SELECT
RDB$CHARACTER_SET_ID AS CHARSET_ID,
RDB$COLLATION_ID AS COLL_ID,
RDB$COLLATION_NAME AS NAME
FROM RDB$COLLATIONS
ORDER BY RDB$CHARACTER_SET_ID, RDB$COLLATION_ID
То же самое, но сортировка производится по псевдонимам столбцов:
SELECT
RDB$CHARACTER_SET_ID AS CHARSET_ID,
RDB$COLLATION_ID AS COLL_ID,
RDB$COLLATION_NAME AS NAME
FROM RDB$COLLATIONS
ORDER BY CHARSET_ID, COLL_ID
В следующем запросе производится сортировка, по номерам столбцов:
SELECT
RDB$CHARACTER_SET_ID AS CHARSET_ID,
RDB$COLLATION_ID AS COLL_ID,
RDB$COLLATION_NAME AS NAME
FROM RDB$COLLATIONS
ORDER BY 1, 2