Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


SQL-запросы c групповыми операциями



Общий вид команды SELECT, применяемой для таких запросов, следующий:

 

SELECT поля и статистические функции

FROM таблицы или запросы

GROUP BY поля для группировки

HAVING условия

ORDER BY условия сортировки;

 

Здесь поля и статистические функции – данные, которые должны быть получены в результате выполнения запроса; поля для группировки – поля, используемые для групповых операций (например, если требуется вычислить сумму стоимостей или количество контрактов для каждого заказчика, то в разделе GROUP BY будет указано поле Заказчик); условия – условия выборки данных. Раздел HAVING в запросах с групповыми операциями аналогичен разделу WHERE в обычных запросах. Он всегда указывается после раздела GROUP BY.

Пример 9.7. Создать запрос для подсчета суммарной стоимости контрактов и количества контрактов каждого заказчика (эта же задача решалась в примере 5.1).

 

SELECT Заказчик, Sum([Стоимость контракта]) AS [Стоимость контрактов],

Count([Шифр объекта]) AS [Количество]

FROM Объекты

GROUP BY Заказчик;

 

Здесь выражение GROUP BY Заказчик означает, что записи в таблице Объекты (указанной в разделе FROM) будут сгруппированы по значению поля Заказчик. Для записей с одинаковым значением этого поля будет подсчитана сумма значений поля Стоимость контракта; для этого указано выражение Sum([Стоимость контракта]). Результат будет выводиться на экран под именем Стоимость контрактов (указывается после слова AS). Будет также подсчитано количество значений шифра объекта (т.е. количество записей) с одинаковым значением поля Заказчик; для этого используется функция Count.

Примечание. Вместо выражения Count([Шифр объекта]) можно указать Count(*). Такая операция представляет собой подсчет количества записей.

Пример 9.8. Создать запрос для получения тех же данных, что и в примере 9.7, но требуется только информация о заказчиках, для которых стоимость контрактов составляет не менее 100 млн ден.ед.

 

SELECT Заказчик, Sum([Стоимость контракта]) AS [Стоимость контрактов],

Count([Шифр объекта]) AS [Количество]

FROM Объекты

GROUP BY Заказчик

HAVING Sum([Стоимость контракта])>=100000000;

 

Пример 9.9. Создать запрос для подсчета количества рабочих каждой профессии. Запрос должен быть упорядочен по количеству рабочих (первыми должны выводиться профессии с максимальным количеством рабочих), а при одинаковом количестве рабочих – по профессии (в алфавитном порядке). Аналогичная задача решалась в примере 5.3.

 

SELECT Профессия, Count([Табельный номер]) AS [Количество]

FROM Рабочие

GROUP BY Профессия

ORDER BY Count([Табельный номер]) DESC, Профессия;

 

Пример 9.10. Создать запрос для подсчета суммы налогов (аналогичная задача решалась в примере 5.4).

Так как данных о налогах нет ни в одной таблице, в качестве источника будет использоваться запрос, в котором такие данные есть. Этот запрос был создан в примере 9.7. Пусть он сохранен под именем Список объектов.

 

SELECT Sum([Налог]) AS [Сумма налогов]

FROM [Список объектов];

 

Здесь Налог – имя вычисляемого поля, имеющегося в запросе Список объектов.

SQL-запросы на изменение базы данных

Запросы на обновление

Общий вид таких запросов следующий:

UPDATE таблица

SET поле=значение

WHERE условия

 

Пример 9.11. Создать запрос для выполнения следующей операции: для всех каменщиков и штукатуров, имеющих разряд не ниже пятого, установить шифр объекта П80 (аналогичная задача решалась в примере 7.1).

 

UPDATE Рабочие

SET [Шифр объекта] = "П100"

WHERE ((Профессия="штукатур") OR (Профессия="каменщик")) AND (Разряд>=5);

 

Пример 9.12. Создать запрос для выполнения следующей операции: снять всех рабочих с объектов заказчика “Автозавод”.

 

UPDATE Объекты INNER JOIN Рабочие ON Объекты.[Шифр объекта]=

Рабочие.[Шифр объекта]

SET Рабочие.[Шифр объекта] = Null

WHERE (Объекты.Заказчик="Автозавод");

 

Здесь требуется изменять значения поля Шифр объекта в таблице Рабочие, но при этом используется информация из таблицы Объекты, где указаны названия заказчиков. Поэтому в команде используется раздел INNER JOIN (связь между таблицами), и перед именами полей указываются имена таблиц. Значение Null, присваиваемое полю Шифр объекта, обозначает, что это поле становится пустым. Важно понимать, что значение Null – это не то же самое, что пустая строка (“”).

 

Запросы на удаление

Общий вид таких запросов следующий:

DELETE FROM таблица WHERE условие

 

Пример 9.13. Создать запрос для удаления данных обо всех рабочих, имеющих разряд не выше второго и не имеющих допуска к работам на высоте (аналогичная задача решалась в примере 7.1).

 

DELETE

FROM Рабочие

WHERE (Разряд<=2) AND ([Допуск на высоту]=False);


Поделиться:



Последнее изменение этой страницы: 2019-03-22; Просмотров: 893; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.009 с.)
Главная | Случайная страница | Обратная связь