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


Билет №25
Предметная область: Автосалон и продажа автомобилей
Таблицы: автомобили, поставщики, клиенты, договоры купли-продажи, дополнительное оборудование.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Автосалон и продажа автомобилей
CREATE TABLE suppliers (            -- поставщики
    supplier_id INT PRIMARY KEY,
    name        VARCHAR(100) NOT NULL,
    country     VARCHAR(60) NOT NULL
);
CREATE TABLE cars (                 -- автомобили
    car_id      INT PRIMARY KEY,
    model       VARCHAR(80) NOT NULL,
    supplier_id INT NOT NULL,
    price       DECIMAL(12,2) NOT NULL CHECK (price > 0),
    year_make   INT NOT NULL,
    FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id)
);
CREATE TABLE clients (              -- клиенты
    client_id INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    phone     VARCHAR(20) NOT NULL
);
CREATE TABLE contracts (            -- договоры купли-продажи
    contract_id INT PRIMARY KEY,
    car_id      INT NOT NULL,
    client_id   INT NOT NULL,
    deal_date   DATE NOT NULL,
    deal_price  DECIMAL(12,2) NOT NULL,
    FOREIGN KEY (car_id) REFERENCES cars(car_id),
    FOREIGN KEY (client_id) REFERENCES clients(client_id)
);
CREATE TABLE extra_equipment (      -- дополнительное оборудование
    equip_id    INT PRIMARY KEY,
    contract_id INT NOT NULL,
    name        VARCHAR(80) NOT NULL,
    cost        DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (contract_id) REFERENCES contracts(contract_id)
);
 
INSERT INTO suppliers VALUES
 (1,'AutoImport','Германия'),(2,'KoreaCars','Корея'),(3,'JapanMotors','Япония'),
 (4,'LadaTrade','Россия'),(5,'EuroCar','Чехия');
INSERT INTO cars VALUES
 (1,'BMW X5',1,6500000,2024),(2,'Kia Sportage',2,3200000,2024),
 (3,'Toyota RAV4',3,3800000,2023),(4,'Lada Vesta',4,1600000,2024),
 (5,'Skoda Octavia',5,2900000,2023);
INSERT INTO clients VALUES
 (1,'Антонов Лев','+7909-001'),(2,'Белова Ия','+7909-002'),
 (3,'Власов Ким','+7909-003'),(4,'Гущин Ян','+7909-004'),(5,'Дёмина Аня','+7909-005');
INSERT INTO contracts VALUES
 (1,1,1,'2025-03-01',6500000),(2,4,2,'2025-03-05',1600000),
 (3,2,3,'2025-03-08',3150000),(4,3,4,'2025-03-10',3800000),(5,5,5,'2025-03-12',2850000);
INSERT INTO extra_equipment VALUES
 (1,1,'Зимняя резина',60000),(2,1,'Сигнализация',25000),(3,3,'Коврики',8000),
 (4,4,'Защита картера',12000),(5,2,'Тонировка',9000);
 
-- Запросы
-- 1) Выборка с условием: автомобили дороже 3000000 руб.
SELECT model, price FROM cars WHERE price > 3000000;
-- 2) Соединение: договор, автомобиль и клиент
SELECT ct.contract_id, c.model, cl.full_name, ct.deal_price
FROM contracts ct JOIN cars c ON ct.car_id = c.car_id
JOIN clients cl ON ct.client_id = cl.client_id;
-- 3) Группировка: число проданных машин по каждому поставщику
SELECT s.name, COUNT(ct.contract_id) AS sold
FROM suppliers s JOIN cars c ON s.supplier_id = c.supplier_id
JOIN contracts ct ON c.car_id = ct.car_id
GROUP BY s.name;
-- 4) Подзапрос: автомобили поставщиков из России
SELECT model FROM cars WHERE supplier_id IN
 (SELECT supplier_id FROM suppliers WHERE country = 'Россия');
-- 5) Обновление: сделать скидку 3% по договору contract_id=3
UPDATE contracts SET deal_price = deal_price * 0.97 WHERE contract_id = 3;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система автосалона учитывает поставщиков, автомобили, клиентов, договоры и доп. оборудование. Заполните поставщиков и автомобили, зарегистрируйте клиентов. Договор фиксирует продажу машины клиенту; доп. оборудование привязывается к договору. Запрос с группировкой показывает продажи по поставщикам.
 
