Чтение онлайн

на главную - закладки

Жанры

Понимание SQL

Грубер Мартин

Шрифт:
УПОРЯДОЧЕНИЕ ВЫВОДА ПОЛЕЙ

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

SELECT *

FROM Orders

ORDER BY cnum DESC;

Вывод показывается в Рисунке 7.4.

SQL Execution Log

SELECT * FROM Orders ORDER BY cnum DESC;

onum

amt

odate

cnum

snum

3001

18.69

10/03/1990

2008

1007

3006

1098.16

10/03/1990

2008

1007

3002

1900.10

10/03/1990

2007

1004

3008

4723.00

10/05/1990

2006

1001

3011

9891.88

10/06/1990

2006

1001

3007

75.75

10/04/1990

2004

1002

3010

1309.95

10/06/1990

2004

1002

3005

5160.45

10/03/1990

2003

1002

3009

1713.23

10/04/1990

2002

1003

3003

767.19

10/03/1990

2001

1001

Таблица 7. 4:

Упорядочение вывода с помощью убывания поля

УПОРЯДОЧЕНИЕ С ПОМОЩЬЮ МНОГОЧИСЛЕНЫХ СТОЛБЦОВ

Мы можем также упорядочивать таблицу с помощью другого столбца, например с помощью поля amt, внутри упорядочения поля cnum. (вывод показан в Таблице 7.5 ):

SELECT *

FROM Orders

ORDER BY cnum DESC, amt DESC;

SQL Execution Log

SELECT * FROM Orders

ORDER BY cnum DESC, amt DESC;

onum

amt

odate

cnum

snum

3006

1098.16

10/03/1990

2008

1007

3001

18.69

10/03/1990

2008

1007

3002

1900.10

10/03/1990

2007

1004

3011

9891.88

10/06/1990

2006

1001

3008

4723.00

10/05/1990

2006

1001

3010

1309.95

10/06/1990

2004

1002

3007

75.75

10/04/1990

2004

1002

3005

5160.45

10/03/1990

2003

1002

3009

1713.23

10/04/1990

2002

1003

3003

767.19

10/03/1990

2001

1001

Таблица 7.5:

Упорядочение вывода с помощью многочисленых полей

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

SELECT cname, city

FROM Customers

GROUP BY cnum;

Так как поле cnum не было выбранным полем, GROUP BY не cможет найти его чтобы использовать для упорядочения вывода. Даже если ваша система позволяет это, смысл упорядочения не будет понятен из вывода, так что включение (в предложение SELECT) всех столбцов, используемых в предложении ORDER BY, в принципе желательно.

УПОРЯДОЧЕНИЕ АГРЕГАТНЫХ ГРУПП

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

SELECT snum, odate, MAX (amt)

FROM Orders

GROUP BY snum, odate

GROUP BY snum;

Вывод показывается в Таблице 7.6.

SQL Execution Log

SELECT snum, odate, MAX (amt) FROM Orders

GROUP BY snum, odate ORDER BY snum ;

snum

odate

amt

1001

10/06/1990

767.19

1001

10/05/1990

4723.00

1001

10/05/1990

9891.88

1002

10/06/1990

5160.45

1002

10/04/1990

75.75

1002

10/03/1990

1309.95

1003

10/04/1990

1713.23

1004

10/03/1990

1900.10

1007

10/03/1990

1098.16

Таблица 7.6: Упорядочение с помощью группы

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

УПОРЯДОЧЕНИЕ ВЫВОДА ПО НОМЕРУ СТОЛБЦА

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

Другими словами, поле упомянутое в предложении SELECT первым, для ORDER BY - это поле 1, независимо от того каким по порядку оно стоит в таблице. Например, вы можете использовать следующую команду чтобы увидеть определенные поля таблицы Продавцов, упорядоченными в порядке убывания к наименьшему значению комиссионных (вывод показывается в Таблице7.7 ):

SELECT sname, comm

FROM Salespeople

GROUP BY 2 DESC;

SQL Execution Log

SELECT sname, comm FROM Salespeople

ORDER BY 2 DESC;

sname

comm

Peel

0.17

Serres

0.13

Rifkin

0.15

Таблица 7. 7: Упорядочение использующее номера

Одна из основных целей этой возможности ORDER BY - дать вам возможность использовать GROUP BY со столбцами вывода также как и со столбцами таблицы. Столбцы производимые агрегатной функцией, константы, или выражения в предложении SELECT запроса, абсолютнопригодны для использования с GROUP BY, если они ссылаются к ним с помощью номера. Например, давайте сосчитаем порядки каждого из наших продавцов, и выведем результаты в убывающем порядке, как показано в Таблице 7.8:

Поделиться:
Популярные книги

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Чернильно-Черное Сердце

Роулинг Джоан Кэтлин
6. Корморан Страйк
Детективы:
триллеры
крутой детектив
5.00
рейтинг книги
Чернильно-Черное Сердце

Горизонт Вечности

Вайс Александр
11. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Горизонт Вечности

Проблемы роста

Meijin Q
Проза:
современная проза
повесть
5.00
рейтинг книги
Проблемы роста

Железный Воин Империи II

Зот Бакалавр
2. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Железный Воин Империи II

Я уже царь. Книга XXIX

Дрейк Сириус
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я уже царь. Книга XXIX

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Скажи миру – «нет!»

Верещагин Олег Николаевич
1. Путь домой
Фантастика:
фэнтези
героическая фантастика
попаданцы
7.61
рейтинг книги
Скажи миру – «нет!»

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Наследник

Назимов Константин Геннадьевич
3. Травник
Фантастика:
фэнтези
6.80
рейтинг книги
Наследник

Кодекс Императора IV

Сапфир Олег
4. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора IV

Последний наследник

Тарс Элиан
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний наследник

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2