2.7.     Упорядочение выходных полей (ORDER BY)

Как уже отмечалось, записи в таблицах реляционной базы данных не упорядочены. Однако данные, выводимые в резуль­тате выполнения запроса, могут быть упорядочены. Для этого используется оператор ORDER BY, который позволяет упорядо­чивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов. При этом можно задать возрастающую (ASC) или убывающую (DESC) последователь­ность сортировки для каждого из столбцов. По умолчанию при­нята возрастающая последовательность сортировки.

Запрос, позволяющий выбрать все данные из таблицы пред­метов обучения SUBJECT с упорядочением по наименованиям предметов, выглядит следующим образом:

SELECT *

FROM SUBJECT

ORDER BY SUBJJMAME;

Тот же список, но упорядоченный в обратном порядке, можно получить запросом:

SELECT *

FROM SUBJECT

ORDER BY SUBJ NAME DESC;

Можно упорядочить выводимый список предметов обуче­ния по значениям семестров, а внутри семестров — по наимено­ваниям предметов.

SELECT *

FROM SUBJECT

ORDER BY SEMESTER , SUB J_NAME ;

Предложение ORDER BY может использоваться с GROUP BY для упорядочения групп записей. При этом оператор ORDER BY в за­просе всегда должен быть последним.

SELECTSUBJ_NAME, SEMESTER, MAX(HOUR| FROM SUBJECT

GROUP BY  SEMESTER, SUBJ_NAME ORDER BY SEMESTER;

При упорядочении вместо наименований столбцов можно указывать их номера, имея, однако, ввиду, что в данном случае это номера столбцов, указанные при определении выходных данных в запросе, а не номера столбцов в таблице. Полем с но­мером 1 является первое поле, указанное в предложении ORDER BY — независимо от его расположения в таблице.

SELECT SUBJ_ID, SEMESTER FROM SUBJECT ORDER BY 2 DESC;

В этом запросе выводимые записи будут упорядочены по ПОЛЮ SEMESTR.

Если в поле, которое используется для упорядочения, су­ществуют NULL-значения, то все они размещаются в конце или предшествуют всем остальным значениям этого поля.

Упражнения

1. Предположим, что стипендия всем студентам увеличена на 20%. Напишите запрос ктаблице STUDENT, выполняющий вывод номе­ра студента, фамилию студента и величину увеличенной стипен­дии. Выходные данные упорядочить: а) по значению последнего столбца (величине стипендии); б) в алфавитном порядке фамилий студентов.

2. Напишите запрос, который по таблице ЕХАМ_МАКК5 позволяет найти а) максимальные и б) минимальные оценки каждого студен­та и который выводит их вместе с идентификатором студента.

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

4. Напишите запрос, который выполняет вывод суммы баллов всех студентов для каждой даты сдачи экзаменов и представляет резуль­таты в порядке убывания этих сумм.

5. Напишите запрос, который выполняет вывод а) среднего, б) мини­мального, в) максимального баллов всех студентов для каждой да­ты сдачи экзаменов и который представляет результаты в порядке убывания этих значений.