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


Билет №19
Предметная область: Прокат автомобилей
Таблицы: автомобили, филиалы, клиенты, договоры аренды, страховые случаи.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Прокат автомобилей
CREATE TABLE branches (             -- филиалы
    branch_id INT PRIMARY KEY,
    name      VARCHAR(80) NOT NULL,
    city      VARCHAR(60) NOT NULL
);
CREATE TABLE cars (                 -- автомобили
    car_id    INT PRIMARY KEY,
    model     VARCHAR(80) NOT NULL,
    plate     VARCHAR(15) NOT NULL UNIQUE,
    branch_id INT NOT NULL,
    day_price DECIMAL(8,2) NOT NULL CHECK (day_price > 0),
    FOREIGN KEY (branch_id) REFERENCES branches(branch_id)
);
CREATE TABLE clients (              -- клиенты
    client_id INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    license_no VARCHAR(20) NOT NULL UNIQUE
);
CREATE TABLE rent_contracts (       -- договоры аренды
    contract_id INT PRIMARY KEY,
    car_id      INT NOT NULL,
    client_id   INT NOT NULL,
    start_date  DATE NOT NULL,
    days        INT NOT NULL CHECK (days > 0),
    FOREIGN KEY (car_id) REFERENCES cars(car_id),
    FOREIGN KEY (client_id) REFERENCES clients(client_id)
);
CREATE TABLE insurance_cases (      -- страховые случаи
    case_id     INT PRIMARY KEY,
    contract_id INT NOT NULL,
    description VARCHAR(200) NOT NULL,
    damage      DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (contract_id) REFERENCES rent_contracts(contract_id)
);
 
INSERT INTO branches VALUES
 (1,'Центральный','Вологда'),(2,'Северный','Вологда'),(3,'Привокзальный','Череповец'),
 (4,'Аэропорт','Москва'),(5,'Южный','Ярославль');
INSERT INTO cars VALUES
 (1,'Kia Rio','А001АА35',1,2500),
 (2,'Lada Vesta','В002ВВ35',1,2000),
 (3,'Hyundai Solaris','С003СС35',2,2400),
 (4,'Toyota Camry','Т004ТТ35',4,5000),
 (5,'Renault Logan','Р005РР35',3,2100);
INSERT INTO clients VALUES
 (1,'Антонов Лев','77 111111'),(2,'Белова Ия','77 222222'),
 (3,'Власов Ким','77 333333'),(4,'Гущин Ян','77 444444'),(5,'Дёмина Аня','77 555555');
INSERT INTO rent_contracts VALUES
 (1,1,1,'2025-03-01',5),(2,4,2,'2025-03-03',3),(3,2,3,'2025-03-05',7),
 (4,3,4,'2025-03-08',2),(5,5,5,'2025-03-10',4);
INSERT INTO insurance_cases VALUES
 (1,2,'Скол лобового стекла',8000),(2,3,'Царапина на двери',5000),
 (3,1,'Прокол колеса',2000);
 
-- Запросы
-- 1) Выборка с условием: автомобили дороже 2300 руб./сутки
SELECT model, day_price FROM cars WHERE day_price > 2300;
-- 2) Соединение: договор, автомобиль и клиент
SELECT rc.contract_id, c.model, cl.full_name, rc.days
FROM rent_contracts rc JOIN cars c ON rc.car_id = c.car_id
JOIN clients cl ON rc.client_id = cl.client_id;
-- 3) Группировка: количество машин в каждом филиале
SELECT b.name, COUNT(c.car_id) AS cars_cnt
FROM branches b LEFT JOIN cars c ON b.branch_id = c.branch_id
GROUP BY b.name;
-- 4) Подзапрос: договоры, по которым были страховые случаи
SELECT contract_id, days FROM rent_contracts
WHERE contract_id IN (SELECT contract_id FROM insurance_cases);
-- 5) Обновление: поднять суточную цену в филиале 'Аэропорт' на 10%
UPDATE cars SET day_price = day_price * 1.10
WHERE branch_id = (SELECT branch_id FROM branches WHERE name = 'Аэропорт');
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система проката автомобилей учитывает филиалы, машины, клиентов, договоры и страховые случаи. Заполните филиалы и автомобили, зарегистрируйте клиентов. Договор фиксирует машину, клиента и срок аренды; при ущербе оформляется страховой случай. Запрос с группировкой показывает парк по филиалам.
 
Билет №20
Предметная область: Ветеринарная клиника
Таблицы: владельцы, питомцы, ветеринары, приемы, вакцинации.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Ветеринарная клиника
CREATE TABLE owners (               -- владельцы
    owner_id  INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    phone     VARCHAR(20) NOT NULL
);
CREATE TABLE vets (                 -- ветеринары
    vet_id    INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    specialty VARCHAR(80) NOT NULL
);
CREATE TABLE pets (                 -- питомцы
    pet_id    INT PRIMARY KEY,
    name      VARCHAR(60) NOT NULL,
    species   VARCHAR(40) NOT NULL,
    owner_id  INT NOT NULL,
    birth_year INT,
    FOREIGN KEY (owner_id) REFERENCES owners(owner_id)
);
CREATE TABLE appointments (         -- приемы
    appt_id   INT PRIMARY KEY,
    pet_id    INT NOT NULL,
    vet_id    INT NOT NULL,
    appt_date DATE NOT NULL,
    reason    VARCHAR(150),
    FOREIGN KEY (pet_id) REFERENCES pets(pet_id),
    FOREIGN KEY (vet_id) REFERENCES vets(vet_id)
);
CREATE TABLE vaccinations (         -- вакцинации
    vacc_id   INT PRIMARY KEY,
    pet_id    INT NOT NULL,
    vaccine   VARCHAR(80) NOT NULL,
    vacc_date DATE NOT NULL,
    FOREIGN KEY (pet_id) REFERENCES pets(pet_id)
);
 
INSERT INTO owners VALUES
 (1,'Антонова Лена','+7906-001'),(2,'Белов Ким','+7906-002'),
 (3,'Власова Ия','+7906-003'),(4,'Гущин Ян','+7906-004'),(5,'Дёмин Лев','+7906-005');
INSERT INTO vets VALUES
 (1,'Егорова Зоя','терапевт'),(2,'Жуков Тим','хирург'),
 (3,'Зорина Аня','дерматолог'),(4,'Исаев Влад','стоматолог'),(5,'Котова Майя','офтальмолог');
INSERT INTO pets VALUES
 (1,'Барсик','кот',1,2020),(2,'Рекс','собака',2,2019),(3,'Кеша','попугай',3,2022),
 (4,'Мухтар','собака',4,2018),(5,'Мурка','кошка',5,2021);
INSERT INTO appointments VALUES
 (1,1,1,'2025-03-10','Прививка'),(2,2,2,'2025-03-11','Осмотр лапы'),
 (3,3,3,'2025-03-12','Перья'),(4,4,1,'2025-03-13','Профосмотр'),
 (5,1,4,'2025-03-15','Зубы');
INSERT INTO vaccinations VALUES
 (1,1,'Бешенство','2025-03-10'),(2,2,'Комплексная','2025-02-01'),
 (3,4,'Бешенство','2025-01-15'),(4,5,'Комплексная','2025-03-01'),
 (5,1,'Лептоспироз','2025-03-20');
 
-- Запросы
-- 1) Выборка с условием: питомцы-собаки
SELECT name, species FROM pets WHERE species = 'собака';
-- 2) Соединение: прием, питомец и ветеринар
SELECT a.appt_date, p.name AS pet, v.full_name AS vet, a.reason
FROM appointments a JOIN pets p ON a.pet_id = p.pet_id
JOIN vets v ON a.vet_id = v.vet_id;
-- 3) Группировка: число приемов по каждому ветеринару
SELECT v.full_name, COUNT(a.appt_id) AS appts
FROM vets v LEFT JOIN appointments a ON v.vet_id = a.vet_id
GROUP BY v.full_name;
-- 4) Подзапрос: питомцы, которым делали вакцинацию
SELECT name FROM pets WHERE pet_id IN (SELECT pet_id FROM vaccinations);
-- 5) Обновление: изменить причину приема appt_id=3
UPDATE appointments SET reason = 'Выпадение перьев' WHERE appt_id = 3;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система ветклиники учитывает владельцев, ветеринаров, питомцев, приемы и вакцинации. Зарегистрируйте владельцев и ветеринаров, заведите питомцев. Прием связывает питомца и врача, вакцинации фиксируются отдельно. Запрос с группировкой показывает нагрузку ветеринаров.
 
