From 9884d8e5af1077a8f8273329965ecdc809f1e7ca Mon Sep 17 00:00:00 2001 From: Vitalii Litvinchuk Date: Tue, 5 May 2026 11:14:57 +0300 Subject: [PATCH] feat: lab 12 --- lab2-12/task1.sql | 73 ++++++++++ lab2-12/task2.sql | 128 ++++++++++++++++ lab2-12/tasks.sql | 363 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 564 insertions(+) create mode 100644 lab2-12/task1.sql create mode 100644 lab2-12/task2.sql create mode 100644 lab2-12/tasks.sql diff --git a/lab2-12/task1.sql b/lab2-12/task1.sql new file mode 100644 index 0000000..1c43c7a --- /dev/null +++ b/lab2-12/task1.sql @@ -0,0 +1,73 @@ +START TRANSACTION; + +INSERT INTO + Orders ( + OrderID, + ClientID, + ProductID, + Quantity, + Cost, + Date + ) +VALUES ( + 32, + 'C11', + 'P1', + 10, + 500, + '2022-09-30' + ); + +UPDATE Products +SET + NumberOfItems = (NumberOfItems - 10) +WHERE + ProductID = 'P1'; + +SELECT o.OrderID, o.ClientID, o.Quantity, p.ProductID, p.NumberOfItems +FROM Orders AS o + INNER JOIN Products AS p ON o.ProductID = p.ProductID +WHERE + o.OrderID = 32; + +select * from Orders; + +-- ROLLBACK; + +SELECT * FROM Orders WHERE OrderID = 32; + +SELECT * FROM Products WHERE ProductID = 'P1'; + +START TRANSACTION; + +INSERT INTO + Orders ( + OrderID, + ClientID, + ProductID, + Quantity, + Cost, + Date + ) +VALUES ( + 30, + 'Cl1', + 'P1', + 10, + 500, + '2022-09-30' + ); + +UPDATE Products +SET + NumberOfItems = (NumberOfItems - 10) +WHERE + ProductID = 'P1'; + +SELECT o.OrderID, o.ClientID, o.Quantity, p.ProductID, p.NumberOfItems +FROM Orders AS o + INNER JOIN Products AS p ON o.ProductID = p.ProductID +WHERE + o.OrderID = 30; + +COMMIT; \ No newline at end of file diff --git a/lab2-12/task2.sql b/lab2-12/task2.sql new file mode 100644 index 0000000..f5cc52d --- /dev/null +++ b/lab2-12/task2.sql @@ -0,0 +1,128 @@ +use Lucky_Shrub; + +############################################### +############### Завдання ################# +############################################### + +################################################ +############### Завдання 1 ################# +Для того, щоб дізнатися, скільки замовлень було розміщено у 2022 році клієнтами з ідентифікаторами + Cl1, Cl2 і Cl3 було створено наступний запит: + +SELECT CONCAT( + "Cl1: ", COUNT(OrderID), " orders" + ) AS "Total number of orders" +FROM Orders +WHERE + YEAR(Date) = 2022 + AND ClientID = "Cl1" +UNION +SELECT CONCAT( + "Cl2: ", COUNT(OrderID), " orders" + ) +FROM Orders +WHERE + YEAR(Date) = 2022 + AND ClientID = "Cl2" +UNION +SELECT CONCAT( + "Cl3: ", COUNT(OrderID), " orders" + ) +FROM Orders +WHERE + YEAR(Date) = 2022 + AND ClientID = "Cl3"; + +-------------------------------------- +1. Оптимізуйте даний запит із використанням загальних табличних виразів (CTE) + +WITH + CTE1 AS ( + SELECT CONCAT( + "Cl1: ", COUNT(OrderID), " orders" + ) AS "Total number of orders" + FROM Orders + WHERE + YEAR(Date) = 2022 + AND ClientID = "Cl1" + ), + CTE2 AS ( + SELECT CONCAT( + "Cl2: ", COUNT(OrderID), " orders" + ) + FROM Orders + WHERE + YEAR(Date) = 2022 + AND ClientID = "Cl2" + ), + CTE3 AS ( + SELECT CONCAT( + "Cl3: ", COUNT(OrderID), " orders" + ) + FROM Orders + WHERE + YEAR(Date) = 2022 + AND ClientID = "Cl3" + ) +SELECT * +FROM CTE1 +UNION +SELECT * +FROM CTE2 +UNION +SELECT * +FROM CTE3; + +################################################ +############### Завдання 2 ################# +-------------------------------------- +1. Створіть підготовлений запит з назвою GetOrderDetail. +Підготовлений запит має приймати два вхідні аргументи: значення ClientID і значення року. +Вибірка має повернути ID замовлення, кількість, вартість замовлення та дату замовлення з таблиці Orders. + +select * from Orders; + +prepare GetOrderDetail +from 'SELECT OrderID, Quantity, Cost, Date FROM Orders WHERE ClientID = ? AND YEAR(Date) = ?'; + +set @ClientID = "Cl1"; + +set @Year = "2022"; + +execute GetOrderDetail using @ClientID, @Year; + +-------------------------------------- +2. Здійсніть вибірку даних із використанням піготованого запиту з такими значеннми +змінних ClientID (Cl1) і 2020 рік. + +CALL GetOrderDetail ('Cl1', 2020); + +set @ClientID = "Cl1"; + +set @Year = "2020"; + +execute GetOrderDetail using @ClientID, @Year; + +################################################ +############### Завдання 3 ################# + +У таблиці Activity бази даних Lucky_Shrub здійснюється реєстрація інформацію про кожну угоду +у стовпці Properties у форматі JSON. +Інформацію можна переглянути з допомогою запиту: + +SELECT * FROM Activity; +-------------------------------------- +1. Вам потрібно вивести ID продукту, назву, ціну покупки та ціну продажу продукту, +для яких атрибут Orders у таблиці Activity набуває значення "True". +--Порада: для отримання доступ до значень поля Properties без подвійних лапок із типу даних +JSON слід скористатися синксисом: + ->>'$.Propertys_name' +/*замість*/ ->'$.Propertys_name' + +select * from Products; + +select p.ProductID, p.ProductName, p.BuyPrice, p.SellPrice +FROM Products p + JOIN Activity a ON p.ProductID = a.Properties ->> '$.ProductID' +WHERE + a.Properties ->> '$.Order' = 'True'; \ No newline at end of file diff --git a/lab2-12/tasks.sql b/lab2-12/tasks.sql new file mode 100644 index 0000000..15b888b --- /dev/null +++ b/lab2-12/tasks.sql @@ -0,0 +1,363 @@ + +MySQL optimization techniques exercise + +Дано база даних, у якій є три таблиці: Orders, Products, Activity ( Див.: https://drive.google.com/open?id=18CZPLaV2MaEeMRwURw6cqFKK9MY-wSPx&usp=drive_fs ) +Потрібно оптимізувати декілька запитів + +Передумови: +################################################## +1. Створіть, якщо не створоно базу даних Lucky_Shrub +CREATE DATABASE IF NOT EXISTS Lucky_Shrub; +-------------------------------------------------- +2. Оберіть базу даних Lucky_Shrub + +USE Lucky_Shrub; +-------------------------------------------------- +3. Створіть таблиці бази даних, якщо не створено 3.1 таблцю Orders + +CREATE TABLE IF NOT EXISTS Orders ( + OrderID INT NOT NULL PRIMARY KEY, + ClientID VARCHAR(10), + ProductID VARCHAR(10), + Quantity INT, + Cost DECIMAL(6, 2), + Date DATE +); +-------------------------------------------------- +3.2 Таблицю Products + +CREATE TABLE IF NOT EXISTS Products ( + ProductID VARCHAR(10), + ProductName VARCHAR(100), + BuyPrice DECIMAL(6, 2), + SellPrice DECIMAL(6, 2), + NumberOfItems INT +); +-------------------------------------------------- +3.3 Таблицю Activity + +CREATE TABLE IF NOT EXISTS Activity ( + ActivityID INT PRIMARY KEY, + Properties JSON +); +-------------------------------------------------- +4. Заповніть таблиці даними (за потреби оновіть) 4.1 таблцю Orders + +INSERT INTO + Orders ( + OrderID, + ClientID, + ProductID, + Quantity, + Cost, + Date + ) +VALUES ( + 1, + "Cl1", + "P1", + 10, + 500, + "2020-09-01" + ), + ( + 2, + "Cl2", + "P2", + 5, + 100, + "2020-09-05" + ), + ( + 3, + "Cl3", + "P3", + 20, + 800, + "2020-09-03" + ), + ( + 4, + "Cl4", + "P4", + 15, + 150, + "2020-09-07" + ), + ( + 5, + "Cl3", + "P3", + 10, + 450, + "2020-09-08" + ), + ( + 6, + "Cl2", + "P2", + 5, + 800, + "2020-09-09" + ), + ( + 7, + "Cl1", + "P4", + 22, + 1200, + "2020-09-10" + ), + ( + 8, + "Cl3", + "P1", + 15, + 150, + "2020-09-10" + ), + ( + 9, + "Cl1", + "P1", + 10, + 500, + "2020-09-12" + ), + ( + 10, + "Cl2", + "P2", + 5, + 100, + "2020-09-13" + ), + ( + 11, + "Cl4", + "P5", + 5, + 100, + "2020-09-15" + ), + ( + 12, + "Cl1", + "P1", + 10, + 500, + "2022-09-01" + ), + ( + 13, + "Cl2", + "P2", + 5, + 100, + "2022-09-05" + ), + ( + 14, + "Cl3", + "P3", + 20, + 800, + "2022-09-03" + ), + ( + 15, + "Cl4", + "P4", + 15, + 150, + "2022-09-07" + ), + ( + 16, + "Cl3", + "P3", + 10, + 450, + "2022-09-08" + ), + ( + 17, + "Cl2", + "P2", + 5, + 800, + "2022-09-09" + ), + ( + 18, + "Cl1", + "P4", + 22, + 1200, + "2022-09-10" + ), + ( + 19, + "Cl3", + "P1", + 15, + 150, + "2022-09-10" + ), + ( + 20, + "Cl1", + "P1", + 10, + 500, + "2022-09-12" + ), + ( + 21, + "Cl2", + "P2", + 5, + 100, + "2022-09-13" + ), + ( + 22, + "Cl2", + "P1", + 10, + 500, + "2021-09-01" + ), + ( + 23, + "Cl2", + "P2", + 5, + 100, + "2021-09-05" + ), + ( + 24, + "Cl3", + "P3", + 20, + 800, + "2021-09-03" + ), + ( + 25, + "Cl4", + "P4", + 15, + 150, + "2021-09-07" + ), + ( + 26, + "Cl1", + "P3", + 10, + 450, + "2021-09-08" + ), + ( + 27, + "Cl2", + "P1", + 20, + 1000, + "2022-09-01" + ), + ( + 28, + "Cl2", + "P2", + 10, + 200, + "2022-09-05" + ), + ( + 29, + "Cl3", + "P3", + 20, + 800, + "2021-09-03" + ); +-------------------------------------------------- +4.2 таблицію Products + +INSERT INTO + Products ( + ProductID, + ProductName, + BuyPrice, + SellPrice, + NumberOfItems + ) +VALUES ( + "P1", + "Artificial grass bags ", + 40, + 50, + 100 + ), + ( + "P2", + "Wood panels", + 15, + 20, + 250 + ), + ( + "P6", + "Water fountain", + 65, + 80, + 15 + ); + +( + "P3", + "Patio slates", + 35, + 40, + 60 +), +( + "P4", + "Sycamore trees ", + 7, + 10, + 50 +), +( + "P5", + "Trees and Shrubs", + 35, + 50, + 75 +), +-------------------------------------------------- +4.3 Таблицю Activity + +INSERT INTO + Activity (ActivityID, Properties) +VALUES ( + 1, + '{ "ClientID": "Cl1", "ProductID": "P1", "Order": "True" }' + ), + ( + 2, + '{ "ClientID": "Cl2", "ProductID": "P4", "Order": "False" }' + ), + ( + 3, + '{ "ClientID": "Cl5", "ProductID": "P5", "Order": "True" }' + ); +-------------------------------------------------- + +Цілі: +Використання загальних табличних виразів +Використання підготовлених запитів +Використання даних типу JSON \ No newline at end of file