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


Билет №1
Предметная область: Успеваемость студентов ВУЗА
Таблицы: факультеты, кафедры, учебные группы, студенты, ведомости успеваемости.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Успеваемость студентов ВУЗА
-- Задание 1. Создание таблиц и отношений
CREATE TABLE faculties (            -- факультеты
    faculty_id   INT PRIMARY KEY,
    name         VARCHAR(100) NOT NULL UNIQUE,
    dean         VARCHAR(100) NOT NULL
);
CREATE TABLE chairs (               -- кафедры
    chair_id     INT PRIMARY KEY,
    name         VARCHAR(100) NOT NULL,
    faculty_id   INT NOT NULL,
    FOREIGN KEY (faculty_id) REFERENCES faculties(faculty_id)
);
CREATE TABLE groups_study (         -- учебные группы
    group_id     INT PRIMARY KEY,
    code         VARCHAR(20) NOT NULL UNIQUE,
    course       INT NOT NULL CHECK (course BETWEEN 1 AND 6),
    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,
    birth_date   DATE NOT NULL,
    group_id     INT NOT NULL,
    FOREIGN KEY (group_id) REFERENCES groups_study(group_id)
);
CREATE TABLE records_progress (     -- ведомости успеваемости
    record_id    INT PRIMARY KEY,
    student_id   INT NOT NULL,
    subject      VARCHAR(80) NOT NULL,
    grade        INT NOT NULL CHECK (grade BETWEEN 2 AND 5),
    exam_date    DATE NOT NULL,
    FOREIGN KEY (student_id) REFERENCES students(student_id)
);
 
-- Задание 2. Тестовые данные
INSERT INTO faculties VALUES
 (1,'Информационных технологий','Смирнов А.В.'),
 (2,'Экономический','Кузнецова Е.П.'),
 (3,'Юридический','Попов Д.С.'),
 (4,'Инженерный','Васильев И.Н.'),
 (5,'Гуманитарный','Морозова О.А.');
INSERT INTO chairs VALUES
 (1,'Программной инженерии',1),
 (2,'Сетевых технологий',1),
 (3,'Бухгалтерского учета',2),
 (4,'Гражданского права',3),
 (5,'Машиностроения',4);
INSERT INTO groups_study VALUES
 (1,'ПИ-21',2,1),
 (2,'ПИ-31',3,1),
 (3,'СТ-21',2,2),
 (4,'БУ-11',1,3),
 (5,'ГП-41',4,4);
INSERT INTO students VALUES
 (1,'Иванов Иван Иванович','2004-03-12',1),
 (2,'Петров Петр Петрович','2003-07-25',1),
 (3,'Сидорова Анна Олеговна','2004-01-30',2),
 (4,'Кузьмин Олег Игоревич','2002-11-05',3),
 (5,'Новикова Мария Сергеевна','2005-09-18',4);
INSERT INTO records_progress VALUES
 (1,1,'Базы данных',5,'2025-01-15'),
 (2,1,'Математика',4,'2025-01-20'),
 (3,2,'Базы данных',3,'2025-01-15'),
 (4,3,'Программирование',5,'2025-01-18'),
 (5,4,'Бухучет',4,'2025-01-22');
 
-- Задание 3. Запросы
-- 1) Простой запрос на выборку с условием: студенты, родившиеся после 2004 года
SELECT full_name, birth_date FROM students WHERE birth_date > '2004-01-01';
-- 2) Соединение таблиц: студент и его группа с факультетом
SELECT s.full_name, g.code, f.name AS faculty
FROM students s
JOIN groups_study g ON s.group_id = g.group_id
JOIN chairs c ON g.chair_id = c.chair_id
JOIN faculties f ON c.faculty_id = f.faculty_id;
-- 3) Группировка и агрегатная функция: средний балл по каждому студенту
SELECT s.full_name, AVG(r.grade) AS avg_grade
FROM students s JOIN records_progress r ON s.student_id = r.student_id
GROUP BY s.full_name;
-- 4) Подзапрос: студенты с баллом выше среднего по всем оценкам
SELECT DISTINCT s.full_name FROM students s
JOIN records_progress r ON s.student_id = r.student_id
WHERE r.grade > (SELECT AVG(grade) FROM records_progress);
-- 5) Обновление данных: исправить оценку 3 на 4 по предмету 'Базы данных'
UPDATE records_progress SET grade = 4 WHERE subject = 'Базы данных' AND grade = 3;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. База данных предназначена для учета успеваемости студентов ВУЗА. Сначала заполняются справочники: факультеты, затем кафедры (с указанием факультета), учебные группы (с указанием кафедры). После этого вносятся студенты с привязкой к группе и оценки в ведомости успеваемости. Для получения среднего балла используйте запрос с группировкой по студенту. Связи между таблицами защищены внешними ключами: нельзя добавить студента в несуществующую группу.
 
