Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
327.17 Кб
Скачать

Выражение 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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]