192 lines
7.1 KiB
SQL
192 lines
7.1 KiB
SQL
# 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);
|
||
|
||
############################################################ |