Билет №26
Предметная область: Киностудия и производство фильмов
Таблицы: фильмы, актеры, режиссеры, съемочные группы, роли.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Киностудия и производство фильмов
CREATE TABLE directors (            -- режиссеры
    director_id INT PRIMARY KEY,
    full_name   VARCHAR(120) NOT NULL,
    country     VARCHAR(60) NOT NULL
);
CREATE TABLE films (                -- фильмы
    film_id     INT PRIMARY KEY,
    title       VARCHAR(120) NOT NULL,
    director_id INT NOT NULL,
    year_make   INT NOT NULL,
    budget      DECIMAL(14,2) NOT NULL,
    FOREIGN KEY (director_id) REFERENCES directors(director_id)
);
CREATE TABLE actors (               -- актеры
    actor_id  INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    birth_year INT
);
CREATE TABLE crews (                -- съемочные группы
    crew_id INT PRIMARY KEY,
    film_id INT NOT NULL,
    name    VARCHAR(80) NOT NULL,
    members INT NOT NULL CHECK (members > 0),
    FOREIGN KEY (film_id) REFERENCES films(film_id)
);
CREATE TABLE roles (                -- роли
    role_id   INT PRIMARY KEY,
    film_id   INT NOT NULL,
    actor_id  INT NOT NULL,
    character_name VARCHAR(100) NOT NULL,
    FOREIGN KEY (film_id) REFERENCES films(film_id),
    FOREIGN KEY (actor_id) REFERENCES actors(actor_id)
);
 
INSERT INTO directors VALUES
 (1,'Антонов Лев','Россия'),(2,'Белов Ким','США'),(3,'Власов Ян','Франция'),
 (4,'Гущин Тим','Россия'),(5,'Дёмин Влад','Италия');
INSERT INTO films VALUES
 (1,'Северный ветер',1,2024,50000000),(2,'Город огней',2,2023,120000000),
 (3,'Тайна реки',3,2024,30000000),(4,'Грань',4,2025,45000000),(5,'Рассвет',5,2023,60000000);
INSERT INTO actors VALUES
 (1,'Егоров Тим',1985),(2,'Жукова Ия',1990),(3,'Зорин Лев',1978),
 (4,'Исаева Аня',1995),(5,'Котов Влад',1982);
INSERT INTO crews VALUES
 (1,1,'Операторская',8),(2,1,'Гримеры',4),(3,2,'Каскадеры',12),
 (4,3,'Звукорежиссеры',5),(5,4,'Декораторы',6);
INSERT INTO roles VALUES
 (1,1,1,'Капитан'),(2,1,2,'Журналистка'),(3,2,3,'Детектив'),
 (4,3,4,'Учительница'),(5,4,5,'Инженер');
 
-- Запросы
-- 1) Выборка с условием: фильмы с бюджетом более 50 млн
SELECT title, budget FROM films WHERE budget > 50000000;
-- 2) Соединение: фильм, режиссер и актер с ролью
SELECT f.title, d.full_name AS director, a.full_name AS actor, r.character_name
FROM roles r JOIN films f ON r.film_id = f.film_id
JOIN directors d ON f.director_id = d.director_id
JOIN actors a ON r.actor_id = a.actor_id;
-- 3) Группировка: число съемочных групп по каждому фильму
SELECT f.title, COUNT(c.crew_id) AS crews_cnt
FROM films f LEFT JOIN crews c ON f.film_id = c.film_id
GROUP BY f.title;
-- 4) Подзапрос: фильмы режиссеров из России
SELECT title FROM films WHERE director_id IN
 (SELECT director_id FROM directors WHERE country = 'Россия');
-- 5) Обновление: увеличить бюджет фильма 'Грань' на 5 млн
UPDATE films SET budget = budget + 5000000 WHERE title = 'Грань';
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система киностудии учитывает режиссеров, фильмы, актеров, съемочные группы и роли. Заполните режиссеров и фильмы, внесите актеров. Роли связывают актера и фильм, съемочные группы закрепляются за фильмом. Запрос с группировкой считает число групп по фильмам.
 