Билет №2
Предметная область: Информационная система супермаркета
Таблицы: отделы, сотрудники, товары, продажа товаров, должности.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система супермаркета
CREATE TABLE departments (          -- отделы
    dept_id   INT PRIMARY KEY,
    name      VARCHAR(80) NOT NULL UNIQUE,
    floor     INT NOT NULL
);
CREATE TABLE positions (            -- должности
    position_id INT PRIMARY KEY,
    title       VARCHAR(80) NOT NULL UNIQUE,
    salary      DECIMAL(10,2) NOT NULL CHECK (salary > 0)
);
CREATE TABLE employees (            -- сотрудники
    emp_id      INT PRIMARY KEY,
    full_name   VARCHAR(120) NOT NULL,
    dept_id     INT NOT NULL,
    position_id INT NOT NULL,
    hire_date   DATE NOT NULL,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id),
    FOREIGN KEY (position_id) REFERENCES positions(position_id)
);
CREATE TABLE goods (                -- товары
    goods_id   INT PRIMARY KEY,
    name       VARCHAR(100) NOT NULL,
    dept_id    INT NOT NULL,
    price      DECIMAL(10,2) NOT NULL CHECK (price > 0),
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
CREATE TABLE sales (                -- продажа товаров
    sale_id    INT PRIMARY KEY,
    goods_id   INT NOT NULL,
    emp_id     INT NOT NULL,
    qty        INT NOT NULL CHECK (qty > 0),
    sale_date  DATE NOT NULL,
    FOREIGN KEY (goods_id) REFERENCES goods(goods_id),
    FOREIGN KEY (emp_id) REFERENCES employees(emp_id)
);
 
INSERT INTO departments VALUES
 (1,'Продукты',1),(2,'Бытовая химия',1),(3,'Электроника',2),
 (4,'Одежда',2),(5,'Канцтовары',1);
INSERT INTO positions VALUES
 (1,'Кассир',35000),(2,'Продавец',32000),(3,'Менеджер',55000),
 (4,'Грузчик',30000),(5,'Администратор',60000);
INSERT INTO employees VALUES
 (1,'Орлов Сергей','2022-05-10',1,1,'2022-05-10'),
 (2,'Белова Ирина','2021-03-01',1,2,'2021-03-01'),
 (3,'Гусев Антон','2020-09-15',3,3,'2020-09-15'),
 (4,'Зайцев Роман','2023-01-20',2,4,'2023-01-20'),
 (5,'Лебедева Ольга','2019-11-11',4,5,'2019-11-11');
INSERT INTO goods VALUES
 (1,'Молоко 1л',1,75.50),(2,'Стиральный порошок',2,320.00),
 (3,'Наушники',3,1990.00),(4,'Футболка',4,890.00),(5,'Тетрадь 48л',5,45.00);
INSERT INTO sales VALUES
 (1,1,1,10,'2025-02-01'),(2,3,3,2,'2025-02-01'),
 (3,2,2,5,'2025-02-02'),(4,1,1,7,'2025-02-03'),(5,4,2,3,'2025-02-03');
 
-- Запросы
-- 1) Выборка с условием: товары дороже 500 руб.
SELECT name, price FROM goods WHERE price > 500;
-- 2) Соединение: какой сотрудник продал какой товар
SELECT e.full_name, g.name, s.qty
FROM sales s JOIN employees e ON s.emp_id = e.emp_id
JOIN goods g ON s.goods_id = g.goods_id;
-- 3) Группировка: суммарная выручка по каждому товару
SELECT g.name, SUM(g.price * s.qty) AS revenue
FROM goods g JOIN sales s ON g.goods_id = s.goods_id
GROUP BY g.name;
-- 4) Подзапрос: сотрудники на должностях с зарплатой выше средней
SELECT full_name FROM employees WHERE position_id IN
 (SELECT position_id FROM positions WHERE salary > (SELECT AVG(salary) FROM positions));
