Оператор выборки в Transact-SQL. Использование представлений (Лабораторная работа № 3), страница 3

Если требуется включить символы ‘%’, ‘_’ и квадратные скобки в образец, как обычные (а не как служебные) символы, нужно указать их после так называемого escape-символа. Он задается в необязательной секции escape. Например:

‘100 %’ like ‘% /%’ escape ‘/’

Первый символ в образце ‘% /%’ – это специальный символ. Он указывает на то, что строка начинается с любого числа любых символов. Затем через пробел следует комбинация ‘/%’, где знаку процента предшествует escape-символ ‘/’. Знак процента с предшествующим escape-символом понимается как обычный символ: в данном случае это знак процента. Таким образом, строка ‘100 %’ соответствует образцу. Этому же образцу соответствует объявление наподобие: ‘Постоянным клиентам скидка 5 %’.

6. exists (подзапрос).

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

2.1.5. Предложение groupby

Данная секция, когда она присутствует в вызове оператора select, инициирует группирование данных таблицы по значению некоторого столбца (или комбинации значений нескольких столбцов).

Самое простое, чего можно добиться с помощью группирования, - это узнать, какие значения встречаются в данном столбце. Выполним группирование строк таблицы coaches по столбцу coach_type:

            select coach_type

                       from coaches

                       group by coach_type

Будет получен следующий результат:

coach_type

----------------

Купе

СВ

Два полученных значения говорят о том, что в БД зарегистрировано два типа вагонов: Купе и СВ. Но этим возможности группирования не исчерпываются.  Дело в том, что совместно с группированием часто используется агрегирование, т. е. обработка исходных данных с помощью агрегатных функций (табл. 2). С их помощью можно рассчитывать минимальное, максимальное, суммарное и среднее значения некоторого столбца для каждой группы, а также количество элементов группы.

Таблица 2 – Агрегатные функции SQL

Функция

Описание

count(*)

Эта функция возвращает количество всех (в том числе и NULL) элементов группы


count(столбец)

Возвращает количество не-NULL значений в столбце для каждой группы


sum(столбец)

Подсчитывает арифметическую сумму значений числового столбца для каждой группы

min(столбец)

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

max(столбец)

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


avg(столбец)

Возвращает среднее значение в указанном столбце для каждой группы

Рассмотрим несколько примеров использования агрегатных функций. Следующий запрос выдает информацию о количестве зарегистрированных в БД купейных вагонов и вагонов СВ.

            select coach_type, count(*)

                       from coaches

                       group by coach_type

Этот запрос группирует строки таблицы coaches по значениям в столбце coach_type. Как и в предыдущем случае, будет выделено две группы строк: со значением ‘Купе’ и со значением ‘СВ’ в столбце coach_type. Однако в списке выражений появилась агрегатная функция count(*); она возвращает количество элементов в каждой группе. Результатом выполнения такого запроса будет следующая таблица:

coach_type     count(*)

----------------    -----------

Купе               34

СВ                  2

Таким образом, в БД на момент выполнения запроса было зарегистрировано 34 купейных вагона и два вагона СВ.

Теперь рассмотрим более сложный пример. Следующий запрос возвращает типы вагонов с указанием средней цены на билеты по каждому типу.

            select coach_type, avg(price)

                       from coaches, seats, passengers_seats

                       where passengers_seats.id_seat = seats.id_seat

                                   and seats.id_coach = coaches.id_coach

                       groupby coach_type