Билет №27
Предметная область: Банковские счета и операции
Таблицы: клиенты, счета, банковские карты, операции, отделения.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Банковские счета и операции
CREATE TABLE branches (             -- отделения
    branch_id INT PRIMARY KEY,
    name      VARCHAR(80) NOT NULL,
    city      VARCHAR(60) NOT NULL
);
CREATE TABLE clients (              -- клиенты
    client_id INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    passport  VARCHAR(20) NOT NULL UNIQUE
);
CREATE TABLE accounts (             -- счета
    account_id INT PRIMARY KEY,
    client_id  INT NOT NULL,
    branch_id  INT NOT NULL,
    number     VARCHAR(20) NOT NULL UNIQUE,
    balance    DECIMAL(14,2) NOT NULL DEFAULT 0,
    FOREIGN KEY (client_id) REFERENCES clients(client_id),
    FOREIGN KEY (branch_id) REFERENCES branches(branch_id)
);
CREATE TABLE cards (                -- банковские карты
    card_id    INT PRIMARY KEY,
    account_id INT NOT NULL,
    number     VARCHAR(20) NOT NULL UNIQUE,
    expiry     DATE NOT NULL,
    FOREIGN KEY (account_id) REFERENCES accounts(account_id)
);
CREATE TABLE operations (           -- операции
    operation_id INT PRIMARY KEY,
    account_id   INT NOT NULL,
    op_type      VARCHAR(20) NOT NULL,
    amount       DECIMAL(14,2) NOT NULL,
    op_date      DATE NOT NULL,
    FOREIGN KEY (account_id) REFERENCES accounts(account_id)
);
 
INSERT INTO branches VALUES
 (1,'Отделение №1','Вологда'),(2,'Отделение №2','Череповец'),
 (3,'Отделение №3','Москва'),(4,'Отделение №4','Ярославль'),(5,'Отделение №5','Тверь');
INSERT INTO clients VALUES
 (1,'Антонов Лев','40 111111'),(2,'Белова Ия','40 222222'),
 (3,'Власов Ким','40 333333'),(4,'Гущин Ян','40 444444'),(5,'Дёмина Аня','40 555555');
INSERT INTO accounts VALUES
 (1,1,1,'40817810001',150000),(2,2,1,'40817810002',50000),
 (3,3,2,'40817810003',320000),(4,4,3,'40817810004',8000),(5,5,1,'40817810005',95000);
INSERT INTO cards VALUES
 (1,1,'2200000000000001','2027-05-31'),(2,2,'2200000000000002','2026-08-31'),
 (3,3,'2200000000000003','2028-01-31'),(4,4,'2200000000000004','2026-12-31'),
 (5,5,'2200000000000005','2027-03-31');
INSERT INTO operations VALUES
 (1,1,'пополнение',50000,'2025-03-01'),(2,1,'списание',12000,'2025-03-02'),
 (3,3,'списание',20000,'2025-03-03'),(4,2,'пополнение',30000,'2025-03-04'),
 (5,5,'списание',5000,'2025-03-05');
 
-- Запросы
-- 1) Выборка с условием: счета с балансом более 100000 руб.
SELECT number, balance FROM accounts WHERE balance > 100000;
-- 2) Соединение: счет, клиент и отделение
SELECT a.number, cl.full_name, b.name AS branch, a.balance
FROM accounts a JOIN clients cl ON a.client_id = cl.client_id
JOIN branches b ON a.branch_id = b.branch_id;
-- 3) Группировка: сумма операций по типу
SELECT op_type, SUM(amount) AS total FROM operations GROUP BY op_type;
-- 4) Подзапрос: клиенты, имеющие счета в отделении 'Отделение №1'
SELECT full_name FROM clients WHERE client_id IN
 (SELECT client_id FROM accounts WHERE branch_id =
   (SELECT branch_id FROM branches WHERE name = 'Отделение №1'));
-- 5) Обновление: начислить 5% на счета с балансом свыше 100000
UPDATE accounts SET balance = balance * 1.05 WHERE balance > 100000;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Банковская система учитывает отделения, клиентов, счета, карты и операции. Заполните отделения и клиентов, откройте счета (привязка к клиенту и отделению), выпустите карты. Операции по счету меняют баланс. Запрос с группировкой суммирует операции по типу.
 
