МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Национальный исследовательский университет «МИЭТ»
Факультет «Микроприборы и системы управления» (мпсу)
Кафедра «Вычислительная техника» (ВТ)
Лабораторная работа №6 по дисциплине
«Базы данных»
Тема: «Использование объединяющих, вложенных и корректирующих запросов языка SQL»
Цель работы: изучить возможности оператора UNION, вложенных запросов, а также операторов языка SQL, изменяющих данные в БД.
Продолжительность работы: 4 часа.
Выполнила студентка группы «ИВТ-44»: Никитина София Геннадьевна
Преподаватель: Немченко Дмитрий Игоревич
2021 г.
Содержание
Выполнение работы 3
Запросы с объединением 4
Вложенные запросы 4
Однострочные запросы 6
Многострочные запросы 8
Запросы на обновление 10
Запросы на удаление 11
Вывод 13
Выполнение работы Лабораторное задание
Для БД, разработанной на предыдущих лабораторных работах, при домашней подготовке сформулировать и записать на языке SQL следующие запросы:
- не менее 3 запросов с объединением;
- не менее 5 вложенных запросов на выборку данных (в том числе с ALL, ANY и EXISTS);
- по одному однострочному запросу на добавление данных для каждой таблицы;
- не менее 3 многострочных запросов на добавление данных;
- не менее 5 запросов на обновление данных;
- не менее 3 запросов на удаление данных, в том числе, с условием, использующим вложенный запрос.
Запросы с объединением
Объединим два запроса, включающие студентов, имеющих и не имеющих льготы с помощью оператора UNION.
SELECT * FROM Льготные_студенты
UNION
SELECT * FROM [Не льготники];
По сути, получим таблицу со всеми студентами из базы данных, где Гордон Д.И., имеющий сразу 2 льготы не повторяется в списке.
Рисунок 1. Запрос с объединением студентов, имеющих и не имеющих льготы использованием UNION.
Попробуем объединить запросы так, чтобы Гордон Д.И. повторялся столько раз, сколько имеет льгот. Для этого используем UNION ALL.
SELECT * FROM Льготные_студенты
UNION ALL
SELECT * FROM [Не льготники];
Можно заметить, что вторая таблица просто присоединилась снизу, в отличие от использования UNION.
Рисунок 2. Запрос с объединением студентов, имеющих и не имеющих льготы с использованием UNION ALL.
Выберем нужные столбцы для объединения совершеннолетних и несовершеннолетних студентов и отсортируем фамилии по алфавиту.
SELECT [Номер студенческого билета], Фамилия, Имя, Отчество FROM [Совершеннолетние студенты]
UNION
SELECT [Номер студенческого билета], Фамилия, Имя, Отчество FROM [Несовершеннолетние студенты]
ORDER BY Фамилия;
Рисунок 3. Запрос с объединением несовершеннолетних и совершеннолетних студентов с использованием ORDER BY.
Вложенные запросы
Условие поиска – сравнение. Из таблицы «Студент» найдем самого молодого студента.
SELECT * FROM Студент
WHERE [Дата рождения] = (SELECT MAX([Дата рождения]) FROM Студент)
Рисунок 4. Вложенный запрос с отображением данных самого молодого студента.
Условие поиска – проверка на принадлежность. Вложенный запрос отбирает ИД факультетов, находящиеся в 4 корпусе (т.е. номер кабинета начинается с 4-ки). Главный запрос проверяет равенство отобранных ИД с ИД факультетов в списке групп и выдает данные этих групп.
SELECT [ИД группы], [Номер группы]
FROM Группа
WHERE [ИД факультета] IN
(SELECT [ИД факультета]
FROM Факультет
WHERE (Деканат Between 4000 And 4999))
Рисунок 5. Вложенный запрос с отображением групп с деканатом в 4 корпусе.
Условие поиска – проверка на существование. Теперь выведем список студентов, у которых деканат в 4 корпусе с помощью раннее созданного запроса. Для этого убедимся, существует ли хотя бы одна группа, соответствующая выше составленному списку групп.
SELECT [Номер студенческого билета], Фамилия, Имя, [Номер группы]
FROM Студент
WHERE EXISTS (SELECT *
FROM [Группы, где деканат в 4 корпусе]
WHERE [Группы, где деканат в 4 корпусе].[ИД группы] = Студент.[Номер группы])
Рисунок 6. Вложенный запрос с отображением студентов с деканатом в 4 корпусе.
Условие поиска – многократное сравнение при проверке ANY. Найдем факультеты, у которых есть ХОТЯ БЫ одна группа первокурсников (номер группы начинается с единицы). Во вложенном запросе отобрали факультеты, которые имеют хотя бы одну группу.
SELECT [ИД факультета], [Название факультета]
FROM Факультет
WHERE 20 > ANY (SELECT [Номер группы]
FROM Группа
WHERE Группа.[ИД факультета] = Факультет.[ИД факультета])
Рисунок 7. Вложенный запрос с факультетами, имеющих первокурсников.
Условие поиска – многократное сравнение при проверке ALL. Найдем все факультеты, которые не имеют ни одной группы первокурсников.
SELECT [ИД факультета], [Название факультета]
FROM Факультет
WHERE 20 < ALL (SELECT [Номер группы]
FROM Группа
WHERE Факультет.[ИД факультета] = Группа.[ИД факультета]);
Рисунок 8. Вложенный запрос с факультетами, не имеющих первокурсников.