Если требуется включить символы ‘%’, ‘_’ и квадратные скобки в образец, как обычные (а не как служебные) символы, нужно указать их после так называемого 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.