Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР8 / ЛР8_С_подписями

.docx
Скачиваний:
1
Добавлен:
12.06.2025
Размер:
1.02 Mб
Скачать

Лабораторная работа № 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) Очистка таблицы ПредстоящиеМероприятия"