
- •Тема 4: «Основы языка sql. Команды управления данными – ddl. Команды манипулирования данными – dml» Основы ddl
- •2 Основы dml. Базовый набор команд
- •3 Расширенные возможности языка dml
- •3.1 Функции
- •3.2 Операторы
- •3.3 Упорядочивание выборок
- •3.3.1 Изменение порядка строк выборки
- •3.3.3 Выборки из выборок
3.3 Упорядочивание выборок
Часто в выборке необходимо изменять порядок следования строк. Иногда отобранные данные необходимо сгруппировать, например, по цехам, а иногда сама выборка является промежуточным результатом перед получением интересующих данных.
3.3.1 Изменение порядка строк выборки
Порядок строк выборки изменяют конструкцией:
ORDER BY <порядок_строк> [ASC/DESC]p
Способ упорядочивания определяют зарезервированные слова ASC — "по возрастанию" и DESC — "по убыванию". Способом по умолчанию является ASC.
Порядок строк выборки может задаваться либо именами столбцов, либо их номерами.
Упорядочивание с использованием имен столбцов. Например, получить список арендаторов, который упорядочен по фамилиям в алфавитном порядке:
SELECT Tn
FROM Tenant
ORDER BY Tn
Упорядочивание с использованием номеров столбцов. Например, получить список арендаторов, упорядоченный по адресам арендуемых объектов:
SELECT Tn, AdT
FROM Tenant
ORDER BY 2
Допускается использование нескольких уровней вложенности при упорядочивании выводимой информации. При этом разрешается смешивать оба способа. Например, если стоимость аренды разных объектов одного типа различна, то получить список объектов недвижимости, упорядоченный сначала по типу объектов, а среди них — по убыванию арендной платы можно так
SELECT Typ, Rn
FROM Rent
ORDER BY Typ, 2 DESC
3.3.2 Группировка выборки
Конструкция GROUP BY инициирует группировку строк указанных FROM таблиц по указанному перечню столбцов. Далее к каждой группе применяется команда SELECT так, что данные каждой группы принимают единственное значение, например, результат арифметического выражения или одной из агрегатных SQL-функций.
Например, определить суммарную годовую стоимость аренды объектов Ивановым можно следующей SQL командой:
SELECT Tenant.Tn, (SUM(12*Rent.Rn)) AS Total
FROM Realty, Lease, Tenant, Rent
WHERE (Tenant.Tn = 'Иванов')
AND (Lease.NTn = Tenant.NTn)
AND (Realty.AdR = Lease.AdR)
AND (Rent.Typ = Realty.Typ)
GROUP BY Tenant.Tn
3.3.3 Выборки из выборок
Предложение HAVING определяет критерии, используемые для исключения групп из выборки, точно также как предложение WHERE делает это для строк.
Например, если необходимо определить максимальная стоимость, каких арендуемых объектов превышает 100 у.е., то следует воспользоваться следующей SQL командой
SELECT Tenant.Tn, (MAX(Rn)) AS Renta
FROM Realty, Lease, Tenant, Rent
WHERE (Tenant.NTn = Lease.NTn)
AND (Lease.AdR = Realty.AdR)
AND (Realty.Typ = Rent.Typ)
GROUP BY Tenant.Tn
HAVING MAX(Rn) > 100