Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
SQL-запросы c групповыми операциями ⇐ ПредыдущаяСтр 4 из 4
Общий вид команды 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; Нарушение авторского права страницы