Сортировка результатов (конструкция ORDER BY)




В общем случае строки в результирующей таблице запроса SQL не упорядочены каким-либо определенным образом (хотя в некоторых СУБД может быть предусмотрено применение по умолчанию определенного способа упорядочения, например по первичному ключу). Однако их можно отсортировать надлежащим образом, для чего в оператор SELECT помещается конструкция ORDER BY. Конструкция ORDER BY включает список разделенных запятыми идентификаторов столбцов, по которым требуется упорядочить результирующую таблицу запроса. Идентификатор столбца может представлять собой либо его имя, либо номер1, который обозначает элемент списка SELECT в соответствии с его позицией в этом списке. Самый левый элемент списка имеет номер 1, следующий – 2 и т.д. Номера столбцов могут использоваться в тех случаях, когда столбцы, по которым следует упорядочить результат, являются вычисляемыми, а конструкция AS с указанием имени этого столбца в операторе SELECT отсутствует. Конструкция ORDER BY позволяет упорядочить выбранные записи в порядке возрастания (ASC) или убывания (DESC) значений любого столбца или комбинации столбцов, независимо от того, присутствуют эти столбцы в таблице результатов или нет. Однако в некоторых диалектах SQL требуется, чтобы конструкция ORDER BY обязательно присутствовала в списке выборки оператора SELECT. В любом случае конструкция ORDER BY всегда должна быть последним элементом в операторе SELECT.

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

 

SELECT staffNo, fName, IName, salary

FROM Staff

ORDER BY salary DESC;

 

Этот пример подобен примеру рассмотренному ранее примеру. Различие состоит лишь в том, что полученные в результате выполнения запроса данные следует упорядочить по убыванию значений заработной платы в столбце salary. Это достигается посредством помещения в конец оператора SELECT конструкции ORDER BY, задающей сортировку результирующей таблицы по убыванию значений в столбце salary. А поскольку значения должны располагаться в порядке убывания, то указано ключевое слово DESC. Результаты выполнения запроса представлены в табл. 20. Обратите внимание, что конструкция ORDER BY может быть записана и в следующем виде:

ORDER BY 4 DESC.

 

Здесь 4 обозничает четвертый столбец в списке выборки оператора SELECT, т.е. столбец salary.

Таблица 20

Результат выполнения запроса

staffNo   fName   IName   Beech Howe Lee salary  
SL21   John   White   30000.00  
SG5   Susan   Brand   24000.00  
SG14 . David Ford 18000.00
SG37   Ann     12000.00  
SA9   Mary     9000.00  
SL41   Julie     9000.00  

 

В конструкции ORDER BY может быть указано и больше одного элемента. Старший ключ сортировки определяет общую упорядоченность строк результирующей таблицы. В предыдущем примере старшим ключом сортировки является столбец salary. Если значения старшего ключа сортировки во всех строках результирующей таблицы являются уникальными, нет необходимости использовать дополнительные ключи сортировки. Однако, если значения старшего ключа не уникальны, в результирующей таблице будет присутствовать несколько строк с одним и тем же значением старшего ключа сортировки. В этом случае может оказаться желательным упорядочить строки с одним и тем же значением старшего ключа по какому-либо дополнительному ключу сортировки. Если в конструкции ORDER BY присутствуют второй и последующие элементы, то такие элементы называют младшими ключами сортировки.

Пример 12. Сортировка по нескольким столбцам. Подготовьте сокращенный список сдаваемых в аренду объектов, упорядоченный по типу.

SELECT propertyNo, type, rooms, rent

FROM PropertyForRent

ORDER BY type;

 

После выполнения этого запроса будет создана результирующая таблица 21.

Таблица 21

Результат выполнения запроса

propertyNo   type   rooms   rent  
PL94 Flat    
PG4 Flat    
PG36 Flat    
PG16 Flat    
PA14 House    
PG21 House    

 

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

SELECT propertyNo, type, rooms, rent

FROM PropertyForRent

ORDER BY type, rent DESC;

 

Теперь результат выполнения запроса будет упорядочен вначале по типу сдаваемого в аренду объекта (по возрастанию, в алфавитном порядке) (ключевое слово АЗС применяется по умолчанию), а в пределах одного типа объекта – в порядке убывания значений арендной платы. Результаты выполнения нового варианта запроса представлены в табл. 22.

Таблица 22

Результат выполнения запроса с сортировкой по двум столбцам

propertyNo type rooms rent
PG16 Flat    
PL94 Flat    
PG36 Flat    
PG4 Flat    
РА14 House    
PG21 House    

 

В стандарте ISO указано, что значения NULL в столбцах или выражениях, для сортировки которых применяется конструкция ORDER BY, должны рассматриваться либо как меньшие, либо как большие по величине, чем все непустые значения. Выбор того или иного варианта оставлен на усмотрение разработчиков СУБД.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: