Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР №6.docx
Скачиваний:
8
Добавлен:
28.06.2022
Размер:
499.08 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

«Национальный исследовательский университет «МИЭТ»

Факультет «Микроприборы и системы управления» (мпсу)

Кафедра «Вычислительная техника» (ВТ)

Лабораторная работа №6 по дисциплине

«Базы данных»

Тема: «Использование объединяющих, вложенных и корректирующих запросов языка SQL»

Цель работы: изучить возможности оператора UNION, вложенных запросов, а также операторов языка SQL, изменяющих данные в БД.

Продолжительность работы: 4 часа.

Выполнила студентка группы «ИВТ-44»: Никитина София Геннадьевна

Преподаватель: Немченко Дмитрий Игоревич

2021 г.

Содержание

  1. Выполнение работы 3

    1. Запросы с объединением 4

    2. Вложенные запросы 4

    3. Однострочные запросы 6

    4. Многострочные запросы 8

    5. Запросы на обновление 10

    6. Запросы на удаление 11

  1. Вывод 13

  1. Выполнение работы Лабораторное задание

Для БД, разработанной на предыдущих лабораторных работах, при домашней подготовке сформулировать и записать на языке 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. Вложенный запрос с факультетами, не имеющих первокурсников.

Соседние файлы в предмете Базы данных