-- 5) Обновление: повысить цену товаров отдела 'Электроника' на 10%
UPDATE goods SET price = price * 1.10
WHERE dept_id = (SELECT dept_id FROM departments WHERE name = 'Электроника');
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система автоматизирует учет товаров, сотрудников и продаж супермаркета. Заполните справочники отделов и должностей, затем сотрудников и товары (с привязкой к отделу). Продажи фиксируются с указанием товара, кассира и количества. Отчет о выручке формируется запросом с группировкой по товару. Внешние ключи гарантируют целостность данных.
 
Билет №3
Предметная область: Информационная система военного округа
Таблицы: места дислокации, вид войск, части, роты, личный состав.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система военного округа
CREATE TABLE locations (            -- места дислокации
    location_id INT PRIMARY KEY,
    city        VARCHAR(80) NOT NULL,
    region      VARCHAR(80) NOT NULL
);
CREATE TABLE troop_types (          -- вид войск
    type_id     INT PRIMARY KEY,
    name        VARCHAR(80) NOT NULL UNIQUE
);
CREATE TABLE units (                -- части
    unit_id     INT PRIMARY KEY,
    number      VARCHAR(20) NOT NULL UNIQUE,
    type_id     INT NOT NULL,
    location_id INT NOT NULL,
    FOREIGN KEY (type_id) REFERENCES troop_types(type_id),
    FOREIGN KEY (location_id) REFERENCES locations(location_id)
);
CREATE TABLE companies_mil (        -- роты
    company_id  INT PRIMARY KEY,
    name        VARCHAR(50) NOT NULL,
    unit_id     INT NOT NULL,
    FOREIGN KEY (unit_id) REFERENCES units(unit_id)
);
CREATE TABLE personnel (            -- личный состав
    person_id   INT PRIMARY KEY,
    full_name   VARCHAR(120) NOT NULL,
    rank        VARCHAR(40) NOT NULL,
    company_id  INT NOT NULL,
    FOREIGN KEY (company_id) REFERENCES companies_mil(company_id)
);
 
INSERT INTO locations VALUES
 (1,'Вологда','Вологодская обл.'),(2,'Череповец','Вологодская обл.'),
 (3,'Псков','Псковская обл.'),(4,'Тверь','Тверская обл.'),(5,'Курск','Курская обл.');
INSERT INTO troop_types VALUES
 (1,'Мотострелковые'),(2,'Артиллерия'),(3,'Связь'),(4,'Инженерные'),(5,'ВДВ');
INSERT INTO units VALUES
 (1,'в/ч 12345',1,1),(2,'в/ч 23456',2,2),(3,'в/ч 34567',3,3),
 (4,'в/ч 45678',5,4),(5,'в/ч 56789',4,5);
INSERT INTO companies_mil VALUES
 (1,'1-я рота',1),(2,'2-я рота',1),(3,'1-я рота',2),
 (4,'1-я рота',4),(5,'3-я рота',3);
INSERT INTO personnel VALUES
 (1,'Громов Алексей','капитан',1),
 (2,'Соколов Дмитрий','сержант',1),
 (3,'Федоров Илья','лейтенант',3),
 (4,'Михайлов Юрий','рядовой',4),
 (5,'Тихонов Глеб','майор',5);
 
-- Запросы
-- 1) Выборка с условием: личный состав в звании 'майор'
SELECT full_name, rank FROM personnel WHERE rank = 'майор';
-- 2) Соединение: часть, вид войск и место дислокации
SELECT u.number, t.name AS troop_type, l.city
FROM units u JOIN troop_types t ON u.type_id = t.type_id
JOIN locations l ON u.location_id = l.location_id;
-- 3) Группировка: число военнослужащих в каждой роте
SELECT c.name, COUNT(p.person_id) AS soldiers
FROM companies_mil c LEFT JOIN personnel p ON c.company_id = p.company_id
GROUP BY c.name;
-- 4) Подзапрос: части, дислоцированные в Вологодской области
SELECT number FROM units WHERE location_id IN
 (SELECT location_id FROM locations WHERE region = 'Вологодская обл.');
-- 5) Обновление: присвоить рядовому person_id=4 звание 'ефрейтор'
UPDATE personnel SET rank = 'ефрейтор' WHERE person_id = 4;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. БД учитывает структуру военного округа: места дислокации, виды войск, части, роты и личный состав. Сначала вносятся места дислокации и виды войск, затем части (привязка к виду войск и месту), роты и личный состав. Запрос с группировкой показывает численность каждой роты. Целостность обеспечена внешними ключами.
 
