- •Выборка данных
- •Оператор select
- •Выражения sql
- •Выражение from
- •Операции left join, right join
- •Операция inner join
- •Выражение in
- •Предикаты all, distinct, distinctrow, top
- •Объявление with owneraccess option
- •Выражение where
- •Операция Like
- •Операция In
- •Операция Between...And
- •Подзапрос
- •Выражение order by
- •Выражение group by
- •Выражение having
- •Оператор union
- •Оператор transform
- •Выражение procedure
- •Объявление parameters
- •Изменение данных
- •Оператор update
- •Оператор insert into
- •Оператор delete
- •Изменение структуры
- •Оператор select...Into
- •Оператор create table3
- •Выражение constraint4
- •Оператор alter table5
- •Оператор create index6
- •Оператор drop7
- •Агрегатные функции
- •Функция Count
- •Функция Avg
- •Функция Sum
- •Функции Var и VarP
- •Функции StDev и StDevP
- •Функции Min, Max
- •Функции First, Last
Выражение having
Указывает, какие сгруппированные записи выводятся оператором SELECT, содержащим выражение GROUP BY. После того, как GROUP BY сгруппирует записи, HAVING позволяет вывести только удовлетворяющие условию. Формат
SELECT fieldlist FROM table WHERE selectcriteria GROUP BY groupfieldlist [HAVING groupcriteria]
Оператор SELECT, содержащий выражение HAVING, имеет следующие части:
Часть |
Описание |
fieldlist |
Имя поля/полей с псевдонимами, агрегатные функции, предикаты ALL, DISTINCT, DISTINCTROW, TOP, и т.п. |
table |
Имя таблицы/таблиц с данными (см. FROM) |
selectcriteria |
Критерий отбора – выражение, которому должны удовлетворять записи, попадающие в запрос. Если есть выражение WHERE, Microsoft Jet группирует записи после наложения этого условия. |
groupfieldlist |
Имена полей для группировки (до 10). Порядок перечисления определяет уровень группировки от высшего к низшему. |
groupcriteria |
Выражение, определяющее, какие из сгруппированных записей нужно отображать |
Выражение HAVING не обязательно, но если указано, следует за GROUP BY. Аналогично WHERE. Например,
SELECT CategoryID, Sum(UnitsInStock) FROM Products GROUP BY CategoryID HAVING Sum(UnitsInStock) > 100 And Like "BOS*";
Может содержать до 40 логических выражений, объединенных операторами And или Or.
Поставщики со средней ценой товара более $25:
SELECT SupplierID, Avg(UnitPrice) AS AvgOfUnitPrice FROM Products GROUP BY SupplierID HAVING (Avg(UnitPrice)>25);
Сотрудники, продавшие более 100 заказов:
SELECT EmployeeID, Count(OrderID) AS CountOfOrderID FROM Orders GROUP BY EmployeeID HAVING Count(OrderID) > 100;
Оператор union
Объединяет результаты нескольких независимых запросов или таблиц («удлиняет» таблицу). Формат
[TABLE] query1 UNION [ALL] [TABLE] query2 [UNION [ALL] [TABLE] queryn [ ... ]]
query1 ... queryn – операторы SELECT, имена сохраненных запросов или имена таблиц (перед именами таблиц должно стоять TABLE). Можно объединять в любой комбинации. Все запросы в объединении должны возвращать одинаковое число полей, хотя поля могут различаться типами и размерами. Например:
TABLE [New Accounts] UNION ALL SELECT * FROM Customers WHERE OrderAmount > 1000;
объединяет существующую таблицу New Accounts и результаты запроса (SELECT).
По умолчанию UNION не возвращает дубликаты записей, однако их можно включить в результат с помощью предиката ALL,который, кстати, увеличивает скорость запроса.
Псевдонимы можно использовать только в первом операторе SELECT, в остальных они игнорируются.
В выражении ORDER BY нужно ссылаться на имена полей первого оператора SELECT.
Выражения GROUP BY и HAVING могут быть в любом из участвующих запросов.
Выражение ORDER BY в конце последнего запроса сортирует все объединение.
В конструкторе запросов UNION можно увидель только в SQL-режиме.
В следующем примере выводятся названи фирм и городов всех поставщиков и клиентов из Бразилии
SELECT CompanyName, City FROM Suppliers WHERE Country = 'Brazil' UNION SELECT CompanyName, City FROM Customers WHERE Country = 'Brazil';
То же с сортировкой по городам и поставщикам (3-е поле):
SELECT CompanyName, City, 'Supplier' AS Source FROM Suppliers WHERE Country = 'Brazil' UNION SELECT CompanyName, City, 'Customer' FROM Customers WHERE Country = 'Brazil' ORDER BY City, Source;
Названия и коды всех поставщиков и клиентов (предполагается одинаковых порядок полей в таблицах):
TABLE Customers UNION TABLE Suppliers;
