Вы находитесь на странице: 1из 7

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

высшего образования
"Национальный исследовательский университет
"Высшая школа экономики"
 Московский институт электроники и математики им. А.Н.Тихонова
 Департамент компьютерной инженерии

Лабораторная работа № 3
по курсу «Базы данных»
Тема: Выборка данных

Студент: Хахалев Алексей


Группа: БИВ214
Преподаватель: Некрасов Глеб
Дата:
Оценка:

Москва, 2023
Постановка задачи
В лабораторная работа №3 требуется применить изученные базовые команды в
PostgreSQL (UPDATE, DELETE и INSERT). Работа направлена на работу со знакомство и
работу с представлениями.

Вариант 29
Л.р. №3. Работа с представлениями. Для созданных представлений необходимо проверить
с помощью запросов UPDATE, DELETE и INSERT, являются ли они обновляемыми, и
объяснить полученный результат.
1. Представление "Тренеры, у которых нет занятий".
2. Представление "Тренеры групп": группа – тренер.
3. Представление "Количество текущих клиентов по видам занятий": вид занятий −
количество клиентов-мужчин – количество клиентов-женщин.

2
Решение 
ER-диаграмма:

Рисунок 1 – ER-диаграмма

1. Представление "Тренеры, у которых нет занятий".

Код:

CREATE VIEW not_training_trener


AS SELECT s.num, s.surname,s.trener_name, s.title, s.phone
FROM trener s
WHERE s.num NOT IN (SELECT trener_num FROM schedule GROUP BY trener_num)

Проверка на обновление:

UPDATE not_training_trener
SET title = 'hip-hop'
WHERE num=127

Представление получилось обновляемое, т.к в запросе использовалась 1 таблица и не


использовались никакие агрегатные функции.

3
2. Представление "Тренеры групп": группа – тренер.

Код:

CREATE VIEW group_trener


AS SELECT s.group_name, s.trener_num, e.surname, e.trener_name, e.phone
FROM
(SELECT group_name, trener_num
FROM schedule
GROUP BY (group_name,trener_num)) s JOIN trener e ON s.trener_num = e.num

Проверка:

INSERT INTO group_trener


VALUES
('child', 126, 'Valieeva', 'Anna Ivanovna', 89644558978)

Вставить данные в представление "group_trener" нельзя, т.к данные брались с 2 таблиц.

3. Представление "Количество текущих клиентов по видам занятий": вид занятий −


количество клиентов-мужчин – количество клиентов-женщин
Код:

CREATE VIEW client_training


AS SELECT f.group_name,
count(case when e.sex='ж' then 1 else null end) women,
count(case when e.sex='м' then 1 else null end) men
FROM fitness_club f, client e
WHERE e.group_name = f.group_name
GROUP BY f.group_name

Проверка:

DELETE FROM client_training


WHERE group_name = 'Брейк-данс'

Удалить из представления строку нельзя , т.к. представления с GROUP BY


необновляемые.

Тестирование
1. Представление "Тренеры, у которых нет занятий".

4
Рисунок 2 – Вывод первого представления

Рисунок 3 – Успешное обновление 1 представления

Представление получилось обновляемое, т.к в запросе использовалась 1 таблица и не


использовались никакие агрегатные функции.

2. Представление  "Тренеры групп": группа – тренер

Рисунок 4 – Вывод 2 представления

Рисунок 5 – Ошибка обновления представления

Вставить данные в представление "group_trener" нельзя, т.к данные брались с 2 таблиц.

3. Представление "Количество текущих клиентов по видам занятий": вид занятий −


количество клиентов-мужчин – количество клиентов-женщин.

Рисунок 6 – Вывод 3-го представления

5
Рисунок 7 – Ошибка обновления представления

Удалить из представления строку нельзя , т.к. представления с GROUP BY


необновляемые.

Список литературы

6
1. Документация по PostgreSQL и Postgres Pro [Электронный ресурс]. – URL:
https://postgrespro.ru/docs – (Дата обращения: 01.02.2023).
2. Карпова И.П. Базы данных. Курс лекций и материалы для практических
занятий. – Учебное пособие. – Издательство "Питер", 2013. – 240 с.

Вам также может понравиться