This commit is contained in:
@@ -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;
|
||||
@@ -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';
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user