Билет №21
Предметная область: Продажа билетов на концерты и фестивали
Таблицы: площадки, мероприятия, артисты, зрители, проданные билеты.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Продажа билетов на концерты и фестивали
CREATE TABLE venues (               -- площадки
    venue_id INT PRIMARY KEY,
    name     VARCHAR(100) NOT NULL,
    city     VARCHAR(60) NOT NULL,
    capacity INT NOT NULL CHECK (capacity > 0)
);
CREATE TABLE artists (              -- артисты
    artist_id INT PRIMARY KEY,
    name      VARCHAR(100) NOT NULL,
    genre     VARCHAR(50) NOT NULL
);
CREATE TABLE events (               -- мероприятия
    event_id   INT PRIMARY KEY,
    name       VARCHAR(120) NOT NULL,
    venue_id   INT NOT NULL,
    artist_id  INT NOT NULL,
    event_date DATE NOT NULL,
    FOREIGN KEY (venue_id) REFERENCES venues(venue_id),
    FOREIGN KEY (artist_id) REFERENCES artists(artist_id)
);
CREATE TABLE spectators (           -- зрители
    spectator_id INT PRIMARY KEY,
    full_name    VARCHAR(120) NOT NULL,
    email        VARCHAR(100)
);
CREATE TABLE sold_tickets (         -- проданные билеты
    ticket_id    INT PRIMARY KEY,
    event_id     INT NOT NULL,
    spectator_id INT NOT NULL,
    price        DECIMAL(8,2) NOT NULL,
    FOREIGN KEY (event_id) REFERENCES events(event_id),
    FOREIGN KEY (spectator_id) REFERENCES spectators(spectator_id)
);
 
INSERT INTO venues VALUES
 (1,'Дворец спорта','Вологда',5000),(2,'Парк культуры','Череповец',3000),
 (3,'Концертный зал','Москва',1500),(4,'Стадион','Ярославль',20000),(5,'Клуб Drive','Вологда',800);
INSERT INTO artists VALUES
 (1,'Группа Север','рок'),(2,'DJ Pulse','электроника'),(3,'Хор Лира','классика'),
 (4,'Рэп-проект М','хип-хоп'),(5,'Джаз-бэнд','джаз');
INSERT INTO events VALUES
 (1,'Рок-фест 2025',1,1,'2025-05-10'),(2,'Электро-ночь',5,2,'2025-05-12'),
 (3,'Вечер классики',3,3,'2025-05-15'),(4,'Хип-хоп шоу',4,4,'2025-05-20'),
 (5,'Джаз в парке',2,5,'2025-05-22');
INSERT INTO spectators VALUES
 (1,'Антонов Ян','an@mail.ru'),(2,'Белова Ия','be@mail.ru'),
 (3,'Власов Лев','vl@mail.ru'),(4,'Гущина Аня','gu@mail.ru'),(5,'Дёмин Ким','de@mail.ru');
INSERT INTO sold_tickets VALUES
 (1,1,1,1500),(2,1,2,1500),(3,2,3,1200),(4,4,4,2000),(5,1,5,1800);
 
-- Запросы
-- 1) Выборка с условием: площадки вместимостью более 3000
SELECT name, capacity FROM venues WHERE capacity > 3000;
-- 2) Соединение: мероприятие, площадка и артист
SELECT e.name AS event, v.name AS venue, a.name AS artist, e.event_date
FROM events e JOIN venues v ON e.venue_id = v.venue_id
JOIN artists a ON e.artist_id = a.artist_id;
-- 3) Группировка: выручка по каждому мероприятию
SELECT e.name, SUM(st.price) AS revenue
FROM events e LEFT JOIN sold_tickets st ON e.event_id = st.event_id
GROUP BY e.name;
-- 4) Подзапрос: артисты, у которых есть мероприятия с проданными билетами
SELECT name FROM artists WHERE artist_id IN
 (SELECT artist_id FROM events WHERE event_id IN (SELECT event_id FROM sold_tickets));
