Загрузка данных


Билет №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. Краткое руководство пользователя
Руководство пользователя. Система бронирования отеля учитывает типы номеров, сами номера, гостей и брони. Заполните типы номеров и номера, зарегистрируйте гостей. Бронирование связывает номер, гостя и даты заезда/выезда. Дополнительные услуги привязываются к брони; их сумма считается запросом с группировкой.