Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Упорядочение выходных полей

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

Упорядочение выходных полей

Таблицы являются неупорядоченными множествами, и исходящие из них данные необязательно представляются в какой-либо определенной последовательности. В SQL применяется команда ORDER ВУ, позволяющая внести некоторый порядок в выходные данные запроса. Она их упорядочивает в соответствии со значениями од­ ного или нескольких выбранных столбцов. Множество столбцов упорядочиваются

один внутри другого, как в случае применения GROUP ВУ, и можно задать возрас­

тающую (ASC) или убывающую (DESC) последовательность сортировки для каждо­ го из столбцов. По умолчанию приията возрастающая последовательность

сортировки.

Таблица заявок (Orders), упорядоченная по номеру заявки, (обратить внимание на значения в столбце cnum) выглядит так:

SELECT *

FROM Orders

ORDER ВУ cnum DESC;

Выходные данные представлены на рис. 7.4.

Рис. 7.4. Упорядочение выходных данных по убыванию поля cnum

67

Глава 7. Форматированиерезулыпатов запросов

Упорядочение по мноJ1Сеству столбцов

Внутри уже произведенного упорядочения по полю cnum можно упорядочить

таблицу и по другому столбцу, например, amt (выходные данные представлены на

рис. 7.5):

SELECT •

FROM Orders

ORDER ВУ cnum DESC, amt DESC;

Так можно использовать ORDER ВУ одновременно для любого количества столб­

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

выбранных. Этому требованию стандарта ANSI удовлетворяет большинство систем.

Например, следующая команда неверна:

SELECT cname, city

FAOM Customers

ORDER ВУ cnum;

Поскольку поле cnum отсутствует в списке выбранных полей, предложение

ORDER ВУ не может его найти для упорядочения выходных данных. Даже если сис­

тема позволяет это сделать, значимость такого упорядочения неочевидна, поскольку

само поле, по которому выполняется сортировка, не представлено в выходных дан­

ных. Поэтому включение в них всех столбцов, используемых в предложении ORDER ВУ, весьма желательно.

н.1.111"м мш1м м.1.nи

 

3006

1098.16

10/03/1990

3001

 

18.69

10/03/1990

3002

1900.10

10/03/1990

3011

9891.88

10/06/1990

3008

4723.00

10/05/1990

3010

1309.95

10/06/1990

3007

 

75.75

10/04/1990

3005

5160.45

10/03/1990

3009

1713.23

10/04/1990

3003

 

767.19

10/03/1990

; .

 

..'

". .

Рис. 7.5. Упорядочение выходных данных по множеству полей

68

Упорядочение выходных полей

Упорядочение составных групп

ORDER ВУ может использоваться с GROUP ВУ для упорядочения групп. ORDER ВУ всегда выполняется последней. Вот пример из предыдущей главы с добавлением предложения ORDER ВУ. До этого выходные данные были сгруппированы, но поря­ док групп был произвольным; теперь группы выстроены в определенной последова­

тельности:

SELECT snum, odate, MAX(amt)

FROM Orders

GROUP ВУ snum, odate

ORDER ВУ snum;

Выходные данные представлены на рис. 7.6.

Поскольку в команде не указан способ упорядочения, по умолчанию применяется

возрастающий.

Рис. 7.6. Упорядочение групп

Упорядочение результата по номеру столбца

Вместо имен столбцов для указания полей, по которым упорядочиваются выход­

ные данные, можно использовать номера. Но ссылаясь на них, следует иметь в виду,

что это номера в определении выходных данных, а не столбцов в таблице. Т.е. первое поле, имя которого указано в SELECT, является для предложения ORDER ВУ полем с номером 1, независимо от его расположения в таблице. Например, можно применить следующую команду, чтобы увидеть определенные поля таблицы Salespeople, упоря­ доченные по убыванию поля commission (comm) (выходные данные представлены на

рис. 7.7):

69

Глава 7. Форматироваииерезультатов за11росов

Рис. 7. 7. Упорядочение с использованием номеров столбцов

SELECT sname, comm

FROM Salespeople

ORDER ВУ 2 DESC;

Мы рассматриваем это свойство ORDER ВУ для того, чтобы продемонстрировать воз­ можность его использования со столбцами выходных данных; эта процедура аналогична применению ORDER ВУ со столбцами таблицы. Столбцы, полученные с помощью функ­ ций агрегирования, константы или выражения в предложении запроса SELECT, можно применить и с ORDER ВУ, если на них ссьшаются по номеру. Например, чтобы подсчи­ тать заявки (orders) для каждого продавца (salespeople) и вывести результаты в убываю­ щем порядке, как показано на рис. 7.8:

SELECT snum, COUNT (DISTINCT onum)

FROM Orders

GROUP

ORDER

ВУ

ВУ

snum

2 DESC;

В этом случае был использован номер столбца, но так как выходной столбец не имеет имени, саму функцию агрегирования применять не понадобилось. В соответст­ вии со стандартом ANSI SQL, следующий запрос не работает, хотя в некоторых систе­ мах он воспринимается без проблем:

SELECT snum, COUNT (DISTINCT onum)

FROM Orders

70

Итоги

Рис. 7.8. Упорядочение выходных столбцов

GROUP ВУ snum

OROER ВУ COUNT (OISTINCT onum) OESC;

Многими системами такая команда воспринимается как ошибочная.

ORDER ВУ с NULL-значениями

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

значениям этого поля. Конкретный вариант не оговаривается стандартом ANSI, во­

прос решается индивидуально для каждого программного продукта, и один из этих ва­

риантов принимается.

Итоги

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

ния полей используются в выражениях: например, можно умножить числовое поле на

1О или умножить его на другое числовое поле. Кроме того, константы, в том числе и

символьные, можно включать в состав выходных данных. Все это дает возможность

выводить текст непосредственно в результат запроса наравне с данными, содержащи-

71

Источник: https://studfile.net/preview/16418473/