Билет №28
Предметная область: Система технической поддержки и обработки заявок
Таблицы: пользователи, инженеры поддержки, заявки, корпоративное оборудование, категории проблем.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Система технической поддержки и обработки заявок
CREATE TABLE problem_categories (   -- категории проблем
    category_id INT PRIMARY KEY,
    name        VARCHAR(80) NOT NULL UNIQUE
);
CREATE TABLE users_sys (            -- пользователи
    user_id   INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    email     VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE engineers (            -- инженеры поддержки
    engineer_id INT PRIMARY KEY,
    full_name   VARCHAR(120) NOT NULL,
    grade       VARCHAR(30) NOT NULL
);
CREATE TABLE equipment (            -- корпоративное оборудование
    equip_id INT PRIMARY KEY,
    name     VARCHAR(80) NOT NULL,
    inv_no   VARCHAR(20) NOT NULL UNIQUE,
    user_id  INT NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users_sys(user_id)
);
CREATE TABLE tickets (              -- заявки
    ticket_id   INT PRIMARY KEY,
    user_id     INT NOT NULL,
    engineer_id INT NOT NULL,
    category_id INT NOT NULL,
    created     DATE NOT NULL,
    status      VARCHAR(30) NOT NULL DEFAULT 'открыта',
    FOREIGN KEY (user_id) REFERENCES users_sys(user_id),
    FOREIGN KEY (engineer_id) REFERENCES engineers(engineer_id),
    FOREIGN KEY (category_id) REFERENCES problem_categories(category_id)
);
 
INSERT INTO problem_categories VALUES
 (1,'Сеть'),(2,'ПО'),(3,'Оборудование'),(4,'Доступ'),(5,'Печать');
INSERT INTO users_sys VALUES
 (1,'Антонов Лев','an@corp.ru'),(2,'Белова Ия','be@corp.ru'),
 (3,'Власов Ким','vl@corp.ru'),(4,'Гущин Ян','gu@corp.ru'),(5,'Дёмина Аня','de@corp.ru');
INSERT INTO engineers VALUES
 (1,'Егоров Тим','senior'),(2,'Жуков Лев','junior'),(3,'Зорин Влад','middle'),
 (4,'Исаев Ян','senior'),(5,'Котова Майя','middle');
INSERT INTO equipment VALUES
 (1,'Ноутбук Dell','INV001',1),(2,'Принтер HP','INV002',2),
 (3,'Монитор LG','INV003',3),(4,'ПК офисный','INV004',4),(5,'МФУ Canon','INV005',5);
INSERT INTO tickets VALUES
 (1,1,1,2,'2025-03-01','закрыта'),(2,2,2,5,'2025-03-02','открыта'),
 (3,3,3,1,'2025-03-03','в работе'),(4,4,1,4,'2025-03-04','открыта'),
 (5,1,4,3,'2025-03-05','закрыта');
 
-- Запросы
-- 1) Выборка с условием: открытые заявки
SELECT ticket_id, created FROM tickets WHERE status = 'открыта';
-- 2) Соединение: заявка, пользователь и инженер
SELECT t.ticket_id, u.full_name AS user, e.full_name AS engineer, t.status
FROM tickets t JOIN users_sys u ON t.user_id = u.user_id
JOIN engineers e ON t.engineer_id = e.engineer_id;
-- 3) Группировка: число заявок по каждой категории
SELECT pc.name, COUNT(t.ticket_id) AS tickets_cnt
FROM problem_categories pc LEFT JOIN tickets t ON pc.category_id = t.category_id
GROUP BY pc.name;
-- 4) Подзапрос: инженеры, на которых назначены заявки
SELECT full_name FROM engineers WHERE engineer_id IN (SELECT engineer_id FROM tickets);
-- 5) Обновление: закрыть заявку ticket_id=3
UPDATE tickets SET status = 'закрыта' WHERE ticket_id = 3;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система техподдержки учитывает пользователей, инженеров, оборудование, категории проблем и заявки. Заполните категории, пользователей и инженеров, закрепите оборудование за пользователями. Заявка связывает пользователя, инженера и категорию. Запрос с группировкой показывает структуру обращений.
 
