Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 8.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
384.51 Кб
Скачать

3.6. Сортировка записей

Как уже говорилось, сортировка представляет собой упорядочивание записей по возрастанию или убыванию значений полей. Список полей, по которым выпол­няется сортировка, указывается в операнде order by. Порядок полей в этом операнде определяет порядок сортировки: сначала записи упорядочиваются по значениям поля, указанного в этом списке первым, затем записи, имеющие одинаковое значение первого поля, упорядочиваются по второму полю и т. д.

Поля в списке обозначаются именами или номерами, которые соответствуют номерам в списке полей после слова select.

По умолчанию сортировка происходит в порядке возрастания значений полей. Для указания обратного порядка сортировки по какому-либо полю нужно ука­зать после имени этого поля описатель desc.

Замечание

В отличие от набора данных Table, средствами языка SQL можно выполнять сортировку для набора данных Query и по неиндексированным полям. Однако по индексированным полям таблицы сортировка выполняется быстрее. При этом состав полей индекса должен соответствовать списку полей, указанных в операнде order by.

Пример запроса на сортировку записей:

SELECT * FROM Personnel.db

ORDER BY Name

Сортировка записей задана по полю Name. Полученный набор данных может иметь вид:

Code Name Position Salary

6 Васин Н.Е. Водитель 2500

1 Иванов P.O. Директор 6700

4 Кузнецов П.А. Секретарь 3600

2 Петров А.П. Менеджер 5200

5 Попов А.Л. Водитель 2400

3 Семенова И.И. Менеджер 5200

Еще один пример запроса на сортировку — на этот раз по двум полям:

SELECT Name, Position, Salary

FROM Personnel.db

ORDER BY Position, Salary DESC

или

SELECT Name, Position, Salary

FROM Personnel.db

ORDER BY 2, 3 DESC

В набор данных входят поля Name, Position и Salary всех записей. Записи от­сортированы по полям Position и Salary, при этом по полю Salary упорядочи­вание выполняется в порядке убывания значений. Полученный набор данных будет таким:

Name Position Salary

Васин Н.Е. Водитель 2500

Попов А.Л. Водитель 2400

Иванов P.O. Директор 6700

Петров А.П. Менеджер 5200

Семенова И.И. Менеджер 5200

Кузнецов П.А. Секретарь 3600

Если по полям Position и Salary построен индекс, то операции с набором дан­ных будут выполняться быстрее.

При разработке приложения управление сортировкой осуществляется посредст­вом различных элементов формы, например, кнопок и переключателей.

Рассмотрим следующий пример. Пользователь управляет сортировкой с по­мощью двух групп переключателей: в первой задается вид, во второй — направ­ление сортировки. Сортировка выполняется после нажатии кнопки btnSort с названием Отсортировать. На рис. 8.1 показан вид формы на этапе проекти­рования.

Рис. 8.1. Окно сортировки набора данных

Ниже приводится обработчик события нажатия кнопки btnSort.

procedure TForml.btnSortClick(Sender: TObject);

Var s: string;

begin

Queryl.Close;

Queryl.SQL.Clear;

Queryl.SQL.Add('SELECT * FROM Personnel.db');

case RadioGroup2.Itemlndex of

0: s : = " ;

1: s:='DESC?;

end;

case RadioGroupl.Itemlndex of

0: s:='ORDER BY P_Name ' + s;

1: s:='ORDER BY P_Birthday '+ s;

2: s:='ORDER BY P_Position ' + s + ', P_Salary ' + s;

3: s: = ";

end;

Queryl.SQL.Add(s);

Queryl.Open;

end;

При нажатии кнопки btnSort для набора данных Queryl происходит подготовка и выполнение SQL-запроса. Текст запроса формируется в зависимости от со­стояния переключателей, управляющих сортировкой.

Когда в SQL-запросе отсутствует параметр order, по умолчанию записи упоря­дочиваются по первому полю. Поэтому в рассматриваемом примере отсутствие сортировки и сортировка по полю Name приводят к одинаковому результату.