-- 5) Обновление: поднять цену билетов на 'Рок-фест 2025' на 200 руб.
UPDATE sold_tickets SET price = price + 200
WHERE event_id = (SELECT event_id FROM events WHERE name = 'Рок-фест 2025');
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система продажи билетов на концерты и фестивали. Заполните площадки и артистов, создайте мероприятия. Зрители покупают билеты на мероприятия. Запрос с группировкой считает выручку по каждому мероприятию.
 
Билет №22
Предметная область: Салон красоты и парикмахерская
Таблицы: мастера, клиенты, услуги, записи на прием, чеки об оплате.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Салон красоты и парикмахерская
CREATE TABLE masters (              -- мастера
    master_id INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    position  VARCHAR(60) NOT NULL
);
CREATE TABLE services (             -- услуги
    service_id INT PRIMARY KEY,
    name       VARCHAR(80) NOT NULL,
    price      DECIMAL(8,2) NOT NULL CHECK (price > 0),
    duration   INT NOT NULL
);
CREATE TABLE clients (              -- клиенты
    client_id INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    phone     VARCHAR(20) NOT NULL
);
CREATE TABLE appointments (         -- записи на прием
    appt_id    INT PRIMARY KEY,
    client_id  INT NOT NULL,
    master_id  INT NOT NULL,
    service_id INT NOT NULL,
    appt_time  DATETIME NOT NULL,
    FOREIGN KEY (client_id) REFERENCES clients(client_id),
    FOREIGN KEY (master_id) REFERENCES masters(master_id),
    FOREIGN KEY (service_id) REFERENCES services(service_id)
);
CREATE TABLE receipts (             -- чеки об оплате
    receipt_id INT PRIMARY KEY,
    appt_id    INT NOT NULL,
    amount     DECIMAL(8,2) NOT NULL,
    pay_date   DATE NOT NULL,
    FOREIGN KEY (appt_id) REFERENCES appointments(appt_id)
);
 
INSERT INTO masters VALUES
 (1,'Антонова Лена','парикмахер'),(2,'Белова Ия','маникюрист'),
 (3,'Власова Зоя','косметолог'),(4,'Гущина Аня','визажист'),(5,'Дёмина Майя','парикмахер');
INSERT INTO services VALUES
 (1,'Стрижка женская',1200,60),(2,'Маникюр',900,90),(3,'Окрашивание',3000,120),
 (4,'Чистка лица',2000,80),(5,'Макияж',1500,60);
INSERT INTO clients VALUES
 (1,'Егорова Ника','+7907-001'),(2,'Жукова Роза','+7907-002'),
 (3,'Зорина Оля','+7907-003'),(4,'Исаева Вера','+7907-004'),(5,'Котова Инна','+7907-005');
INSERT INTO appointments VALUES
 (1,1,1,1,'2025-04-01 10:00'),(2,2,2,2,'2025-04-01 11:00'),
 (3,3,3,4,'2025-04-02 12:00'),(4,4,5,3,'2025-04-02 14:00'),(5,1,4,5,'2025-04-03 16:00');
INSERT INTO receipts VALUES
 (1,1,1200,'2025-04-01'),(2,2,900,'2025-04-01'),(3,3,2000,'2025-04-02'),
 (4,4,3000,'2025-04-02'),(5,5,1500,'2025-04-03');
 
-- Запросы
-- 1) Выборка с условием: услуги дороже 1500 руб.
SELECT name, price FROM services WHERE price > 1500;
-- 2) Соединение: запись, клиент, мастер и услуга
SELECT a.appt_time, cl.full_name AS client, m.full_name AS master, s.name AS service
FROM appointments a JOIN clients cl ON a.client_id = cl.client_id
JOIN masters m ON a.master_id = m.master_id
JOIN services s ON a.service_id = s.service_id;
-- 3) Группировка: выручка по каждому мастеру
SELECT m.full_name, SUM(r.amount) AS revenue
FROM masters m JOIN appointments a ON m.master_id = a.master_id
JOIN receipts r ON a.appt_id = r.appt_id
GROUP BY m.full_name;
-- 4) Подзапрос: услуги, которые хотя бы раз заказывали
SELECT name FROM services WHERE service_id IN (SELECT service_id FROM appointments);
-- 5) Обновление: поднять цену услуги 'Окрашивание' на 10%
UPDATE services SET price = price * 1.10 WHERE name = 'Окрашивание';
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система салона красоты учитывает мастеров, услуги, клиентов, записи и чеки. Заполните мастеров и услуги, зарегистрируйте клиентов. Запись связывает клиента, мастера и услугу; оплата фиксируется чеком. Запрос с группировкой считает выручку по мастерам.
 
