687 lines
16 KiB
SQL
Executable File
687 lines
16 KiB
SQL
Executable File
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; |