
ЛР8 / ЛР8_С_подписями
.docxЛабораторная работа № 8
Использование объединяющих и вложенных запросов
и корректирующих операторов языка SQL
Цель работы: изучить возможности оператора UNION и вложенных запросов и получить практические навыки использования операторов языка SQL,
изменяющих данные, хранящиеся в БД.
Задание 3
Сниженная стоимость мероприятий для пожилых:
Запрос: SELECT Клиент.КодКлиента, Клиент.Имя, Клиент.Фамилия, Клиент.Телефон, ЗаявкаНаУчастие.КодМероприятия, НазваниеМероприятия, Стоимость*0.75 AS СниженнаяСтоимость
FROM Мероприятие INNER JOIN (Клиент INNER JOIN ЗаявкаНаУчастие ON Клиент.КодКлиента = ЗаявкаНаУчастие.КодКлиента) ON Мероприятие.КодМероприятия = ЗаявкаНаУчастие.КодМероприятия
WHERE (((ЗаявкаНаУчастие.КодКлиента) In (SELECT КодКлиента
FROM Клиент
WHERE DateDiff("yyyy",ДатаРождения,Date()) >= 60
)));
Результат:
Рис. 1 Вывод по запросу "(SQL) Снижменная стоимость мероприятий для пожилых"
Вывод объединения таблиц ПредстоящиеМероприятия и запроса БесплатныеМероприятия
Запрос: SELECT КодМероприятия, НазваниеМероприятия, ДатаПроведения
FROM ПредстоящиеМероприятия
UNION
SELECT КодМероприятия, НазваниеМероприятия, ДатаПроведения
FROM [Бесплатные Мероприятия];
Результат:
Рис. 2 Вывод по запросу "(SQL) Объединение предстоящих и всех бесплатных мероприятий"
Данные
таблицы ПредстоящиеМероприятия:
Рис. 3 Данные таблицы ПредстоящиеМероприятия
Данные
запроса Бесплатные мероприятия:
Рис. 4 Данные запроса Бесплатные мероприятия
Вывод мероприятия с минимальной ценой, не равной 0
Запрос: SELECT КодМероприятия, НазваниеМероприятия, Стоимость
FROM Мероприятие
WHERE Стоимость = (
SELECT MIN(Стоимость)
FROM Мероприятие
WHERE Стоимость > 0
);
Результат:
Рис. 5 Вывод по запросу "(SQL) Вывод мероприятия с min ценой и не бесплатного"
Вывод самого молодого клиента
Запрос:
SELECT КодКлиента, Имя, Фамилия, ДатаРождения
FROM Клиент
WHERE ДатаРождения = (
SELECT MAX(ДатаРождения)
FROM Клиент
);
Результат:
Рис. 6 Вывод по запросу "(SQL) Вывод самого молодого клиента"
Средний возраст клиентов, чей возраст от 45 до 59
Запрос: SELECT 'Средний возраст среди людей 45-59', Avg(DateDiff("yyyy",ДатаРождения,Date())) AS Выражение1
FROM Клиент
WHERE (((Клиент.[КодКлиента]) In (SELECT КодКлиента
FROM Клиент
WHERE DateDiff("yyyy",ДатаРождения,Date()) BETWEEN 45 AND 59
)));
Результат:
Рис. 7 Вывод по запросу "(SQL) Средний возраст клиентов от 45 до 59"
Средняя стоимость мероприятий (без учета бесплатных)
Запрос:
SELECT 'Средняя цена мероприятий без учета бесплатных', AVG(Стоимость) AS СредняяСтоимость
FROM Мероприятие
WHERE КодМероприятия IN (
SELECT КодМероприятия
FROM Мероприятие
WHERE Стоимость >0
);
Результат выполнения:
Рис. 8 Вывод по запросу "(SQL) Средняя стоимость мероприятий"
Ближайшее мероприятие
Запрос:
SELECT КодМероприятия, НазваниеМероприятия, ДатаПроведения
FROM Мероприятие
WHERE ДатаПроведения IN (
SELECT MIN(ДатаПроведения)
FROM Мероприятие
WHERE ДатаПроведения > Date()
);
Результат
выполнения:
Рис. 9 Вывод по запросу "(SQL) Ближайшее мероприятие"
Вывод клиента, у которого ближайший день рождения
Запрос:
SELECT Фамилия, Имя, Отчество, ДатаРождения
FROM Клиент
WHERE ДатаРождения = (
SELECT TOP 1 ДатаРождения
FROM Клиент
WHERE (Month(ДатаРождения) > Month(Date())) OR
(Month(ДатаРождения) = Month(Date()) AND Day(ДатаРождения) >= Day(Date()))
ORDER BY Month(ДатаРождения), Day(ДатаРождения) >= Day(Date())
);
Результат:
Рис. 10 Вывод по запросу "(SQL) Клиент, у кого ближайший день рождения"
Вывод мероприятий, на которые никто не зарегистрировался
Запрос:
SELECT КодМероприятия, НазваниеМероприятия, Стоимость
FROM Мероприятие
WHERE КодМероприятия NOT IN (
SELECT КодМероприятия
FROM ЗаявкаНаУчастие
)
Результат:
Рис. 11 Вывод по запросу "(SQL) Вывод мероприятий, на которые никто не зарегистрировался"
Сколько потратил каждый клиент на мероприятия
Запрос:
SELECT КодКлиента, Фамилия, Имя, Отчество,
(SELECT SUM(Стоимость)
FROM ЗаявкаНаУчастие INNER JOIN Мероприятие ON ЗаявкаНаУчастие.КодМероприятия = Мероприятие.КодМероприятия
WHERE ЗаявкаНаУчастие.КодКлиента = Клиент.КодКлиента) AS ОбщаяСумма
FROM Клиент;
Результат:
Рис. 12 Вывод по запросу "(SQL) Сколько потратил каждый клиент на мероприятия"
Добавление нового клиента в соответствующую таблицу
Запрос
INSERT INTO Клиент (Фамилия, Имя, Отчество, Телефон, АдресЭлектроннойПочты)
VALUES ('Клиент', 'Для', 'Удаления', '+7(111)2223344', 'asas@bk.ru');
Результат
Рис. 13 Вывод по запросу "(SQL) Добавление нового клиента в соответствующую таблицу"
Удаления заявок на участие из соответствующей таблицы для созданного клиента
Запрос:
DELETE FROM ЗаявкаНаУчастие
WHERE КодКлиента = (
SELECT КодКлиента
FROM Клиент
WHERE Фамилия = 'Клиент' AND Имя = 'Для' AND Отчество = 'Удаления'
)
Результат:
До
изменений:
Рис. 14 Таблица ЗаявкаНаУчастие до изменений
После
изменений:
Рис. 15 Вывод для запроса "(SQL) Удаление заявок на участие для клиента"
Удаление созданного клиента
Запрос: DELETE FROM Клиент
WHERE Фамилия = 'Клиент' AND Имя = 'Для' AND Отчество = 'Удаления'
Результат:
Рис. 16 Вывод по запросу "(SQL) Удаление созданного клиента"
Добавление новой записи в таблицу ЗаявкаНаУчастие
Запрос:
INSERT INTO ЗаявкаНаУчастие (КодКлиента, КодМероприятия) VALUES (51, 2);
Результат: До изменений:
Рис. 17 Содержимое таблицы ЗаявкаНаУчастие до изменений
После изменений:
Рис. 18 Вывод по запросу "(SQL) Добавление новой записи в ЗаявкаНаУчастие"
Обновление номера телефона для клиента
Запрос:
UPDATE Клиент SET Телефон = '+7(000)9998877'
WHERE Фамилия = 'Клиент2'
Результат:
До
изменений:
Рис. 19 Содержимое таблицы Клиент до изменений
После изменений:
Рис. 20 Вывод по запросу "(SQL) Изменение номера телефона клиента"
Добавление нового мероприятия в соответствующую таблицу
Запрос:
INSERT INTO Мероприятие (НазваниеМероприятия, ДатаПроведения, Стоимость)
VALUES ('Мюзикл «Последняя сказка» в Театре МДМ', #01/05/2025#, 2000)
Результат:
Рис. 21 Вывод по запросу "(SQL) Добавление нового мероприятия в соответствующую таблицу"
Обновление стоимости для добавленного мероприятия
Запрос:
UPDATE Мероприятие SET Стоимость = Стоимость * 1.1
WHERE НазваниеМероприятия = 'Мюзикл «Последняя сказка» в Театре МДМ';
Результат:
Рис. 22 Вывод по запросу "(SQL) Обновление стоимости мероприятия"
Уменьшение стоимости мероприятий, на которые никто на зарегистрировался
Запрос:
UPDATE Мероприятие SET Стоимость = Стоимость * 0.9
WHERE КодМероприятия NOT IN (
SELECT КодМероприятия
FROM ЗаявкаНаУчастие
);
Результат:
До изменений:
Рис. 23 Содержимое таблицы Мероприятие до изменений
После изменений:
Рис. 24 Вывод по запросу "(SQL) Уменьшение стоимости событий, на которых нет регистрации"
Удалить мероприятия из предстоящих, которые уже прошли
Запрос:
DELETE FROM ПредстоящиеМероприятия
WHERE ДатаПроведения < Date()
Результат:
До изменений:
Рис. 25 Содержимое таблицы ПредстоящиеМероприятия до изменений
После изменений:
Рис. 26 Вывод по запросу "(SQL) Удаление мероприятий, которые прошли, из предстоящих"
Полностью очистить таблицу Предстоящие мероприятия
Запрос:
DELETE FROM ПредстоящиеМероприятия;
Результат выполнения:
Рис. 27 Вывод по запросу "(SQL) Очистка таблицы ПредстоящиеМероприятия"