SELECT STAFF.Branch_no, Avg(STAFF.Salary) AS Средняя_зарплата
Подсчёта количества трехкомнатных квартир, предлагаемых в Витебске и Полоцке.
SELECT City, COUNT(*) AS Количество_квартир
WHERE (Rooms=3) AND ((City=’Витебск’) OR (City=’Полоцк’))
Раздел HAVING задает условие отбора групп строк, которые включаются в таблицу, определяемую инструкцией SELECT.
Условия отбора применяется к столбцам, указанным в разделе GROUP BY, к столбцам итоговых функций или к выражениям, содержащим итоговые функции. Если некоторая группа не удовлетворяет условию отбора, она не попадает в набор записей.
Синтаксис: HAVING < условие_отбора>
Разница между HAVING и WHERE заключается в том, что условие отбора, заданное в разделе WHERE применяется к отдельным записям, перед их группировкой, а условие отбора раздела HAVING применяется к группам строк.
Если раздел GROUP BY находится перед HAVING, условие отбора применяется к каждой из групп, сформированных на основе совпадения значений в заданных столбцах. В случае отсутствия раздела GROUP BY условие отбора применяется ко всей таблице определенной инструкцией SELECT. Агрегатные функции могут применяться как в выражении вывода результатов строки SELECT, так и в выражении обработки сформированных групп HAVING.
Например, вывести список и номера телефонов отделений, которые предлагают более одной трехкомнатной квартиры.
WHERE PROPERTY.Branch_no=BRANCH.Branch_no AND PROPERTY.Rooms=3
HAVING COUNT(*)>1;
В SQL имеются специальные средства, которые позволяют совершенствовать вывод запросов:
· размещение текста в выводе запроса:
SELECTимя_поля1, ‘текст’, имя_поля2 …
При этом все символы, в том числе и пробелы, вставляются в вывод, поэтому этот способ можно использовать для маркировки вывода вместе со вставляемыми комментариями.
· упорядочение полей вывода:
ORDERBYимя_поляASC|DESC;
Если указывается несколько полей, то столбцы вывода упорядочиваются один внутри другого, при этом можно определить ASC (возрастание) или DESC (убывание).
Например, определить количество объектов, находящихся в ведении каждого из сотрудников компании c упорядочением отделений по убыванию:
SELECT STAFF.Branch_no, STAFF.Staff_no, Count(*) AS Count_Staff_no
FROM STAFF INNER JOIN PROPERTY ON STAFF.Staff_no = PROPERTY.Staff_no