UTS-32_IOSU_Guguchkin_A_6
.docxМИНОБРНАУКИ РОССИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«Национальный исследовательский университет
«Московский институт электронной техники»
Направление |
27.03.04 «Управление в технических системах» |
Дисциплина |
Информационное обеспечение систем управления |
|
|
|
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К ЛАБОРАТОРНОЙ РАБОТЕ №6
-
«Использование объединяющих, вложенных и
корректирующих запросов языка SQL»
Выполнил Студент гр.УТС-32 Гугучкин А.А. |
|
|
|
|
(подпись) |
|
|
Проверил Свиридов А.Н. |
|
|
|
|
(подпись) |
|
|
Москва 2021
Цель: изучить возможности оператора UNION, вложенных запросов, а также операторов языка SQL, изменяющих данные в БД.
Лабораторное задание
Для БД, разработанной на предыдущих лабораторных работах, при домашней подготовке сформулировать и записать на языке SQL следующие запросы:
- не менее 3 запросов с объединением;
- не менее 5 вложенных запросов на выборку данных (в том числе с ALL, ANY и EXISTS);
- по одному однострочному запросу на добавление данных для каждой таблицы;
- не менее 3 многострочных запросов на добавление данных;
- не менее 5 запросов на обновление данных;
- не менее 3 запросов на удаление данных, в том числе, с условием, использующим вложенный запрос.
Проверить разработанные запросы, занося результаты в Отчет.
Выполнение
Запросы с объединением
(SELECT * FROM [ПациентВзрослые])
UNION (SELECT * FROM [ПациентДети])
(SELECT * FROM [ДетскиеЛечебныеУчреждения])
UNION (SELECT * FROM [ВзрослыеЛечебныеУчреждения])
(SELECT * FROM [ДиагнозТаблетки])
UNION (SELECT * FROM [ДиагнозРаствор])
Вложенные запросы на выборку данных
SELECT * FROM Пациент WHERE [Дата рождения] = (SELECT MAX ([Дата рождения]) FROM Пациент);
SELECT * FROM Прием
WHERE [Номер процедуры] = (
SELECT [Номер процедуры]
FROM Процедура
WHERE (Процедура.[Номер процедуры] = Прием.[Номер процедуры]));
SELECT Пациент.Фамилия, Пациент.Имя, COUNT(Прием.[Номер страхового полиса]) AS [Количество приемов]
FROM Пациент, Прием
WHERE Прием.[Номер страхового полиса]=[Пациент].[Номер страхового]
GROUP BY Пациент.Фамилия, Пациент.Имя
HAVING COUNT(Прием.[Номер страхового полиса]) >= ALL(
SELECT COUNT(Прием.[Номер страхового полиса])
FROM Пациент, Прием
WHERE Прием.[Номер страхового полиса]=[Пациент].[Номер страхового]
GROUP BY Пациент.Фамилия, Пациент.Имя
)
SELECT COUNT(Специальность) AS [Количество терапевтов]
FROM Врач
WHERE Специальность = 'Терапевт'
HAVING COUNT(Специальность) >= ANY(
SELECT COUNT(Специальность)
FROM Врач
WHERE Специальность = 'Терапевт'
)
SELECT COUNT(Специальность) AS [Количество терапевтов]
FROM Врач
WHERE Специальность = 'Окулист'
HAVING COUNT(Специальность) >= EXISTS(
SELECT COUNT(Специальность)
FROM Врач
WHERE Специальность = 'Окулист'
)
Однострочные запросы на добавление
INSERT INTO Врач ([Номер лечебного учреждения],Фамилия,Имя,Отчество,Специальность)
VALUES (1,'Быков','Андрей','Евгеньевич','Терапевт')
INSERT INTO Диагноз ([Описание диагноза],Лечение)
VALUES ('Остеохондроз','Мазь')
INSERT INTO [Лечебное учреждение]([Тип лечебного учреждения],[Специализация лечебного заведения],Адрес)
VALUES ('Стационарное','Детское','ул.Теренса Флореса,1')
INSERT INTO Пациент(Фамилия,Имя,Отчество,[Дата рождения],Адрес)
VALUES ('Приходько','Василий','Семенович','01.02.1970','ул.Бродвеева,79а')
INSERT INTO Прием([Табельный номер врача],[Дата приема],[Время приема],[Номер кабинета],[Номер страхового полиса],[Номер процедуры],[Идентификатор диагноза])
VALUES (3,'02.12.2020','08:00:00',20,3,1,3)
INSERT INTO Процедура(Название,Длительность,Цена)
VALUES ('Консультация',30,1000)
Многострочные запросы на добавление
INSERT INTO Прием([Номер страхового полиса])
SELECT [Номер страхового] FROM Пациент
WHERE Фамилия = 'Приходько';
INSERT INTO Врач([Номер лечебного учреждения])
SELECT [Номер лечебного заведения] FROM [Лечебное учреждение]
WHERE [Тип лечебного учреждения] = 'Амбулаторное' AND [Специализация лечебного заведения] = 'Взрослое'
INSERT INTO Врач([Номер лечебного учреждения],Фамилия,Имя,Отчество,Специальность)
SELECT Врач.[Номер лечебного учреждения], Врач.Фамилия, Врач.Имя, Врач.Отчество, Врач.Специальность
FROM Врач
WHERE (Врач.[Номер лечебного учреждения] = [Введите Номер лечебного учреждения] AND
Врач.Фамилия = [Введите Фамилию] AND Врач.Имя = [Введите Имя] AND
Врач.Отчество = [Введите Отчество] AND Врач.Специальность = [Введите Специальность]);
Введённые данные:
Номер лечебного заведения: 1;
Фамилия: Быков;
Имя: Андрей;
Отчество: Евгеньевич;
Специальность: Терапевт;
Поскольку данный объект в базе имеется под индексом 5, то он добавляется в нашу базу.
Запрос на обновление
UPDATE Процедура SET Цена = Цена + 100
UPDATE Процедура SET Название = 'Пристальный осмотр'
WHERE Название = 'Осмотр'
UPDATE Врач SET [Номер лечебного учреждения] = [Номер лечебного учреждения] + 1
UPDATE Диагноз SET Лечение = 'Компресс'
WHERE Лечение = 'Мазь'
UPDATE Врач SET Специальность = 'Оталаринголог'
WHERE Фамилия = 'Петров'
Запрос на удаление
DELETE FROM Врач
WHERE [Табельный номер врача] = 5
DELETE FROM [Лечебное учреждение]
WHERE [Номер лечебного заведения] = 4
DELETE * FROM Врач
WHERE [Табельный номер врача] IN (SELECT [Табельный номер врача] FROM Врач);
Вывод: В ходе данной лабораторной работы мы изучили возможности оператора UNION, вложенных запросов, а также операторов языка SQL, изменяющих данные в БД.