first commit

This commit is contained in:
Vitalii Litvinchuk
2026-05-04 23:15:09 +03:00
commit 6deed0469a
49 changed files with 5366 additions and 0 deletions
+192
View File
@@ -0,0 +1,192 @@
# MySQL Functions І
Для роботи потрібна буде база даних jewelrystore_db а також її дві таблиці: item та mg_orders.
Таблиця item містить інформацію про товар та його вартість, таблиця mg_orders містить список замовлень та їх деталі
Передумови
############################################################
############################################################
В MySQL має бути створена база даних магазину коштовностей фірми M&G, яка включає таблиці item та mg_orders які слід заповнити відповідними даними.
Для створення бази, таблиць та наповнення їх необхідною інформацією скористайтеся наданми нижче кодом:
------------------------------------------------------------
1: Створіть базу даних якщо не існує
CREATE DATABASE IF NOT EXISTS jewelrystore_db;
------------------------------------------------------------
2: Оберіть базу даних
USE jewelrystore_db;
------------------------------------------------------------
3: Створіть, якщо не існує, таблицю item.
CREATE TABLE IF NOT EXISTS item (
ItemID INT,
Name VARCHAR(150),
Cost INT,
PRIMARY KEY (ItemID)
);
SHOW CREATE TABLE item;
SELECT * FROM item;
------------------------------------------------------------
4: Внесіть дані у таблицю, або перевірте їх відповідність, якщо вони вже внесені
INSERT INTO
item
VALUES (1, 'Engagement ring', 2500),
(2, 'Silver brooch', 400),
(3, 'Earrings', 350),
(4, 'Luxury watch', 1250),
(5, 'Golden bracelet', 800),
(6, 'Gemstone', 1500);
SELECT * FROM item;
------------------------------------------------------------
5: Створіть, якщо не існує, таблицю mg_orders
CREATE TABLE IF NOT EXISTS mg_orders (
OrderID INT,
ItemID INT,
Quantity INT,
Cost INT,
OrderDate DATE,
DeliveryDate DATE,
OrderStatus VARCHAR(50),
PRIMARY KEY (OrderID)
);
------------------------------------------------------------
6: Внесіть дані у таблицю, або перевірте їх відповідність, якщо вони вже внесені
INSERT INTO
mg_orders
VALUES (
1,
1,
50,
122000,
'2022-04-05',
'2022-05-25',
'Delivered'
),
(
2,
2,
75,
28000,
'2022-03-08',
NULL,
'In progress'
),
(
3,
3,
80,
25000,
'2022-05-19',
'2022-06-08',
'Delivered'
),
(
4,
4,
45,
100000,
'2022-01-10',
NULL,
'In progress'
),
(
5,
5,
70,
56000,
'2022-05-19',
NULL,
'In progress'
),
(
6,
6,
60,
90000,
'2022-06-10',
'2022-06-18',
'Delivered'
);
SELECT *, Date_format(OrderDate, '%Y-%m-%d') AS OrderDate, Date_format(DeliveryDate, '%Y-%m-%d') AS DeliveryDate
FROM mg_orders;
##########################################################
Основна мета:
Робота із стрічковими, математичним, та функціями типу дата/час в MySQL.
##########################################################
######################### Завдання #####################
######################## Завдання 1 ####################
1. Напишіть запит, використовуючи стрічкові функцію для відображення списку товарів,
їх кількості та статусу замовлення у такому форматі:
Item namequantityorder status
SELECT CONCAT(
Name, '-', Quantity, '-', OrderStatus
) AS ItemNameQuantityOrderStatus
FROM mg_orders
JOIN item ON mg_orders.ItemID = item.ItemID;
2. Імя товару повинно бути відображено символами верхнього регістру,
а статус замовлення - символами нижнього регістру.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15v1G3pzopt_bKV1X_DDyBVZQti13fHy-&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
items
item - quantity - order status (Uppercase)
SELECT CONCAT(
LOWER(Name), '-', Quantity, '-', UPPER(OrderStatus)
) AS ItemNameQuantityOrderStatus
FROM mg_orders
JOIN item ON mg_orders.ItemID = item.ItemID;
##########################################################
###################### Завдання 2: ###################
Напишіть запит із використанням функцій дата/час, для відображення імені та дня тижня
у який замовлення має бути доставлено.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15u1sWEgU0ianaMqfPVgbjdE04r8hbPq1&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
Name, Day_of_week
(Capitalized), (Name of day, nullable)
SELECT Name, DAYNAME(DeliveryDate) AS Day_of_week
FROM mg_orders
JOIN item ON mg_orders.ItemID = item.ItemID;
############################################################
####################### Завдання 3: ####################
Напишіть запити, який підрахує вартість обробки кожного замовлення, яка складає 5% від
загальної вартості замовлення.
Використайте відповідну математичну фукнцію, яка дозволить заокрулити суму до двох знаків після коми.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15vCd0vIvLaqpbh9l5jr_h_W_rZe9tXW5&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
OrderID, cost_of_handling
SELECT OrderID, ROUND(Cost * 0.05, 2) AS cost_of_handling
from mg_orders;
############################################################
####################### Завдання 4: ####################
Модифікуйте запит із завдання 2 щоб відфільтрувати записи, які не містять порожніх даних у стовпці
дати доставки. Використайте для цього відповідну функцію порівняння.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15wLyFBx9i5BM_qVgTxjaILojwnZWQPZx&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
SELECT Name, DAYNAME(DeliveryDate) AS Day_of_week
FROM mg_orders
JOIN item ON mg_orders.ItemID = item.ItemID
WHERE
NOT ISNULL(DeliveryDate);
############################################################
+276
View File
@@ -0,0 +1,276 @@
# MySQL Functions ІІ
Для роботи потрібна буде база даних jewelrystore_db з 4-ма таблицями.
############################################################
############################################################
Передумови:
Встановіть, якщо потрібно, базу даних та необхідні таблиці. Заповніть їх даними (якщо дані вже є, ппроведіть звірку даних)
------------------------------------------------------------
1. Створіть, якщо потрібно, базу даних та таблицю clients
CREATE DATABASE IF NOT EXISTS jewelrystore_db;
------------------------------------------------------------
1.1 Оберіть базу днахи
USE jewelrystore_db;
------------------------------------------------------------
CREATE TABLE IF NOT EXISTS clients (
ClientID int NOT NULL,
ClientName varchar(255) DEFAULT NULL,
Address varchar(255) DEFAULT NULL,
ContactNo varchar(10) DEFAULT NULL,
PRIMARY KEY (ClientID)
);
------------------------------------------------------------
2. Створіть балицю client_orders
CREATE TABLE IF NOT EXISTS client_orders (
OrderID INT NOT NULL,
ClientID INT DEFAULT NULL,
ItemID INT DEFAULT NULL,
Cost INT DEFAULT NULL,
PRIMARY KEY (OrderID)
);
------------------------------------------------------------
3. Створіть таблицю item.
CREATE TABLE IF NOT EXISTS item (
ItemID INT NOT NULL,
Name varchar(150) DEFAULT NULL,
Cost INT DEFAULT NULL,
PRIMARY KEY (ItemID)
);
------------------------------------------------------------
4. Створіть таблицю mg_orders
CREATE TABLE IF NOT EXISTS mg_orders (
OrderID INT NOT NULL,
ItemID INT DEFAULT NULL,
Quantity INT DEFAULT NULL,
Cost INT DEFAULT NULL,
OrderDate DATE DEFAULT NULL,
DeliveryDate DATE DEFAULT NULL,
OrderStatus VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (OrderID)
);
------------------------------------------------------------
5. Додайте необхідні дані у таблицю clients
INSERT INTO
clients
VALUES (
1,
'Kishan Hughes',
'223 Golden Hills, North Austin, TX',
'387986345'
),
(
2,
'Indira Moncada',
'119 Silver Street, Bouldin Creek, TX',
'334567243'
),
(
3,
'Mosha Setsile',
'785 Bronze Lane, East Austin, TX',
'315642597'
),
(
4,
'Laura Mills',
'908 Diamond Crescent, South Lamar, TX',
'300842509'
),
(
5,
'Henrik Kreida',
'345, Golden Hills, North Austin, TX',
'358208983'
),
(
6,
'Millicent Blou',
'812, Diamond Crescent, North Burnet, TX',
'347898755'
);
------------------------------------------------------------
6. Додайте необхідні дані у таблицю item
INSERT INTO
item
VALUES (1, 'Engagement ring', 2500),
(2, 'Silver brooch', 400),
(3, 'Earrings', 350),
(4, 'Luxury watch', 1250),
(5, 'Golden bracelet', 800),
(6, 'Gemstone', 1500);
------------------------------------------------------------
7. Додайте необхідні дані у таблицю client_orders
INSERT INTO
client_orders
VALUES (1, 1, 1, 2500),
(2, 2, 2, 400),
(3, 3, 3, 350),
(4, 4, 4, 1250),
(5, 5, 5, 800),
(6, 6, 6, 1500),
(7, 2, 4, 400),
(8, 3, 4, 1250),
(9, 4, 2, 400),
(10, 1, 3, 350);
------------------------------------------------------------
8. Додайте необхідні дані у таблицю mg_orders
INSERT INTO
mg_orders
VALUES (
1,
1,
50,
122000,
'2022-04-05',
'2022-05-25',
'Delivered'
),
(
2,
2,
75,
28000,
'2022-03-08',
NULL,
'In progress'
),
(
3,
3,
80,
25000,
'2022-05-19',
'2022-06-08',
'Delivered'
),
(
4,
4,
45,
100000,
'2022-01-10',
NULL,
'In progress'
),
(
5,
5,
70,
56000,
'2022-05-19',
NULL,
'In progress'
),
(
6,
6,
60,
90000,
'2022-06-10',
'2022-06-18',
'Delivered'
);
#########################################################
#################### Завдання 1: ####################
Клієнтам, які замовили luxury watches надали 5% знижку.
На основі таблиць client_orders та item виведіть інформацію про ці замовлення.
У вибірку включіть ІД клієнта, ІД замовлення та вартість після знижки (afterDiscount).
Використайте математичну фукнцію CEIL щоб заокруглити вартість замовлення після знижки до найменшого
цілого, яке не менше вартості замовлення після знижки.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15xthe7YF52eewjLfCFtPD7X0fermHxbO&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
ClientID, OrderID, afterDiscount
SELECT client_orders.ClientID, client_orders.OrderID, CEIL(client_orders.Cost * 0.95) AS afterDiscount
FROM client_orders
JOIN item ON client_orders.ItemID = item.ItemID
WHERE
LOWER(item.Name) = LOWER('luxury watch');
#########################################################
#################### Завдання 2: ####################
Використайте запит з попереднього завдання, щоб відформатувати поле afterDiscount відповідно до маски
'#,###,###.##' з двома знаками після коми використавши функцію FORMAT function.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15yn9iYpMyBcRld1wXpmrKkbH6o6Z8hBp&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
ClientID, OrderID, afterDiscount
SELECT client_orders.ClientID, client_orders.OrderID, FORMAT(
CEIL(client_orders.Cost * 0.95), 2
) AS afterDiscount
FROM client_orders
JOIN item ON client_orders.ItemID = item.ItemID
WHERE
LOWER(item.Name) = LOWER('luxury watch');
#########################################################
#################### Завдання 3: ####################
Знайдіть очікувану дату доставки для замовлень. Запланований час доставки 30 днів після дати замовлення.
Використайте для цього фукнкцію ADDDATE.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=15zmq2p19Gua485l0hki9lQrVqBYb1N3-&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
ExpectedDelivDate
SELECT ADDDATE(OrderDate, 30) AS ExpectedDelivDate FROM mg_orders;
#########################################################
#################### Завдання 4: ####################
Згенеруйте дані, необхідні для звіту з деталями всіх замовлень.
Для замовлень, які ще не доставлені, стовпець DeliveryDate має значення NULL.
У цьому стовпці відобразіть значення "NOT DELIVERED" замість NULL для замовлень,
які ще не доставлено. Для цього використайте функцію COALESCE.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=160knbiH6JD_-0s36txaxzC5m2BEuhGLq&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
OrderID,ItemID,Quantity,Cost,OrderDate,DeliveryDate,OrderStatus
SELECT
OrderID,
ItemID,
Quantity,
Cost,
OrderDate,
COALESCE(DeliveryDate, 'NOT DELIVERED') AS DeliveryDate,
OrderStatus
FROM mg_orders;
#########################################################
#################### Завдання 5: ####################
Згенеруйте дані, необхідні для звіту, отримавши список усіх замовлень.
Замовлення які ще не доставлені мають статус "In progress".
За допомогою функції NULLIF згенеруйте дані таким чиному, щоб у стовпці OrderStatus
замість "In progress" відображалося значення null.
Очікуваний вигляд вибірки: https://drive.google.com/open?id=163dVCzWR9Vw3QY3QWmh8C34W1QX5kBrS&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs
OrderID, ItemID, Quantity, Cost, OrderDate, DeliveryDate, OrderStatus
SELECT
OrderID,
ItemID,
Quantity,
Cost,
OrderDate,
DeliveryDate,
NULLIF(OrderStatus, 'In progress') AS OrderStatus
FROM mg_orders;
#########################################################