Билет №4
Предметная область: Информационная система туристического агентства
Таблицы: пансионаты, туры, клиенты, путевки, вид жилья.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система туристического агентства
CREATE TABLE pensions (             -- пансионаты
    pension_id INT PRIMARY KEY,
    name       VARCHAR(100) NOT NULL,
    country    VARCHAR(60) NOT NULL,
    stars      INT CHECK (stars BETWEEN 1 AND 5)
);
CREATE TABLE housing_types (        -- вид жилья
    housing_id INT PRIMARY KEY,
    name       VARCHAR(60) NOT NULL UNIQUE
);
CREATE TABLE tours (                -- туры
    tour_id    INT PRIMARY KEY,
    name       VARCHAR(100) NOT NULL,
    pension_id INT NOT NULL,
    days       INT NOT NULL CHECK (days > 0),
    price      DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (pension_id) REFERENCES pensions(pension_id)
);
CREATE TABLE clients (              -- клиенты
    client_id  INT PRIMARY KEY,
    full_name  VARCHAR(120) NOT NULL,
    phone      VARCHAR(20) NOT NULL
);
CREATE TABLE vouchers (             -- путевки
    voucher_id INT PRIMARY KEY,
    tour_id    INT NOT NULL,
    client_id  INT NOT NULL,
    housing_id INT NOT NULL,
    buy_date   DATE NOT NULL,
    FOREIGN KEY (tour_id) REFERENCES tours(tour_id),
    FOREIGN KEY (client_id) REFERENCES clients(client_id),
    FOREIGN KEY (housing_id) REFERENCES housing_types(housing_id)
);
 
INSERT INTO pensions VALUES
 (1,'Солнечный берег','Турция',5),(2,'Морская звезда','Египет',4),
 (3,'Альпийский','Австрия',5),(4,'Лазурный','Греция',3),(5,'Прибой','Россия',4);
INSERT INTO housing_types VALUES
 (1,'Стандарт'),(2,'Люкс'),(3,'Полулюкс'),(4,'Апартаменты'),(5,'Семейный номер');
INSERT INTO tours VALUES
 (1,'Турция все включено',1,10,65000),(2,'Дайвинг в Египте',2,7,55000),
 (3,'Горные лыжи',3,12,120000),(4,'Острова Греции',4,9,70000),
 (5,'Черноморье',5,14,40000);
INSERT INTO clients VALUES
 (1,'Антонова Вера','+7900-111-22-33'),(2,'Борисов Глеб','+7900-222-33-44'),
 (3,'Власова Нина','+7900-333-44-55'),(4,'Гордеев Иван','+7900-444-55-66'),
 (5,'Дроздова Алла','+7900-555-66-77');
INSERT INTO vouchers VALUES
 (1,1,1,2,'2025-03-01'),(2,3,2,1,'2025-03-02'),
 (3,1,3,5,'2025-03-05'),(4,5,4,1,'2025-03-06'),(5,4,5,3,'2025-03-07');
 
-- Запросы
-- 1) Выборка с условием: туры дороже 60000 руб.
SELECT name, price FROM tours WHERE price > 60000;
-- 2) Соединение: клиент, его тур и вид жилья
SELECT cl.full_name, t.name AS tour, h.name AS housing
FROM vouchers v JOIN clients cl ON v.client_id = cl.client_id
JOIN tours t ON v.tour_id = t.tour_id
JOIN housing_types h ON v.housing_id = h.housing_id;
-- 3) Группировка: число проданных путевок по каждому туру
SELECT t.name, COUNT(v.voucher_id) AS sold
FROM tours t LEFT JOIN vouchers v ON t.tour_id = v.tour_id
GROUP BY t.name;
-- 4) Подзапрос: туры в пансионатах 5 звезд
SELECT name FROM tours WHERE pension_id IN
 (SELECT pension_id FROM pensions WHERE stars = 5);
-- 5) Обновление: скидка 5% на тур 'Черноморье'
UPDATE tours SET price = price * 0.95 WHERE name = 'Черноморье';
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система предназначена для работы турагентства. Заполняются справочники пансионатов и видов жилья, формируются туры, регистрируются клиенты. Продажа оформляется как путевка (тур + клиент + вид жилья). Запрос с группировкой показывает популярность туров по количеству проданных путевок.
 
