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

UTS-32_IOSU_Guguchkin_A_6

.docx
Скачиваний:
2
Добавлен:
08.03.2023
Размер:
696.84 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«Национальный исследовательский университет

«Московский институт электронной техники»

Направление

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, изменяющих данные в БД.