Описание порядков сортировки записей |
Сортировка по умолчанию определяется индексами, использованными при обработке подцепок конструкции where. Описание порядков сортировки записей позволяет явно задать нужную сортировку.
При наличии описания нескольких порядков сортировки появляется возможность динамически переключаться между ними. Порядок может изменяться с помощью вызова метода логической таблицы SetOrder.
Описание порядков сортировки состоит из последовательности конструкций order by:
<описание-порядков-сортировки> = { <конструкция-order-by> }
<конструкция-order-by> - задает возможный вариант сортировки выборки. Порядок сортировки может быть поименованным или нет. Непоименованный порядок является порядком, включаемым по умолчанию при инициализации логической таблицы. Ему присваивается имя standard.
<конструкция-order-by> = order [ <имя-порядка> ] by [ external ] <порядок-сортировки>
<имя-порядка> - идентификатор.
external - при наличии данного атрибута порядок будет работать на внешней выгрузке, даже если для всех указанных полей можно подобрать индексы на соответствующие таблицы.
<порядок-сортировки> - перечень полей, по которым производится сортировка (через запятую), либо tableOrder.
<порядок-сортировки> = tableOrder | <поле-для-сортировки> {, <поле-для-сортировки> }
tableOrder - оставить порядок сортировки, указанный при описании логической таблицы.
<поле-для-сортировки> - описание одного поля с атрибутами. Атрибуты перечисляются через запятую и заключаются в круглые скобки.
<поле-для-сортировки> = <выражение> [ ( <атрибут> [, <атрибут> ] ) ]
<атрибут> - атрибут сортировки.
<атрибут> = asc | desc | length = <целое-число> | offset = <целое-число>
asc - сортировка записей в порядке возрастания значения выражения.
desc - обратный порядок сортировки.
Атрибут length (l) устанавливает значимую длину сегмента ключа, равную целому числу без знака.
Используется для полей типа string и char.
Длина сегмента задается для каждого сегмента индекса отдельно. Начало сегмента совпадает с началом поля, если не задано смещение сегмента (см. ниже в данном разделе).
По умолчанию длина сегмента приравнивается к длине поля.
Если для сегмента типа string задано ненулевое смещение, то в сегмент включается length знаков, начиная со смещения offset без учета конца строки. Таким образом, если атрибут length не задан или задан некорректно, то в сегмент попадают случайные данные ("мусор").
Атрибут offset задает позицию, начиная с которой значение поля воспринимается как значение сегмента.
Смещение сегмента задается для каждого сегмента индекса отдельно.
По умолчанию смещение сегмента считается равным нулю.
Пример 1
select Post.name, Employee.name where(( Post.code == Employee.post )) order by Post.name;
Пример 2
select * from Employee order by name;
Пример 3
select department, name from Employee where(( department == Department.code )) order by salary;