Билет №5
Предметная область: Информационная система автопредприятия города
Таблицы: автотранспорт, водители, маршруты, обслуживающий персонал, гаражное хозяйство.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система автопредприятия города
CREATE TABLE garages (              -- гаражное хозяйство
    garage_id  INT PRIMARY KEY,
    name       VARCHAR(80) NOT NULL,
    address    VARCHAR(120) NOT NULL,
    capacity   INT NOT NULL CHECK (capacity > 0)
);
CREATE TABLE vehicles (             -- автотранспорт
    vehicle_id INT PRIMARY KEY,
    plate      VARCHAR(15) NOT NULL UNIQUE,
    model      VARCHAR(60) NOT NULL,
    garage_id  INT NOT NULL,
    FOREIGN KEY (garage_id) REFERENCES garages(garage_id)
);
CREATE TABLE drivers (              -- водители
    driver_id  INT PRIMARY KEY,
    full_name  VARCHAR(120) NOT NULL,
    category   VARCHAR(10) NOT NULL,
    experience INT NOT NULL CHECK (experience >= 0)
);
CREATE TABLE routes (               -- маршруты
    route_id   INT PRIMARY KEY,
    number     VARCHAR(10) NOT NULL,
    vehicle_id INT NOT NULL,
    driver_id  INT NOT NULL,
    length_km  DECIMAL(6,1) NOT NULL,
    FOREIGN KEY (vehicle_id) REFERENCES vehicles(vehicle_id),
    FOREIGN KEY (driver_id) REFERENCES drivers(driver_id)
);
CREATE TABLE service_staff (        -- обслуживающий персонал
    staff_id   INT PRIMARY KEY,
    full_name  VARCHAR(120) NOT NULL,
    job        VARCHAR(60) NOT NULL,
    garage_id  INT NOT NULL,
    FOREIGN KEY (garage_id) REFERENCES garages(garage_id)
);
 
INSERT INTO garages VALUES
 (1,'Гараж №1','ул. Заводская, 5',50),(2,'Гараж №2','ул. Северная, 12',30),
 (3,'Гараж №3','пр. Победы, 40',40),(4,'Гараж №4','ул. Мира, 8',25),
 (5,'Гараж №5','ул. Гагарина, 3',60);
INSERT INTO vehicles VALUES
 (1,'А123ВС35','ЛиАЗ-5292',1),(2,'В234СК35','ПАЗ-3204',1),
 (3,'Е345МН35','МАЗ-203',2),(4,'К456ОР35','НефАЗ-5299',3),(5,'М567ТУ35','ЛиАЗ-4292',5);
INSERT INTO drivers VALUES
 (1,'Карпов Олег','D',12),(2,'Лосев Игорь','D',8),(3,'Мухин Артем','D',20),
 (4,'Носов Вадим','D',3),(5,'Орехов Семен','D',15);
INSERT INTO routes VALUES
 (1,'5',1,1,18.5),(2,'12',2,2,22.0),(3,'7',3,3,15.0),
 (4,'3',4,4,30.5),(5,'9',5,5,12.0);
INSERT INTO service_staff VALUES
 (1,'Панов Кирилл','механик',1),(2,'Репин Денис','слесарь',1),
 (3,'Седов Павел','электрик',2),(4,'Титов Марк','мойщик',3),
 (5,'Уваров Лев','механик',5);
 
-- Запросы
-- 1) Выборка с условием: водители со стажем более 10 лет
SELECT full_name, experience FROM drivers WHERE experience > 10;
-- 2) Соединение: маршрут, автобус и водитель
SELECT r.number, v.model, d.full_name
FROM routes r JOIN vehicles v ON r.vehicle_id = v.vehicle_id
JOIN drivers d ON r.driver_id = d.driver_id;
-- 3) Группировка: количество машин в каждом гараже
SELECT g.name, COUNT(v.vehicle_id) AS cars
FROM garages g LEFT JOIN vehicles v ON g.garage_id = v.garage_id
GROUP BY g.name;
-- 4) Подзапрос: водители, обслуживающие маршруты длиннее средней длины
SELECT full_name FROM drivers WHERE driver_id IN
 (SELECT driver_id FROM routes WHERE length_km > (SELECT AVG(length_km) FROM routes));
