
- •!!! Для дальнейшей работы откройте файл Учебной базы данных!!!
- •1. Основное sql-выражение для выборки данных
- •2. Уточнения запроса
- •2.1. Оператор where
- •Предикаты сравнения
- •Предикаты для вложенных запросов
- •2.2. Оператор group by
- •2.3. Оператор having
- •2.4. Оператор order by
- •2.5. Логические операторы
- •Список контрольных вопросов:
- •Задачи для самостоятельного выполнения:
2.2. Оператор group by
Оператор group by (группировать по) служит для группировки записей по значениям одного или нескольких столбцов. Если в SQL-выражении используется оператор where, задающий фильтр записей, то оператор group by находится и выполняется после него. Для определения, какие записи должны войти в группы, служит оператор having, используемый совместно с group by. Если оператор having не применяется, то группировке подлежат все записи, отфильтрованные оператором where. Если where не используется, то группируются все записи исходной таблицы.
Д
опустим,
что на основе таблицы о клиентах
требуется сгруппировать данные о
суммах заказов клиентов по регионам.
Для этого можно воспользоваться следующим
SQL-выражением:
SELECT Регион, Сумма_заказа FROM Клиенты
GROUP BY Регион;
На рис. показана результатная таблица на фоне исходной таблицы Клиенты. Обратите внимание, что записи с одинаковыми названиями регионов расположены рядом друг с другом (в одной группе).
Чтобы получить таблицу, в которой суммы заказов подытожены по регионам, потребуется использовать итоговую функцию sum() и группировку по регионам:
SELECT Регион, SUM(Сумма_заказа) FROM Клиенты
GROUP BY Регион;
З десь в выражении select указаны обычный столбец таблицы клиенты и итоговая функция SUM(), вычисляющая сумму значений столбца Сумма_заказа. Поскольку группировка задана по столбцу Регион, то функция SUM(Сумма_заказа) вычисляет суммы значений столбца Сумма_заказа для каждого значения столбца Регион. На рис. показана результатная таблица на фоне исходной таблицы клиенты. Обратите внимание, что в этой таблице названия регионов не повторяются.
Оператор group by собирает записи в группы и упорядочивает (сортирует) группы по алфавиту (точнее, по ASCII-кодам символов). Это обстоятельство следует иметь в виду перед тем, как принять решение об использовании оператора сортировки order by.
2.3. Оператор having
Оператор having (имеющие, при условии) обычно применяется совместно с оператором группировки group by и задает фильтр записей в группах. Правила его формирования такие же, что и для оператора where.
Предположим, что из таблицы Клиенты требуется выбрать данные о регионах и суммах заказов, сгруппированные по регионам и такие, в которых сумма заказа превышает 500. Иначе говоря, требуется сгруппировать данные с ограничением записей, входящих в группы. Запрос, выполняющий это задание, имеет вид:
SELECT Регион, Сумма_заказа FROM Клиенты
GROUP BY Регион, Сумма_заказа
HAVING Сумма_заказа > 500;
Результат выполнения этого запроса представлен на рис.
Е
сли
в SQL-выражении
оператора group
by
нет,
то оператор having
применяется
ко всем записям, возвращаемым оператором
where.
Если
же отсутствует и where,
то
having
действует
на все записи таблицы.
2.4. Оператор order by
Оператор order by (сортировать по) применяется для упорядочивания (сортировки) записей. Если он используется в запросе, то в самом конце запроса. Этот оператор сортирует строки всей таблицы или отдельных ее групп (в случае применения оператора group by). Если в выражении запроса оператора group by нет, то оператор order by рассматривает все записи таблицы как одну группу.
Вслед за ключевым словом order by указывается столбец, по значениям которого следует произвести сортировку. После имени столбца можно указать ключевое слово, задающее порядок (режим) сортировки:
asc — по возрастанию (ascending). Это значение принято по умолчанию, поэтому если необходима сортировка, например, в алфавитном порядке, то специально указывать порядок не требуется;
desc — по убыванию (descending).
Если в выражении order by указаны несколько столбцов сортировки, то сначала записи упорядочиваются по значениям первого столбца, затем для каждого значения первого столбца записи упорядочиваются по значениям второго столбца и т. д. Столбцы в списке разделяются, как обычно, запятыми. Таким образом, создается иерархическая система сортировки записей результатной таблицы.
В следующем примере данные исходной таблицы клиенты сортируются по регионам и по именам клиентов. При этом сортировка по именам клиентов производится по убыванию, т. е. в порядке, противоположном алфавитному.
SELECT * FROM Клиенты
ORDER BY Регион, Имя DESC;