feat: lab 12
Advanced SQL Quality Check / Lint SQL Scripts (push) Failing after 16s

This commit is contained in:
Vitalii Litvinchuk
2026-05-05 11:14:57 +03:00
parent fa7c5620a3
commit 9884d8e5af
3 changed files with 564 additions and 0 deletions
+73
View File
@@ -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;
+128
View File
@@ -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';
+363
View File
@@ -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