-- 5) Обновление: увеличить стаж всех водителей на 1 год
UPDATE drivers SET experience = experience + 1;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. БД автопредприятия учитывает гаражи, транспорт, водителей, маршруты и обслуживающий персонал. Сначала заводятся гаражи, затем транспорт и персонал (с привязкой к гаражу), водители и маршруты. Запрос с группировкой показывает загрузку гаражей. Внешние ключи не позволяют закрепить транспорт за несуществующим гаражом.
 
Билет №6
Предметная область: Информационная система поликлиники
Таблицы: врачи, пациенты, история болезней, отделения, обслуживающий персонал.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Информационная система поликлиники
CREATE TABLE divisions (            -- отделения
    division_id INT PRIMARY KEY,
    name        VARCHAR(80) NOT NULL UNIQUE,
    floor       INT NOT NULL
);
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,
    birth_date  DATE NOT NULL,
    policy      VARCHAR(20) NOT NULL UNIQUE
);
CREATE TABLE service_staff (        -- обслуживающий персонал
    staff_id    INT PRIMARY KEY,
    full_name   VARCHAR(120) NOT NULL,
    job         VARCHAR(60) NOT NULL,
    division_id INT NOT NULL,
    FOREIGN KEY (division_id) REFERENCES divisions(division_id)
);
CREATE TABLE case_history (         -- история болезней
    case_id     INT PRIMARY KEY,
    patient_id  INT NOT NULL,
    doctor_id   INT NOT NULL,
    diagnosis   VARCHAR(120) NOT NULL,
    visit_date  DATE NOT NULL,
    FOREIGN KEY (patient_id) REFERENCES patients(patient_id),
    FOREIGN KEY (doctor_id) REFERENCES doctors(doctor_id)
);
 
INSERT INTO divisions VALUES
 (1,'Терапия',1),(2,'Хирургия',2),(3,'Кардиология',3),
 (4,'Неврология',2),(5,'Офтальмология',1);
INSERT INTO doctors VALUES
 (1,'Авдеев Роман','терапевт',1),(2,'Беляев Олег','хирург',2),
 (3,'Власов Игорь','кардиолог',3),(4,'Громова Анна','невролог',4),
 (5,'Дубова Елена','офтальмолог',5);
INSERT INTO patients VALUES
 (1,'Зимин Артур','1990-04-10','POL0000001'),
 (2,'Иванова Лидия','1985-12-22','POL0000002'),
 (3,'Котов Денис','2000-06-15','POL0000003'),
 (4,'Леонова Вера','1978-09-30','POL0000004'),
 (5,'Минин Сергей','1995-01-05','POL0000005');
INSERT INTO service_staff VALUES
 (1,'Орлова Тамара','медсестра',1),(2,'Попова Раиса','медсестра',2),
 (3,'Рыков Глеб','санитар',3),(4,'Седова Инна','регистратор',1),
 (5,'Тихая Юлия','медсестра',5);
INSERT INTO case_history VALUES
 (1,1,1,'ОРВИ','2025-02-10'),(2,2,3,'Гипертония','2025-02-11'),
 (3,3,2,'Аппендицит','2025-02-12'),(4,4,4,'Мигрень','2025-02-13'),
 (5,1,1,'Бронхит','2025-03-01');
 
-- Запросы
-- 1) Выборка с условием: пациенты, родившиеся раньше 1990 года
SELECT full_name, birth_date FROM patients WHERE birth_date < '1990-01-01';
-- 2) Соединение: пациент, врач и диагноз
SELECT p.full_name AS patient, d.full_name AS doctor, ch.diagnosis
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 d.full_name, COUNT(ch.case_id) AS visits
FROM doctors d LEFT JOIN case_history ch ON d.doctor_id = ch.doctor_id
GROUP BY d.full_name;
-- 4) Подзапрос: врачи отделения 'Терапия'
SELECT full_name FROM doctors WHERE division_id =
 (SELECT division_id FROM divisions WHERE name = 'Терапия');
-- 5) Обновление: перевести врача doctor_id=1 в отделение 'Кардиология'
UPDATE doctors SET division_id =
 (SELECT division_id FROM divisions WHERE name = 'Кардиология') WHERE doctor_id = 1;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система поликлиники ведет учет отделений, врачей, пациентов, персонала и истории болезней. Заполните отделения, затем врачей и персонал (с привязкой к отделению) и пациентов. Каждый прием регистрируется в истории болезней. Запрос с группировкой показывает нагрузку на вр