Билет №23
Предметная область: Строительная компания и управление проектами
Таблицы: объекты строительства, прорабы, строительные материалы, сметы, этапы работ.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Строительная компания и управление проектами
CREATE TABLE objects_build (        -- объекты строительства
    object_id INT PRIMARY KEY,
    name      VARCHAR(120) NOT NULL,
    address   VARCHAR(150) NOT NULL,
    deadline  DATE NOT NULL
);
CREATE TABLE foremen (              -- прорабы
    foreman_id INT PRIMARY KEY,
    full_name  VARCHAR(120) NOT NULL,
    phone      VARCHAR(20) NOT NULL
);
CREATE TABLE materials (            -- строительные материалы
    material_id INT PRIMARY KEY,
    name        VARCHAR(80) NOT NULL,
    unit        VARCHAR(20) NOT NULL,
    price       DECIMAL(10,2) NOT NULL
);
CREATE TABLE estimates (            -- сметы
    estimate_id INT PRIMARY KEY,
    object_id   INT NOT NULL,
    material_id INT NOT NULL,
    qty         DECIMAL(10,2) NOT NULL CHECK (qty > 0),
    FOREIGN KEY (object_id) REFERENCES objects_build(object_id),
    FOREIGN KEY (material_id) REFERENCES materials(material_id)
);
CREATE TABLE work_stages (          -- этапы работ
    stage_id   INT PRIMARY KEY,
    object_id  INT NOT NULL,
    foreman_id INT NOT NULL,
    name       VARCHAR(100) NOT NULL,
    status     VARCHAR(30) NOT NULL DEFAULT 'план',
    FOREIGN KEY (object_id) REFERENCES objects_build(object_id),
    FOREIGN KEY (foreman_id) REFERENCES foremen(foreman_id)
);
 
INSERT INTO objects_build VALUES
 (1,'ЖК Радуга','ул. Ленина, 100','2026-06-01'),
 (2,'ТЦ Меридиан','пр. Победы, 50','2025-12-15'),
 (3,'Школа №5','ул. Школьная, 7','2026-08-30'),
 (4,'Мост','наб. Реки','2027-01-20'),
 (5,'Склад','промзона, 3','2025-09-10');
INSERT INTO foremen VALUES
 (1,'Антонов Лев','+7908-001'),(2,'Белов Ким','+7908-002'),
 (3,'Власов Ян','+7908-003'),(4,'Гущин Тим','+7908-004'),(5,'Дёмин Влад','+7908-005');
INSERT INTO materials VALUES
 (1,'Цемент М500','мешок',420),(2,'Кирпич','шт',18),(3,'Арматура 12мм','тонна',65000),
 (4,'Песок','тонна',900),(5,'Бетон М300','м3',4500);
INSERT INTO estimates VALUES
 (1,1,1,500),(2,1,3,12),(3,2,2,50000),(4,3,5,200),(5,4,3,40);
INSERT INTO work_stages VALUES
 (1,1,1,'Фундамент','выполнен'),(2,1,1,'Стены','в работе'),
 (3,2,2,'Каркас','план'),(4,3,3,'Кровля','план'),(5,4,4,'Опоры','в работе');
 
-- Запросы
-- 1) Выборка с условием: материалы дороже 1000 руб.
SELECT name, price FROM materials WHERE price > 1000;
-- 2) Соединение: смета — объект и материал с количеством
SELECT o.name AS object, m.name AS material, e.qty, m.unit
FROM estimates e JOIN objects_build o ON e.object_id = o.object_id
JOIN materials m ON e.material_id = m.material_id;
-- 3) Группировка: стоимость материалов по каждому объекту
SELECT o.name, SUM(m.price * e.qty) AS total_cost
FROM estimates e JOIN objects_build o ON e.object_id = o.object_id
JOIN materials m ON e.material_id = m.material_id
GROUP BY o.name;
-- 4) Подзапрос: объекты, по которым есть этапы в работе
SELECT name FROM objects_build WHERE object_id IN
 (SELECT object_id FROM work_stages WHERE status = 'в работе');