Билет №29
Предметная область: Учет в сельскохозяйственном предприятии
Таблицы: поля, культуры, сотрудники, сельскохозяйственная техника, сбор урожая.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Учет в сельскохозяйственном предприятии
CREATE TABLE fields (               -- поля
    field_id INT PRIMARY KEY,
    name     VARCHAR(80) NOT NULL,
    area     DECIMAL(8,2) NOT NULL CHECK (area > 0)
);
CREATE TABLE crops (                -- культуры
    crop_id INT PRIMARY KEY,
    name    VARCHAR(60) NOT NULL UNIQUE,
    season  VARCHAR(20) NOT NULL
);
CREATE TABLE employees (            -- сотрудники
    emp_id    INT PRIMARY KEY,
    full_name VARCHAR(120) NOT NULL,
    position  VARCHAR(60) NOT NULL
);
CREATE TABLE machinery (            -- сельскохозяйственная техника
    machine_id INT PRIMARY KEY,
    name       VARCHAR(80) NOT NULL,
    type       VARCHAR(40) NOT NULL
);
CREATE TABLE harvest (              -- сбор урожая
    harvest_id INT PRIMARY KEY,
    field_id   INT NOT NULL,
    crop_id    INT NOT NULL,
    machine_id INT NOT NULL,
    amount_t   DECIMAL(10,2) NOT NULL CHECK (amount_t > 0),
    harvest_date DATE NOT NULL,
    FOREIGN KEY (field_id) REFERENCES fields(field_id),
    FOREIGN KEY (crop_id) REFERENCES crops(crop_id),
    FOREIGN KEY (machine_id) REFERENCES machinery(machine_id)
);
 
INSERT INTO fields VALUES
 (1,'Северное',120.5),(2,'Южное',98.0),(3,'Заречное',150.0),
 (4,'Луговое',75.5),(5,'Дальнее',200.0);
INSERT INTO crops VALUES
 (1,'Пшеница','лето'),(2,'Картофель','осень'),(3,'Кукуруза','лето'),
 (4,'Ячмень','лето'),(5,'Подсолнечник','осень');
INSERT INTO employees VALUES
 (1,'Антонов Лев','агроном'),(2,'Белов Ким','комбайнер'),
 (3,'Власов Ян','тракторист'),(4,'Гущин Тим','механик'),(5,'Дёмин Влад','бригадир');
INSERT INTO machinery VALUES
 (1,'Комбайн Acros','комбайн'),(2,'Трактор МТЗ','трактор'),(3,'Сеялка СЗ','сеялка'),
 (4,'Комбайн Дон','комбайн'),(5,'Опрыскиватель','опрыскиватель');
INSERT INTO harvest VALUES
 (1,1,1,1,360.0,'2025-08-10'),(2,2,2,2,250.0,'2025-09-15'),
 (3,3,3,4,420.0,'2025-08-20'),(4,4,4,1,180.0,'2025-08-25'),(5,5,5,4,300.0,'2025-09-30');
 
-- Запросы
-- 1) Выборка с условием: поля площадью более 100 га
SELECT name, area FROM fields WHERE area > 100;
-- 2) Соединение: сбор — поле, культура и техника
SELECT f.name AS field, cr.name AS crop, m.name AS machine, h.amount_t
FROM harvest h JOIN fields f ON h.field_id = f.field_id
JOIN crops cr ON h.crop_id = cr.crop_id
JOIN machinery m ON h.machine_id = m.machine_id;
-- 3) Группировка: суммарный сбор по каждой культуре
SELECT cr.name, SUM(h.amount_t) AS total_t
FROM crops cr JOIN harvest h ON cr.crop_id = h.crop_id
GROUP BY cr.name;
-- 4) Подзапрос: культуры, собранные комбайнами
SELECT name FROM crops WHERE crop_id IN
 (SELECT crop_id FROM harvest WHERE machine_id IN
   (SELECT machine_id FROM machinery WHERE type = 'комбайн'));
-- 5) Обновление: скорректировать сбор harvest_id=4 до 200 т
UPDATE harvest SET amount_t = 200.0 WHERE harvest_id = 4;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Система учета сельхозпредприятия ведет поля, культуры, сотрудников, технику и сбор урожая. Заполните справочники полей, культур, техники и сотрудников. Сбор урожая связывает поле, культуру и технику. Запрос с группировкой считает валовой сбор по культурам.
 
