# 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; #########################################################