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;