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