Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМКД_БД_2.doc
Скачиваний:
20
Добавлен:
23.09.2019
Размер:
6.01 Mб
Скачать

1.3.17. Сортировка результатов запроса (предложение order by)

Строки результатов запроса, как и строки таблицы базы данных, не имеют определённого порядка. Но, включив в инструкцию SELECT предложение ORDER BY, можно отсортировать результаты запроса. Это предложение, синтаксическая диаграмма которого изображена на рисунке, содержит список имён или порядковых номеров столбцов, разделённых запятыми.

Рисунок 1.3.17.1 – Структура предложения

Например, результаты следующего запроса отсортированы по двум столбцам, REGION и CITY:

SELECT CITY, REGION, SALES FROM OFFICES ORDER BY REGION, CITY

Первый столбец (REGION) является главным ключом сортировки; столбцы, следующие за ним (в данном примере CITY), являются всё более второстепенными ключами.

Можно сортировать результаты запроса по любому элементу списка возвращаемых столбцов.

В предложении ORDER BY можно выбрать возрастающий или убывающий порядок сортировки. По умолчанию данные сортируются в порядке возрастания. Чтобы сортировать их по убыванию, следует включить в предложение сортировки ключевое слово DESC.

Чтобы определить порядок сортировки по возрастанию, необходимо использовать ключевое слово ASС, однако из-за того что такой порядок принят по умолчанию, это ключевое слово обычно не указывают.

Если столбец результатов запроса, используемый для сортировки, является вычисляемым, то у него нет имени, которое можно указать в предложении сортировки. В таком случае вместо имени столбца необходимо указать его порядковый номер.

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

SELECT CITY, REGION, (SALES-TARGET) FROM OFFICES ORDER BY 3 DESC

Одновременно используя имена и номера столбцов, а также возрастающий и убывающий порядки сортировки, можно сортировать результаты запроса по достаточно сложному алгоритму, как это сделано в следующем примере.

Вывести список офисов, отсортированный в алфавитном порядке по названиям регионов, а в каждом регионе – по разности между фактическим и плановым объемами продаж в порядке убывания.

SELECT CITY, REGION, (SALES-TARGET) FROM OFFICES ORDER BY REGION ASC, 3 DESC

Стандарт SQL2 позволяет управлять порядком сортировки отдельно по каждому ключу. Это может оказаться важным при работе с локализованными наборами символов или для обеспечения переносимости между системами с разными таблицами кодировок. Однако эта часть спецификации SQL2 является довольно сложной и в большинстве СУБД либо вообще игнорируются вопросы, связанные с порядком сортировки, либо используются собственные схемы сортировки.

1.3.18. Правила выполнения однотабличных запросов

Однотабличные запросы являются простыми, и смысл такого запроса легко понять, просто прочитав инструкцию SELECT. Однако по мере возрастания сложности запроса появляется необходимость в более точном определении результатов, которые будут возвращены данной инструкцией SELECT.

Как показано ниже, результаты запроса, возвращенные инструкцией SELECT, получаются в результате поочередного применения входящих в инструкцию предложений. Вначале применяется предложение FROM (оно выбирает таблицу, содержащую требуемые данные), затем – WHERE (которое по определённому критерию отбирает из таблицы строки), далее – SELECT (которое создает указанные столбцы результатов запроса и при необходимости удаляет повторяющиеся строки) и, наконец, ORDER BY (сортирует результаты запроса).

Результаты запроса на выборку генерируются следующим образом:

1. Взять таблицу, указанную в предложении FROM.

2. Если имеется предложение WHERE, применить заданное в нём условие отбора к каждой строке таблицы и оставить только те строки, для которых это условие выполняется, т.е. имеет значение TRUE; строки, для которых условие отбора имеет значение FALSE или NULL, – отбросить.

3. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса. При каждой ссылке на столбец используется значение столбца для текущей строки.

4. Если указано ключевое слово DISTINCT, удалить из таблицы результатов запроса все повторяющиеся строки.

5. Если имеется предложение ORDER BY, отсортировать результаты запроса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]