Files
sql_advanced/lab2-1/data_db.sql
T
Vitalii Litvinchuk 6deed0469a first commit
2026-05-04 23:15:09 +03:00

687 lines
16 KiB
SQL
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
USE PortDB;
INSERT INTO
Purposes (Name, Description)
VALUES (
'Перевезення сировини',
'Перевезення різноманітних сировинних матеріалів на виробництво.'
),
(
'Експорт товарів',
'Вивезення готової продукції за кордон для продажу.'
),
(
'Імпорт сировини',
'Закупівля різноманітних сировинних матеріалів з-за кордону.'
),
(
'Транспортування контейнерів',
'Перевезення контейнерів із товаром між портами.'
),
(
'Доставка харчових продуктів',
'Перевезення продуктів харчування великими суднами.'
),
(
'Енергетичні цілі',
'Транспортування палива та енергетичних ресурсів морем.'
),
(
'Будівельні матеріали',
'Перевезення будівельних матеріалів для проектів на узбережжі.'
),
(
'Масова перевезення',
'Транспортування великих обсягів товарів для оптових партнерів.'
),
(
'Транзитне сполучення',
'Проходження через території кількох країн у маршруті доставки.'
);
INSERT INTO
CargoTypes (Name)
VALUES ('Контейнери'),
('Рідини'),
('Сипучі матеріали'),
('Сталеві вироби'),
('Деревинні матеріали'),
('Харчові продукти'),
('Технічне обладнання'),
('Автомобілі'),
('Товари загального вжитку'),
('Спеціальні вантажі');
INSERT INTO
ShipTypes (Name)
VALUES ('Балкер'),
('Контейнеровоз'),
('Танкер'),
('Ро-Ро (Roll-on/Roll-off)'),
('Бункеровоз'),
('Круїзний лайнер'),
('Багатоцільовий корабель'),
('Трал'),
('Лінійний корабель'),
(
'Вантажівка-перевізник (Ferry)'
),
('Пасажирський корабель');
INSERT INTO
Country (Name)
VALUES ('Австралія'),
('Австрія'),
('Азербайджан'),
('Албанія'),
('Алжир'),
('Ангола'),
('Андорра'),
('Аргентина'),
('Арменія'),
('Афганістан'),
('Багамські Острови'),
('Бангладеш'),
('Барбадос'),
('Бахрейн'),
('Беліз'),
('Бельгія'),
('Бенін'),
('Білорусь'),
('Болгарія'),
('Болівія'),
('Боснія і Герцеговина'),
('Ботсвана'),
('Бразилія'),
('Бруней'),
('Буркіна-Фасо'),
('Бурунді'),
('Бутан'),
('В\'єтнам'),
('Габон'),
('Гаїті'),
('Гайана'),
('Гамбія'),
('Гана'),
('Гваделупа'),
('Гватемала'),
('Гвінея'),
('Гвінея - Бісау'),
('Гондурас'),
('Гренада'),
('Греція'),
('Грузія'),
('Гренландія'),
('Данія'),
(
'Демократична Республіка Конго'
),
('Джибуті'),
('Домініка'),
('Домініканська Республіка'),
('Еквадор'),
('Екваторіальна Гвінея'),
('Еритрея'),
('Есватіні'),
('Естонія'),
('Ефіопія'),
('Єгипет'),
('Ємен'),
('Замбія'),
('Західна Сахара'),
('Зімбабве'),
('Ізраїль'),
('Індія'),
('Індонезія'),
('Ірак'),
('Іран'),
('Ірландія'),
('Ісландія'),
('Іспанія'),
('Італія'),
('Йорданія'),
('Казахстан'),
('Кайманові Острови'),
('Камбоджа'),
('Камерун'),
('Канада'),
('Катар'),
('Кенія'),
('Киргизстан'),
('Кіпр'),
('Кірібаті'),
('Китай'),
('Колумбія'),
('Коморські Острови'),
('Конго'),
('Північна Корея'),
('Південна Корея'),
('Косово'),
('Коста - Рика'),
('Куба'),
('Кувейт'),
('Лаос'),
('Латвія'),
('Лесото'),
('Литва'),
('Ліберія'),
('Ліван'),
('Лівія'),
('Ліхтенштейн'),
('Люксембург'),
('Маврикій'),
('Мавританія'),
('Мадагаскар'),
('Македонія'),
('Малаві'),
('Малайзія'),
('Малі'),
('Мальдіви'),
('Мальта'),
('Марокко'),
('Мартиніка'),
('Маршаллові Острови'),
('Мексика'),
('Мозамбік'),
('Молдова'),
('Монако'),
('Монголія'),
('М\'янма (Бірма)'),
('Намібія'),
('Науру'),
('Непал'),
('Нігер'),
('Нігерія'),
('Нідерланди'),
('Нікарагуа'),
('Німеччина'),
('Нова Зеландія'),
('Норвегія'),
('ОАЕ'),
('Оман'),
('Пакистан'),
('Палау'),
('Палестина'),
('Панама');
INSERT INTO
Positions (Name)
VALUES ('Директор'),
('Менеджер з логістики'),
('Капітан корабля'),
('Інженер-механік'),
('Оператор порту'),
('Фінансовий аналітик'),
('Керівник вантажоперевезень'),
(
'Технік з обслуговування суден'
),
('Митний брокер'),
('Логістичний асистент');
INSERT INTO
ContactTypes (Name)
VALUES ('Телефон'),
('Електронна пошта'),
('Факс'),
('Поштова адреса'),
('Skype'),
('WhatsApp'),
('Веб-сайт'),
('Телеграм');
INSERT INTO
ServiceTypes (Name, Description)
VALUES (
'Технічний огляд',
'Комплексне технічне обстеження та оцінка стану судна.'
),
(
'Ремонт двигуна',
'Виконання ремонтних робіт та технічного обслуговування суднового двигуна.'
),
(
'Мальовничі роботи',
'Фарбування та зовнішній оздоблювальний ремонт корпусу судна.'
),
(
'Технічне обслуговування електроніки',
'Проведення робіт з налаштування та ремонту електронних систем на судні.'
),
(
'Заміна обладнання',
'Встановлення нового суднового обладнання та видалення застарілого.'
),
(
'Очищення та змазування',
'Профілактичне очищення та змащення механізмів та обладнання судна.'
);
INSERT INTO
Voyages (CountryFromId, CountryToId)
SELECT (
SELECT Id
FROM Country
ORDER BY RAND()
LIMIT 1
) as CountryFromId, (
SELECT Id
FROM Country
ORDER BY RAND()
LIMIT 1
) as CountryToId
FROM (
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
) as Numbers;
INSERT INTO
Persons (
Passport,
FirstName,
LastName,
PositionId
)
VALUES (
'AA123456',
'Іван',
'Петров',
1
),
(
'BB789012',
'Марія',
'Іванова',
2
),
(
'CC345678',
'Олег',
'Сидоров',
3
),
(
'DD901234',
'Наталія',
'Коваленко',
4
),
(
'EE567890',
'Андрій',
'Смирнов',
5
),
(
'FF123890',
'Тетяна',
'Біліченко',
6
),
(
'GG456789',
'Дмитро',
'Мельник',
7
),
(
'HH678901',
'Катерина',
'Соколова',
8
),
(
'II234567',
'Валентин',
'Жуков',
9
),
(
'JJ890123',
'Ольга',
'Морозова',
10
),
(
'KK345678',
'Анна',
'Кравченко',
5
),
(
'LL901234',
'Олександр',
'Лисенко',
8
),
(
'MM567890',
'Євгенія',
'Денисенко',
2
);
INSERT INTO
ContactInfo (
Content,
PersonId,
ContactTypeId
)
VALUES ('+123456789', 1, 1),
('email@example.com', 2, 2),
('123 Main Street', 3, 3),
('SkypeID123', 4, 4),
('WhatsAppNumber', 5, 5),
(
'http://www.example.com',
6,
6
),
('TelegramUsername', 7, 7),
('FaxNumber', 8, 8),
('info@example.com', 9, 1),
('555-1234', 10, 2),
('456 Secondary Street', 11, 3),
('SkypeID456', 12, 4),
('TelegramUser567', 13, 7),
('ViberNumber', 1, 5),
(
'http://www.example2.com',
2,
6
),
('FaxNumber2', 3, 8);
INSERT INTO
Users (Password, PersonId)
VALUES ('strongpassword1', 1),
('securepass123', 2),
('myp@ssw0rd', 3),
('pass4you', 4),
('secret123', 5);
INSERT INTO
Docks (Name, MaxLength, MaxWidth)
VALUES ('Причал 1', 100, 20),
('Причал 2', 120, 25),
('Причал 3', 150, 30),
('Причал 4', 90, 15),
('Причал 5', 110, 18),
('Причал 6', 130, 22),
('Причал 7', 140, 28),
('Причал 8', 160, 35),
('Причал 9', 105, 17),
('Причал 10', 125, 23),
('Причал 11', 115, 19),
('Причал 12', 95, 14),
('Причал 13', 145, 27),
('Причал 14', 155, 33),
('Причал 15', 165, 38);
INSERT INTO
Ships (
Name,
Length,
Width,
Capacity,
ShipTypeId,
VoyageId,
DockId
)
VALUES (
'Корабель 1',
50.5,
10.5,
500,
1,
1,
1
),
(
'Корабель 2',
60.2,
12.8,
700,
2,
2,
2
),
(
'Корабель 3',
55.0,
11.0,
600,
3,
3,
3
),
(
'Корабель 4',
45.8,
9.5,
450,
4,
4,
4
),
(
'Корабель 10',
59.9,
12.0,
690,
10,
10,
10
),
(
'Корабель 11',
57.2,
11.2,
590,
11,
11,
11
),
(
'Корабель 12',
63.8,
13.8,
770,
5,
12,
12
),
(
'Корабель 13',
52.4,
10.8,
540,
3,
9,
13
),
(
'Корабель 14',
49.0,
9.8,
480,
6,
8,
14
),
(
'Корабель 15',
66.5,
14.0,
820,
8,
5,
15
);
INSERT INTO
Employees (PersonId)
SELECT id
FROM Persons
ORDER BY RAND()
LIMIT 5;
INSERT INTO
Services (
Date,
Done,
ShipId,
ServiceTypeId
)
SELECT
NOW() - INTERVAL FLOOR(RAND() * 365) DAY AS Date,
ROUND(RAND()) AS Done,
(
SELECT id
FROM Ships
ORDER BY RAND()
LIMIT 1
) AS ShipId,
ROUND(RAND() * 6) + 1 AS ServiceTypeId
FROM (
SELECT id
FROM `ShipTypes`
LIMIT 5
) AS t;
INSERT INTO
ServiceEmployee (EmployeeId, ServiceId)
SELECT ROUND(RAND() * 5) + 1 AS EmployeeId, ROUND(RAND() * 5) + 1 AS ServiceId
FROM (
SELECT id
FROM Services
LIMIT 5
) AS t;
INSERT INTO
DockEmplyee (DockId, EmployeeId)
VALUES (1, 1),
(2, 2),
(3, 3),
(4, 1),
(5, 5);
INSERT INTO
CrewPersons (PersonId, ShipId)
SELECT ROUND(RAND() * (13 - 6) + 6) AS PersonId, (
SELECT id
FROM Ships
ORDER BY RAND()
LIMIT 1
) AS ShipId
FROM (
SELECT id
FROM `Ships`
LIMIT 10
) AS t;
INSERT INTO
Cargoes (
Quantity,
CargoTypeId,
ShipId,
PurposeId
)
SELECT
ROUND(RAND() * 100) + 1 AS Quantity,
(
SELECT id
FROM CargoTypes
ORDER BY RAND()
LIMIT 1
) AS CargoTypeId,
(
SELECT id
FROM Ships
ORDER BY RAND()
LIMIT 1
) AS ShipId,
(
SELECT id
FROM Purposes
ORDER BY RAND()
LIMIT 1
) AS PurposeId
FROM (
SELECT id
FROM Ships
LIMIT 10
) AS t;
SELECT Ships.Name, Voyages.CountryFromId
FROM Ships
JOIN Voyages ON Ships.VoyageId = Voyages.Id
WHERE
Voyages.CountryFromId = (
SELECT id
FROM `Country`
ORDER BY RAND()
LIMIT 1
);
-- Вибірка кількості кораблів, що перебувають в кожному причалі:
SELECT Docks.Name AS DockName, COUNT(Ships.Id) AS ShipCount
FROM Docks
LEFT JOIN Ships ON Docks.Id = Ships.DockId
GROUP BY
Docks.Id;
-- Знаходження найбільшого та найменшого корабля за місткістю
SELECT MAX(Ships.Capacity) AS MaxCapacity, MIN(Ships.Capacity) AS MinCapacity
FROM Ships;
-- Вибірка інформації про всі обслуговування, які ще не виконані
SELECT
Services.Id,
Services.Date,
Ships.Name AS ShipName,
ServiceTypes.Name AS ServiceTypeName
FROM
Services
JOIN Ships ON Services.ShipId = Ships.Id
JOIN ServiceTypes ON Services.ServiceTypeId = ServiceTypes.Id
WHERE
Services.Done = 0;
-- Список працівників та кількість обслуговувань, які вони виконали
SELECT Employees.Id, Persons.FirstName, Persons.LastName, COUNT(ServiceEmployee.ServiceId) AS ServicesCount
FROM
Employees
JOIN Persons ON Employees.PersonId = Persons.Id
LEFT JOIN ServiceEmployee ON Employees.Id = ServiceEmployee.EmployeeId
GROUP BY
Employees.Id;
-- Список вантажів разом із цілями та назвою корабля:
SELECT Cargoes.Id, Purposes.Name AS PurposeName, Ships.Name AS ShipName, Cargoes.Quantity
FROM Cargoes
JOIN Purposes ON Cargoes.PurposeId = Purposes.Id
JOIN Ships ON Cargoes.ShipId = Ships.Id;
-- Загальний кількість вантажів, що відправляється з кожної країни:
SELECT Country.Name AS CountryName, SUM(Cargoes.Quantity) AS TotalCount
FROM
Voyages
JOIN Country ON Voyages.CountryFromId = Country.Id
JOIN Ships ON Voyages.Id = Ships.VoyageId
JOIN Cargoes ON Ships.Id = Cargoes.ShipId
GROUP BY
Country.Id;