-- 5) Обновление: отметить этап stage_id=3 как 'в работе'
UPDATE work_stages SET status = 'в работе' WHERE stage_id = 3;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система строительной компании ведет объекты, прорабов, материалы, сметы и этапы работ. Заведите объекты и прорабов, справочник материалов. Смета связывает объект и материалы с количеством, этапы работ закрепляются за прорабом. Запрос с группировкой считает стоимость материалов по объектам.
 
Билет №24
Предметная область: Успеваемость учеников средней школы
Таблицы: классы, учителя, ученики, школьные предметы, журнал оценок.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Успеваемость учеников средней школы
CREATE TABLE classes (              -- классы
    class_id INT PRIMARY KEY,
    name     VARCHAR(10) NOT NULL UNIQUE,
    year_in  INT NOT NULL
);
CREATE TABLE teachers (             -- учителя
    teacher_id INT PRIMARY KEY,
    full_name  VARCHAR(120) NOT NULL,
    subject    VARCHAR(60) NOT NULL
);
CREATE TABLE subjects (             -- школьные предметы
    subject_id INT PRIMARY KEY,
    name       VARCHAR(60) NOT NULL UNIQUE,
    teacher_id INT NOT NULL,
    FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id)
);
CREATE TABLE pupils (               -- ученики
    pupil_id  INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    class_id  INT NOT NULL,
    FOREIGN KEY (class_id) REFERENCES classes(class_id)
);
CREATE TABLE grade_journal (        -- журнал оценок
    record_id  INT PRIMARY KEY,
    pupil_id   INT NOT NULL,
    subject_id INT NOT NULL,
    grade      INT NOT NULL CHECK (grade BETWEEN 2 AND 5),
    grade_date DATE NOT NULL,
    FOREIGN KEY (pupil_id) REFERENCES pupils(pupil_id),
    FOREIGN KEY (subject_id) REFERENCES subjects(subject_id)
);
 
INSERT INTO classes VALUES
 (1,'9А',2016),(2,'9Б',2016),(3,'10А',2015),(4,'11А',2014),(5,'8В',2017);
INSERT INTO teachers VALUES
 (1,'Антонова Лена','Математика'),(2,'Белов Ким','Физика'),
 (3,'Власова Зоя','Русский язык'),(4,'Гущин Ян','История'),(5,'Дёмина Аня','Информатика');
INSERT INTO subjects VALUES
 (1,'Математика',1),(2,'Физика',2),(3,'Русский язык',3),
 (4,'История',4),(5,'Информатика',5);
INSERT INTO pupils VALUES
 (1,'Егоров Тим',1),(2,'Жукова Ия',1),(3,'Зорин Лев',2),
 (4,'Исаева Аня',3),(5,'Котов Влад',4);
INSERT INTO grade_journal VALUES
 (1,1,1,5,'2025-03-01'),(2,1,2,4,'2025-03-02'),(3,2,1,3,'2025-03-01'),
 (4,3,5,5,'2025-03-03'),(5,4,3,4,'2025-03-04');
 
-- Запросы
-- 1) Выборка с условием: отличные оценки (5)
SELECT pupil_id, grade, grade_date FROM grade_journal WHERE grade = 5;
-- 2) Соединение: ученик, предмет и оценка
SELECT p.full_name, s.name AS subject, gj.grade
FROM grade_journal gj JOIN pupils p ON gj.pupil_id = p.pupil_id
JOIN subjects s ON gj.subject_id = s.subject_id;
-- 3) Группировка: средний балл по каждому ученику
SELECT p.full_name, AVG(gj.grade) AS avg_grade
FROM pupils p JOIN grade_journal gj ON p.pupil_id = gj.pupil_id
GROUP BY p.full_name;
-- 4) Подзапрос: ученики класса '9А'
SELECT full_name FROM pupils WHERE class_id =
 (SELECT class_id FROM classes WHERE name = '9А');
-- 5) Обновление: исправить оценку record_id=3 на 4
UPDATE grade_journal SET grade = 4 WHERE record_id = 3;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система учитывает успеваемость учеников школы. Заполните классы и учителей, закрепите предметы за учителями, внесите учеников по классам. Оценки заносятся в журнал. Запрос с группировкой считает средний балл по ученикам.