Билет №30
Предметная область: Портал поиска работы и подбор персонала
Таблицы: соискатели, работодатели, вакансии, резюме, отклики на вакансии.
Решение (SQL-скрипт: создание таблиц, тестовые данные, запросы)
-- Предметная область: Портал поиска работы и подбор персонала
CREATE TABLE employers (            -- работодатели
    employer_id INT PRIMARY KEY,
    name        VARCHAR(120) NOT NULL,
    industry    VARCHAR(60) NOT NULL
);
CREATE TABLE applicants (           -- соискатели
    applicant_id INT PRIMARY KEY,
    full_name    VARCHAR(120) NOT NULL,
    email        VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE vacancies (            -- вакансии
    vacancy_id  INT PRIMARY KEY,
    title       VARCHAR(120) NOT NULL,
    employer_id INT NOT NULL,
    salary      DECIMAL(10,2) NOT NULL CHECK (salary > 0),
    FOREIGN KEY (employer_id) REFERENCES employers(employer_id)
);
CREATE TABLE resumes (              -- резюме
    resume_id    INT PRIMARY KEY,
    applicant_id INT NOT NULL,
    position     VARCHAR(120) NOT NULL,
    experience   INT NOT NULL CHECK (experience >= 0),
    FOREIGN KEY (applicant_id) REFERENCES applicants(applicant_id)
);
CREATE TABLE responses (            -- отклики на вакансии
    response_id INT PRIMARY KEY,
    vacancy_id  INT NOT NULL,
    resume_id   INT NOT NULL,
    resp_date   DATE NOT NULL,
    status      VARCHAR(30) NOT NULL DEFAULT 'отправлен',
    FOREIGN KEY (vacancy_id) REFERENCES vacancies(vacancy_id),
    FOREIGN KEY (resume_id) REFERENCES resumes(resume_id)
);
 
INSERT INTO employers VALUES
 (1,'ТехноСофт','IT'),(2,'СтройГрад','строительство'),(3,'МедЦентр','медицина'),
 (4,'ФинБанк','финансы'),(5,'ЭкоФерма','сельское хозяйство');
INSERT INTO applicants VALUES
 (1,'Антонов Лев','an@job.ru'),(2,'Белова Ия','be@job.ru'),
 (3,'Власов Ким','vl@job.ru'),(4,'Гущин Ян','gu@job.ru'),(5,'Дёмина Аня','de@job.ru');
INSERT INTO vacancies VALUES
 (1,'Программист',1,120000),(2,'Прораб',2,90000),(3,'Медсестра',3,55000),
 (4,'Аналитик',4,110000),(5,'Агроном',5,70000);
INSERT INTO resumes VALUES
 (1,1,'Программист',5),(2,2,'Бухгалтер',8),(3,3,'Медсестра',3),
 (4,4,'Аналитик',2),(5,5,'Программист',1);
INSERT INTO responses VALUES
 (1,1,1,'2025-03-01','приглашен'),(2,3,3,'2025-03-02','отправлен'),
 (3,4,4,'2025-03-03','отказ'),(4,1,5,'2025-03-04','отправлен'),(5,2,2,'2025-03-05','приглашен');
 
-- Запросы
-- 1) Выборка с условием: вакансии с зарплатой выше 100000 руб.
SELECT title, salary FROM vacancies WHERE salary > 100000;
-- 2) Соединение: отклик — вакансия и соискатель
SELECT r.response_id, v.title AS vacancy, a.full_name AS applicant, r.status
FROM responses r JOIN vacancies v ON r.vacancy_id = v.vacancy_id
JOIN resumes rs ON r.resume_id = rs.resume_id
JOIN applicants a ON rs.applicant_id = a.applicant_id;
-- 3) Группировка: число откликов на каждую вакансию
SELECT v.title, COUNT(r.response_id) AS responses_cnt
FROM vacancies v LEFT JOIN responses r ON v.vacancy_id = r.vacancy_id
GROUP BY v.title;
-- 4) Подзапрос: вакансии работодателей отрасли 'IT'
SELECT title FROM vacancies WHERE employer_id IN
 (SELECT employer_id FROM employers WHERE industry = 'IT');
-- 5) Обновление: пригласить соискателя по отклику response_id=2
UPDATE responses SET status = 'приглашен' WHERE response_id = 2;
 
Задание 4. Краткое руководство пользователя
Руководство пользователя. Портал поиска работы учитывает работодателей, соискателей, вакансии, резюме и отклики. Заполните работодателей и вакансии, зарегистрируйте соискателей и их резюме. Отклик связывает вакансию и резюме. Запрос с группировкой показывает популярность вакансий по числу откликов.