first commit
This commit is contained in:
@@ -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 name–quantity–order 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);
|
||||
|
||||
############################################################
|
||||
@@ -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;
|
||||
|
||||
#########################################################
|
||||
Reference in New Issue
Block a user