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