Загрузка данных
Билет №7
Предметная область: Информационная система больницы
Таблицы: врачи, пациенты, история болезней, операции, лист лечения.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система больницы
CREATE TABLE doctors ( -- врачи
doctor_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
specialty VARCHAR(80) NOT NULL
);
CREATE TABLE patients ( -- пациенты
patient_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
ward INT NOT NULL
);
CREATE TABLE case_history ( -- история болезней
case_id INT PRIMARY KEY,
patient_id INT NOT NULL,
doctor_id INT NOT NULL,
diagnosis VARCHAR(120) NOT NULL,
admit_date DATE NOT NULL,
FOREIGN KEY (patient_id) REFERENCES patients(patient_id),
FOREIGN KEY (doctor_id) REFERENCES doctors(doctor_id)
);
CREATE TABLE operations ( -- операции
operation_id INT PRIMARY KEY,
case_id INT NOT NULL,
name VARCHAR(120) NOT NULL,
op_date DATE NOT NULL,
FOREIGN KEY (case_id) REFERENCES case_history(case_id)
);
CREATE TABLE treatment_list ( -- лист лечения
item_id INT PRIMARY KEY,
case_id INT NOT NULL,
medicine VARCHAR(100) NOT NULL,
dosage VARCHAR(40) NOT NULL,
FOREIGN KEY (case_id) REFERENCES case_history(case_id)
);
INSERT INTO doctors VALUES
(1,'Аникин Борис','хирург'),(2,'Власова Дина','терапевт'),
(3,'Гущин Олег','кардиолог'),(4,'Денисов Юрий','травматолог'),
(5,'Егорова Нина','анестезиолог');
INSERT INTO patients VALUES
(1,'Жуков Тимур',101),(2,'Зотова Алла',102),(3,'Карин Влад',103),
(4,'Лукин Петр',101),(5,'Мокеева Вера',104);
INSERT INTO case_history VALUES
(1,1,1,'Перелом руки','2025-02-01'),(2,2,3,'Стенокардия','2025-02-03'),
(3,3,1,'Аппендицит','2025-02-05'),(4,4,4,'Травма колена','2025-02-07'),
(5,5,2,'Пневмония','2025-02-09');
INSERT INTO operations VALUES
(1,1,'Остеосинтез','2025-02-02'),(2,3,'Аппендэктомия','2025-02-06'),
(3,4,'Артроскопия','2025-02-08'),(4,3,'Перевязка','2025-02-09'),
(5,1,'Снятие гипса','2025-03-01');
INSERT INTO treatment_list VALUES
(1,2,'Аспирин','100 мг/сут'),(2,5,'Амоксициллин','500 мг x3'),
(3,1,'Кеторол','30 мг'),(4,3,'Цефтриаксон','1 г x2'),(5,4,'Найз','100 мг');
-- Запросы
-- 1) Выборка с условием: пациенты палаты 101
SELECT full_name, ward FROM patients WHERE ward = 101;
-- 2) Соединение: пациент, диагноз и оперирующий врач
SELECT p.full_name, ch.diagnosis, d.full_name AS doctor
FROM case_history ch JOIN patients p ON ch.patient_id = p.patient_id
JOIN doctors d ON ch.doctor_id = d.doctor_id;
-- 3) Группировка: число операций по каждой истории болезни
SELECT ch.diagnosis, COUNT(o.operation_id) AS ops
FROM case_history ch LEFT JOIN operations o ON ch.case_id = o.case_id
GROUP BY ch.diagnosis;
-- 4) Подзапрос: пациенты, которым проводились операции
SELECT full_name FROM patients WHERE patient_id IN
(SELECT patient_id FROM case_history WHERE case_id IN (SELECT case_id FROM operations));
-- 5) Обновление: перевести пациента patient_id=2 в палату 105
UPDATE patients SET ward = 105 WHERE patient_id = 2;
Задание 4. Краткое руководство пользователя
Руководство пользователя. БД больницы хранит врачей, пациентов, истории болезней, операции и листы лечения. Сначала вносятся врачи и пациенты, затем заводится история болезни, к которой привязываются операции и назначения. Запрос с группировкой подсчитывает число операций по каждому случаю.
Билет №8
Предметная область: Информационная система библиотек города
Таблицы: библиотеки, читальные залы, литература, читатели, выдача литературы.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система библиотек города
CREATE TABLE libraries ( -- библиотеки
library_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
address VARCHAR(120) NOT NULL
);
CREATE TABLE reading_halls ( -- читальные залы
hall_id INT PRIMARY KEY,
name VARCHAR(80) NOT NULL,
library_id INT NOT NULL,
seats INT NOT NULL CHECK (seats > 0),
FOREIGN KEY (library_id) REFERENCES libraries(library_id)
);
CREATE TABLE books ( -- литература
book_id INT PRIMARY KEY,
title VARCHAR(150) NOT NULL,
author VARCHAR(100) NOT NULL,
library_id INT NOT NULL,
year_pub INT,
FOREIGN KEY (library_id) REFERENCES libraries(library_id)
);
CREATE TABLE readers ( -- читатели
reader_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
card_no VARCHAR(20) NOT NULL UNIQUE
);
CREATE TABLE loans ( -- выдача литературы
loan_id INT PRIMARY KEY,
book_id INT NOT NULL,
reader_id INT NOT NULL,
loan_date DATE NOT NULL,
return_date DATE,
FOREIGN KEY (book_id) REFERENCES books(book_id),
FOREIGN KEY (reader_id) REFERENCES readers(reader_id)
);
INSERT INTO libraries VALUES
(1,'Центральная','ул. Ленина, 1'),(2,'Юношеская','ул. Мира, 14'),
(3,'Техническая','пр. Победы, 7'),(4,'Детская','ул. Садовая, 22'),
(5,'Научная','ул. Пушкина, 9');
INSERT INTO reading_halls VALUES
(1,'Общий зал',1,50),(2,'Периодика',1,20),(3,'Зал техники',3,30),
(4,'Детский зал',4,25),(5,'Научный зал',5,40);
INSERT INTO books VALUES
(1,'Война и мир','Толстой Л.Н.',1,1869),(2,'Базы данных','Дейт К.',3,2005),
(3,'Сказки','Пушкин А.С.',4,1990),(4,'Алгоритмы','Кормен Т.',5,2013),
(5,'Преступление и наказание','Достоевский Ф.М.',1,1866);
INSERT INTO readers VALUES
(1,'Абрамов Иван','RD0001'),(2,'Бортова Ольга','RD0002'),
(3,'Веселов Глеб','RD0003'),(4,'Громова Яна','RD0004'),(5,'Дятлов Роман','RD0005');
INSERT INTO loans VALUES
(1,1,1,'2025-02-01','2025-02-15'),(2,2,2,'2025-02-03',NULL),
(3,4,3,'2025-02-05','2025-02-20'),(4,1,4,'2025-02-10',NULL),
(5,5,1,'2025-02-12',NULL);
-- Запросы
-- 1) Выборка с условием: книги, изданные после 2000 года
SELECT title, year_pub FROM books WHERE year_pub > 2000;
-- 2) Соединение: читатель и взятые им книги
SELECT r.full_name, b.title, l.loan_date
FROM loans l JOIN readers r ON l.reader_id = r.reader_id
JOIN books b ON l.book_id = b.book_id;
-- 3) Группировка: количество книг в каждой библиотеке
SELECT lib.name, COUNT(b.book_id) AS books_cnt
FROM libraries lib LEFT JOIN books b ON lib.library_id = b.library_id
GROUP BY lib.name;
-- 4) Подзапрос: читатели, не вернувшие книги
SELECT full_name FROM readers WHERE reader_id IN
(SELECT reader_id FROM loans WHERE return_date IS NULL);
-- 5) Обновление: отметить возврат книги по выдаче loan_id=2
UPDATE loans SET return_date = '2025-03-01' WHERE loan_id = 2;
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система объединяет библиотеки города. Заполняются библиотеки, их читальные залы и фонд литературы, регистрируются читатели. Выдача книги фиксируется записью в таблице выдачи; при возврате проставляется дата возврата. Запрос с подзапросом выводит должников (книги без даты возврата).
Билет №9
Предметная область: Успеваемость студентов кафедры
Таблицы: кафедры, дисциплины, преподаватели, студенты, ведомости успеваемости.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Успеваемость студентов кафедры
CREATE TABLE chairs ( -- кафедры
chair_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
head VARCHAR(100) NOT NULL
);
CREATE TABLE disciplines ( -- дисциплины
discipline_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
hours INT NOT NULL CHECK (hours > 0),
chair_id INT NOT NULL,
FOREIGN KEY (chair_id) REFERENCES chairs(chair_id)
);
CREATE TABLE teachers ( -- преподаватели
teacher_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
degree VARCHAR(60),
chair_id INT NOT NULL,
FOREIGN KEY (chair_id) REFERENCES chairs(chair_id)
);
CREATE TABLE students ( -- студенты
student_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
group_code VARCHAR(20) NOT NULL
);
CREATE TABLE records_progress ( -- ведомости успеваемости
record_id INT PRIMARY KEY,
student_id INT NOT NULL,
discipline_id INT NOT NULL,
teacher_id INT NOT NULL,
grade INT NOT NULL CHECK (grade BETWEEN 2 AND 5),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (discipline_id) REFERENCES disciplines(discipline_id),
FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id)
);
INSERT INTO chairs VALUES
(1,'Информатики','Смирнов А.В.'),(2,'Математики','Кузнецов Б.П.'),
(3,'Физики','Попова Е.С.'),(4,'Экономики','Орлов Д.И.'),(5,'Лингвистики','Белова Н.К.');
INSERT INTO disciplines VALUES
(1,'Базы данных',144,1),(2,'Программирование',180,1),
(3,'Высшая математика',160,2),(4,'Физика',120,3),(5,'Экономика',90,4);
INSERT INTO teachers VALUES
(1,'Авдеева Мария','к.т.н.',1),(2,'Борисов Олег','д.ф-м.н.',2),
(3,'Власов Иван','к.ф-м.н.',3),(4,'Гусева Раиса','доцент',1),
(5,'Дронов Петр','к.э.н.',4);
INSERT INTO students VALUES
(1,'Зуев Артем','ПИ-21'),(2,'Ильина Оля','ПИ-21'),(3,'Котов Влад','ПИ-31'),
(4,'Лосева Яна','ИВТ-21'),(5,'Мельник Дан','ИВТ-21');
INSERT INTO records_progress VALUES
(1,1,1,1,5),(2,1,3,2,4),(3,2,1,1,3),(4,3,2,4,5),(5,4,4,3,4);
-- Запросы
-- 1) Выборка с условием: дисциплины объемом более 140 часов
SELECT name, hours FROM disciplines WHERE hours > 140;
-- 2) Соединение: студент, дисциплина и преподаватель
SELECT s.full_name, d.name AS discipline, t.full_name AS teacher, r.grade
FROM records_progress r JOIN students s ON r.student_id = s.student_id
JOIN disciplines d ON r.discipline_id = d.discipline_id
JOIN teachers t ON r.teacher_id = t.teacher_id;
-- 3) Группировка: средний балл по каждой дисциплине
SELECT d.name, AVG(r.grade) AS avg_grade
FROM disciplines d JOIN records_progress r ON d.discipline_id = r.discipline_id
GROUP BY d.name;
-- 4) Подзапрос: преподаватели кафедры 'Информатики'
SELECT full_name FROM teachers WHERE chair_id =
(SELECT chair_id FROM chairs WHERE name = 'Информатики');
-- 5) Обновление: пересдача — поднять оценку 3 до 4 по дисциплине 'Базы данных'
UPDATE records_progress SET grade = 4
WHERE grade = 3 AND discipline_id = (SELECT discipline_id FROM disciplines WHERE name='Базы данных');
Задание 4. Краткое руководство пользователя
Руководство пользователя. БД учитывает успеваемость студентов кафедры. Заполняются кафедры, дисциплины и преподаватели (привязка к кафедре), студенты. Оценки заносятся в ведомость с указанием студента, дисциплины и преподавателя. Запрос с группировкой считает средний балл по дисциплинам.
Билет №10
Предметная область: Интернет-магазин электроники
Таблицы: категории товаров, товары, покупатели, заказы, составы заказов.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Интернет-магазин электроники
CREATE TABLE categories ( -- категории товаров
category_id INT PRIMARY KEY,
name VARCHAR(80) NOT NULL UNIQUE
);
CREATE TABLE goods ( -- товары
goods_id INT PRIMARY KEY,
name VARCHAR(120) NOT NULL,
category_id INT NOT NULL,
price DECIMAL(10,2) NOT NULL CHECK (price > 0),
stock INT NOT NULL DEFAULT 0,
FOREIGN KEY (category_id) REFERENCES categories(category_id)
);
CREATE TABLE customers ( -- покупатели
customer_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE orders ( -- заказы
order_id INT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
status VARCHAR(30) NOT NULL DEFAULT 'новый',
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
CREATE TABLE order_items ( -- составы заказов
item_id INT PRIMARY KEY,
order_id INT NOT NULL,
goods_id INT NOT NULL,
qty INT NOT NULL CHECK (qty > 0),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (goods_id) REFERENCES goods(goods_id)
);
INSERT INTO categories VALUES
(1,'Смартфоны'),(2,'Ноутбуки'),(3,'Наушники'),(4,'Телевизоры'),(5,'Аксессуары');
INSERT INTO goods VALUES
(1,'Смартфон Galaxy A55',1,32990,15),(2,'Ноутбук Aspire 5',2,54990,8),
(3,'Наушники AirBuds',3,4990,40),(4,'Телевизор LED 50"',4,39990,5),
(5,'Чехол силиконовый',5,590,100);
INSERT INTO customers VALUES
(1,'Антонов Илья','anton@mail.ru'),(2,'Белкина Юля','belka@mail.ru'),
(3,'Власов Рома','vlasov@mail.ru'),(4,'Гордеева Аня','goran@mail.ru'),
(5,'Дёмин Олег','demin@mail.ru');
INSERT INTO orders VALUES
(1,1,'2025-03-01','доставлен'),(2,2,'2025-03-02','новый'),
(3,1,'2025-03-05','в пути'),(4,3,'2025-03-06','новый'),(5,4,'2025-03-07','доставлен');
INSERT INTO order_items VALUES
(1,1,1,1),(2,1,5,2),(3,2,3,1),(4,3,2,1),(5,5,4,1);
-- Запросы
-- 1) Выборка с условием: товары дешевле 10000 руб.
SELECT name, price FROM goods WHERE price < 10000;
-- 2) Соединение: заказ, покупатель и товары
SELECT o.order_id, c.full_name, g.name, oi.qty
FROM order_items oi JOIN orders o ON oi.order_id = o.order_id
JOIN customers c ON o.customer_id = c.customer_id
JOIN goods g ON oi.goods_id = g.goods_id;
-- 3) Группировка: сумма каждого заказа
SELECT o.order_id, SUM(g.price * oi.qty) AS total
FROM orders o JOIN order_items oi ON o.order_id = oi.order_id
JOIN goods g ON oi.goods_id = g.goods_id
GROUP BY o.order_id;
-- 4) Подзапрос: товары категории 'Смартфоны'
SELECT name FROM goods WHERE category_id =
(SELECT category_id FROM categories WHERE name = 'Смартфоны');
-- 5) Обновление: пометить заказ order_id=2 как 'отменен'
UPDATE orders SET status = 'отменен' WHERE order_id = 2;
Задание 4. Краткое руководство пользователя
Руководство пользователя. Интернет-магазин электроники ведет каталог по категориям, учет покупателей и заказов. Заполните категории и товары, зарегистрируйте покупателей. Заказ состоит из позиций (товар + количество). Сумма заказа вычисляется запросом с группировкой по заказу. Статус заказа изменяется операцией UPDATE.
Билет №11
Предметная область: Поликлиника и расписание приемов
Таблицы: отделения, врачи, пациенты, талоны на прием, медицинские заключения.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Поликлиника и расписание приемов
CREATE TABLE divisions ( -- отделения
division_id INT PRIMARY KEY,
name VARCHAR(80) NOT NULL UNIQUE
);
CREATE TABLE doctors ( -- врачи
doctor_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
specialty VARCHAR(80) NOT NULL,
division_id INT NOT NULL,
FOREIGN KEY (division_id) REFERENCES divisions(division_id)
);
CREATE TABLE patients ( -- пациенты
patient_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
phone VARCHAR(20) NOT NULL
);
CREATE TABLE tickets ( -- талоны на прием
ticket_id INT PRIMARY KEY,
doctor_id INT NOT NULL,
patient_id INT NOT NULL,
visit_time DATETIME NOT NULL,
FOREIGN KEY (doctor_id) REFERENCES doctors(doctor_id),
FOREIGN KEY (patient_id) REFERENCES patients(patient_id)
);
CREATE TABLE conclusions ( -- медицинские заключения
conclusion_id INT PRIMARY KEY,
ticket_id INT NOT NULL,
diagnosis VARCHAR(150) NOT NULL,
recommendation VARCHAR(200),
FOREIGN KEY (ticket_id) REFERENCES tickets(ticket_id)
);
INSERT INTO divisions VALUES
(1,'Терапия'),(2,'Хирургия'),(3,'Лор'),(4,'Кардиология'),(5,'Неврология');
INSERT INTO doctors VALUES
(1,'Архипов Лев','терапевт',1),(2,'Быков Олег','хирург',2),
(3,'Власова Ева','лор',3),(4,'Гущин Иван','кардиолог',4),
(5,'Дёмина Зоя','невролог',5);
INSERT INTO patients VALUES
(1,'Емельянов Тимур','+7901-001'),(2,'Жигалова Инна','+7901-002'),
(3,'Зорин Глеб','+7901-003'),(4,'Исаева Лена','+7901-004'),(5,'Климов Ян','+7901-005');
INSERT INTO tickets VALUES
(1,1,1,'2025-03-10 09:00'),(2,1,2,'2025-03-10 09:30'),
(3,4,3,'2025-03-10 10:00'),(4,2,4,'2025-03-11 11:00'),(5,5,5,'2025-03-11 12:00');
INSERT INTO conclusions VALUES
(1,1,'ОРВI','Постельный режим'),(2,3,'Аритмия','ЭКГ-контроль'),
(3,4,'Грыжа','Плановая операция'),(4,5,'Невралгия','Физиотерапия'),
(5,2,'Здоров','Без рекомендаций');
-- Запросы
-- 1) Выборка с условием: талоны на 10 марта 2025
SELECT ticket_id, visit_time FROM tickets WHERE visit_time >= '2025-03-10 00:00' AND visit_time < '2025-03-11 00:00';
-- 2) Соединение: пациент, врач и время приема
SELECT p.full_name AS patient, d.full_name AS doctor, t.visit_time
FROM tickets t JOIN patients p ON t.patient_id = p.patient_id
JOIN doctors d ON t.doctor_id = d.doctor_id;
-- 3) Группировка: число талонов у каждого врача
SELECT d.full_name, COUNT(t.ticket_id) AS tickets_cnt
FROM doctors d LEFT JOIN tickets t ON d.doctor_id = t.doctor_id
GROUP BY d.full_name;
-- 4) Подзапрос: пациенты, у которых есть медицинское заключение
SELECT full_name FROM patients WHERE patient_id IN
(SELECT patient_id FROM tickets WHERE ticket_id IN (SELECT ticket_id FROM conclusions));
-- 5) Обновление: перенести талон ticket_id=2 на другое время
UPDATE tickets SET visit_time = '2025-03-12 14:00' WHERE ticket_id = 2;
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система ведет расписание приемов поликлиники. Заполняются отделения и врачи, регистрируются пациенты. На прием выдается талон (врач + пациент + время). По итогу приема оформляется медицинское заключение. Запрос с группировкой показывает загруженность врачей.
Билет №12
Предметная область: Бронирование номеров в отеле
Таблицы: типы номеров, номера, гости, бронирования, дополнительные услуги.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Бронирование номеров в отеле
CREATE TABLE room_types ( -- типы номеров
type_id INT PRIMARY KEY,
name VARCHAR(60) NOT NULL UNIQUE,
price DECIMAL(10,2) NOT NULL CHECK (price > 0)
);
CREATE TABLE rooms ( -- номера
room_id INT PRIMARY KEY,
number VARCHAR(10) NOT NULL UNIQUE,
type_id INT NOT NULL,
floor INT NOT NULL,
FOREIGN KEY (type_id) REFERENCES room_types(type_id)
);
CREATE TABLE guests ( -- гости
guest_id INT PRIMARY KEY,
full_name VARCHAR(120) NOT NULL,
passport VARCHAR(20) NOT NULL UNIQUE
);
CREATE TABLE bookings ( -- бронирования
booking_id INT PRIMARY KEY,
room_id INT NOT NULL,
guest_id INT NOT NULL,
check_in DATE NOT NULL,
check_out DATE NOT NULL,
FOREIGN KEY (room_id) REFERENCES rooms(room_id),
FOREIGN KEY (guest_id) REFERENCES guests(guest_id)
);
CREATE TABLE extra_services ( -- дополнительные услуги
service_id INT PRIMARY KEY,
booking_id INT NOT NULL,
name VARCHAR(80) NOT NULL,
cost DECIMAL(10,2) NOT NULL,
FOREIGN KEY (booking_id) REFERENCES bookings(booking_id)
);
INSERT INTO room_types VALUES
(1,'Стандарт',3500),(2,'Полулюкс',5500),(3,'Люкс',9000),
(4,'Семейный',7000),(5,'Одноместный',2800);
INSERT INTO rooms VALUES
(1,'101',1,1),(2,'102',1,1),(3,'201',3,2),(4,'202',2,2),(5,'301',4,3);
INSERT INTO guests VALUES
(1,'Аксенов Петр','4011 111111'),(2,'Богданова Ия','4011 222222'),
(3,'Воронов Лев','4011 333333'),(4,'Гладких Ульяна','4011 444444'),
(5,'Дроздов Семён','4011 555555');
INSERT INTO bookings VALUES
(1,1,1,'2025-04-01','2025-04-05'),(2,3,2,'2025-04-02','2025-04-04'),
(3,5,3,'2025-04-03','2025-04-10'),(4,4,4,'2025-04-05','2025-04-07'),
(5,1,5,'2025-04-10','2025-04-12');
INSERT INTO extra_services VALUES
(1,1,'Завтрак',600),(2,2,'Трансфер',1500),(3,3,'СПА',2500),
(4,1,'Парковка',400),(5,4,'Завтрак',600);
-- Запросы
-- 1) Выборка с условием: типы номеров дороже 5000 руб.
SELECT name, price FROM room_types WHERE price > 5000;
-- 2) Соединение: бронь, гость и номер
SELECT b.booking_id, g.full_name, r.number, b.check_in, b.check_out
FROM bookings b JOIN guests g ON b.guest_id = g.guest_id
JOIN rooms r ON b.room_id = r.room_id;
-- 3) Группировка: сумма доп. услуг по каждому бронированию
SELECT booking_id, SUM(cost) AS extra_total
FROM extra_services GROUP BY booking_id;
-- 4) Подзапрос: номера типа 'Люкс'
SELECT number FROM rooms WHERE type_id =
(SELECT type_id FROM room_types WHERE name = 'Люкс');
-- 5) Обновление: продлить бронь booking_id=2 до 06.04.2025
UPDATE bookings SET check_out = '2025-04-06' WHERE booking_id = 2;
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система бронирования отеля учитывает типы номеров, сами номера, гостей и брони. Заполните типы номеров и номера, зарегистрируйте гостей. Бронирование связывает номер, гостя и даты заезда/выезда. Дополнительные услуги привязываются к брони; их сумма считается запросом с группировкой.