This commit is contained in:
@@ -0,0 +1,535 @@
|
|||||||
|
DROP DATABASE Lucky_Shrub;
|
||||||
|
|
||||||
|
CREATE DATABASE IF NOT EXISTS Lucky_Shrub;
|
||||||
|
|
||||||
|
USE Lucky_Shrub;
|
||||||
|
|
||||||
|
CREATE TABLE Clients (
|
||||||
|
ClientID VARCHAR(10) primary key,
|
||||||
|
FullName VARCHAR(100),
|
||||||
|
ContactNumber INT,
|
||||||
|
AddressID INT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE Products (
|
||||||
|
ProductID VARCHAR(10) primary key,
|
||||||
|
ProductName VARCHAR(100),
|
||||||
|
BuyPrice DECIMAL(6, 2),
|
||||||
|
SellPrice DECIMAL(6, 2),
|
||||||
|
NumberOfItems INT
|
||||||
|
);
|
||||||
|
|
||||||
|
Create table Addresses (
|
||||||
|
AddressID INT PRIMARY KEY,
|
||||||
|
Street VARCHAR(255),
|
||||||
|
County VARCHAR(100)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE Employees (
|
||||||
|
EmployeeID INT primary key,
|
||||||
|
FullName VARCHAR(100),
|
||||||
|
JobTitle VARCHAR(50),
|
||||||
|
Department VARCHAR(200),
|
||||||
|
AddressID INT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE Activity (
|
||||||
|
ActivityID INT PRIMARY KEY,
|
||||||
|
Properties JSON
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE Audit (
|
||||||
|
AuditID INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
OrderDateTime TIMESTAMP NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE Orders (
|
||||||
|
OrderID INT NOT NULL PRIMARY KEY,
|
||||||
|
ClientID VARCHAR(10),
|
||||||
|
ProductID VARCHAR(10),
|
||||||
|
Quantity INT,
|
||||||
|
Cost DECIMAL(6, 2),
|
||||||
|
Date DATE,
|
||||||
|
FOREIGN KEY (ClientID) REFERENCES Clients (ClientID),
|
||||||
|
FOREIGN KEY (ProductID) REFERENCES Products (ProductID)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE Notifications (
|
||||||
|
NotificationID INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
Notification VARCHAR(256),
|
||||||
|
DateTime TIMESTAMP NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
Employees (
|
||||||
|
EmployeeID,
|
||||||
|
FullName,
|
||||||
|
JobTitle,
|
||||||
|
Department,
|
||||||
|
AddressID
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
1,
|
||||||
|
"Seamus Hogan",
|
||||||
|
"Manager",
|
||||||
|
"Management",
|
||||||
|
7
|
||||||
|
),
|
||||||
|
(
|
||||||
|
2,
|
||||||
|
"Thomas Eriksson",
|
||||||
|
"Assistant ",
|
||||||
|
"Sales",
|
||||||
|
8
|
||||||
|
),
|
||||||
|
(
|
||||||
|
3,
|
||||||
|
"Simon Tolo",
|
||||||
|
"Head Chef",
|
||||||
|
"Management",
|
||||||
|
9
|
||||||
|
),
|
||||||
|
(
|
||||||
|
4,
|
||||||
|
"Francesca Soffia",
|
||||||
|
"Assistant ",
|
||||||
|
"Human Resources",
|
||||||
|
10
|
||||||
|
),
|
||||||
|
(
|
||||||
|
5,
|
||||||
|
"Emily Sierra",
|
||||||
|
"Accountant",
|
||||||
|
"Finance",
|
||||||
|
11
|
||||||
|
),
|
||||||
|
(
|
||||||
|
6,
|
||||||
|
"Greta Galkina",
|
||||||
|
"Accountant",
|
||||||
|
"Finance",
|
||||||
|
12
|
||||||
|
);
|
||||||
|
|
||||||
|
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" }'
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
Clients (
|
||||||
|
ClientID,
|
||||||
|
FullName,
|
||||||
|
ContactNumber,
|
||||||
|
AddressID
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
"Cl1",
|
||||||
|
"Takashi Ito",
|
||||||
|
351786345,
|
||||||
|
1
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Cl2",
|
||||||
|
"Jane Murphy",
|
||||||
|
351567243,
|
||||||
|
2
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Cl3",
|
||||||
|
"Laurina Delgado",
|
||||||
|
351342597,
|
||||||
|
3
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Cl4",
|
||||||
|
"Benjamin Clauss",
|
||||||
|
351342509,
|
||||||
|
4
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Cl5",
|
||||||
|
"Altay Ayhan",
|
||||||
|
351208983,
|
||||||
|
5
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"Cl6",
|
||||||
|
"Greta Galkina",
|
||||||
|
351298755,
|
||||||
|
6
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
Products (
|
||||||
|
ProductID,
|
||||||
|
ProductName,
|
||||||
|
BuyPrice,
|
||||||
|
SellPrice,
|
||||||
|
NumberOfITems
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
"P1",
|
||||||
|
"Artificial grass bags ",
|
||||||
|
40,
|
||||||
|
50,
|
||||||
|
100
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"P2",
|
||||||
|
"Wood panels",
|
||||||
|
15,
|
||||||
|
20,
|
||||||
|
250
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"P3",
|
||||||
|
"Patio slates",
|
||||||
|
35,
|
||||||
|
40,
|
||||||
|
60
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"P4",
|
||||||
|
"Sycamore trees ",
|
||||||
|
7,
|
||||||
|
10,
|
||||||
|
50
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"P5",
|
||||||
|
"Trees and Shrubs",
|
||||||
|
35,
|
||||||
|
50,
|
||||||
|
75
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"P6",
|
||||||
|
"Water fountain",
|
||||||
|
65,
|
||||||
|
80,
|
||||||
|
15
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
Addresses (AddressID, Street, County)
|
||||||
|
VALUES (
|
||||||
|
1,
|
||||||
|
"291 Oak Wood Avenue",
|
||||||
|
"Graham County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
2,
|
||||||
|
"724 Greenway Drive",
|
||||||
|
"Pinal County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
3,
|
||||||
|
"102 Sycamore Lane",
|
||||||
|
"Santa Cruz County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
4,
|
||||||
|
"125 Roselawn Close",
|
||||||
|
"Gila County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
5,
|
||||||
|
"831 Beechwood Terrace",
|
||||||
|
"Cochise County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
6,
|
||||||
|
"755 Palm Tree Hills",
|
||||||
|
"Mohave County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
7,
|
||||||
|
"751 Waterfall Hills",
|
||||||
|
"Tuscon County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
8,
|
||||||
|
"878 Riverside Lane",
|
||||||
|
"Tuscon County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
9,
|
||||||
|
"908 Seaview Hills",
|
||||||
|
"Tuscon County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
10,
|
||||||
|
"243 Waterview Terrace",
|
||||||
|
"Tuscon County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
11,
|
||||||
|
"148 Riverview Lane",
|
||||||
|
"Tuscon County"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
12,
|
||||||
|
"178 Seaview Avenue",
|
||||||
|
"Tuscon County"
|
||||||
|
);
|
||||||
|
|
||||||
|
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"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
30,
|
||||||
|
"Cl1",
|
||||||
|
"P1",
|
||||||
|
10,
|
||||||
|
500,
|
||||||
|
"2022-09-01"
|
||||||
|
);
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 1: ##################
|
||||||
|
|
||||||
|
1. Створіть фукнцію FindAverageCost(), яка повертає значення середньої ціни продажу всіх продуктів
|
||||||
|
за певний рік. Рік має вводитися користувачем як вхідний параметр функції.
|
||||||
|
|
||||||
|
2. Запустіть функцію для різних років.
|
||||||
|
На знімку екрана нижче показано середню вартість, отриману функцією FindAverageCost()
|
||||||
|
на основі даних користувача за 2022 рік:
|
||||||
|
https://drive.google.com/open?id=18QemvhMFkhWVARePoW3m0A7cmrtlEvl7&usp=drive_fs
|
||||||
|
|
||||||
|
output table:
|
||||||
|
FindAverageCost(2022)
|
||||||
|
value
|
||||||
|
|
||||||
|
select * from Products;
|
||||||
|
|
||||||
|
drop function FindAverageCost;
|
||||||
|
|
||||||
|
create function FindAverageCost(InputYear int)
|
||||||
|
returns float
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
declare AverageCost float;
|
||||||
|
|
||||||
|
select round(avg(Cost), 2)
|
||||||
|
into AverageCost
|
||||||
|
from Orders
|
||||||
|
where year(Date) = InputYear;
|
||||||
|
|
||||||
|
return AverageCost;
|
||||||
|
end;
|
||||||
|
|
||||||
|
set @year = 2022;
|
||||||
|
|
||||||
|
select FindAverageCost (@year);
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 2: ##################
|
||||||
|
1. Створіть збережену процедуру EvaluateProduct, яка дозволить у якості трьох вихідних параметрів
|
||||||
|
вивести загальну кількість товарів, проданих протягом 2020, 2021, 2022 років відповідно для продукту,
|
||||||
|
ідентифікатор якого вказує користувач в якості вхідного пераметра процедури.
|
||||||
|
2. Викличте процедуру вказавши в якості вхідного параметра "P1" та вивівши вихідні параметри у змінні
|
||||||
|
3. Відобразіть значення змінних з допомогою SELECT.
|
||||||
|
4. Спробуйте інші вхідні параметри.
|
||||||
|
На знімку екрана нижче показано загальну кількість товарів, проданих упродовж 2020, 2021, 2022 років
|
||||||
|
для продукту з ідентифікатором "P1":
|
||||||
|
https://drive.google.com/open?id=18QndcPAEP6PRhUSI16h_MYx8FAWcM7r_&usp=drive_fs
|
||||||
|
|
||||||
|
output table:
|
||||||
|
@Sold_Items_2020 | @Sold_Items_2021 | @Sold_Items_2022
|
||||||
|
value1 | value2 | value3
|
||||||
|
|
||||||
|
drop procedure EvaluateProduct;
|
||||||
|
|
||||||
|
create procedure EvaluateProduct(in product_id varchar(10), out sold_2020 int, out sold_2021 int, out sold_2022 int)
|
||||||
|
begin
|
||||||
|
select sum(Quantity) into sold_2020
|
||||||
|
from Orders
|
||||||
|
where ProductID = product_id and year(Date) = 2020;
|
||||||
|
|
||||||
|
select sum(Quantity) into sold_2021
|
||||||
|
from Orders
|
||||||
|
where ProductID = product_id and year(Date) = 2021;
|
||||||
|
|
||||||
|
select sum(Quantity) into sold_2022
|
||||||
|
from Orders
|
||||||
|
where ProductID = product_id and year(Date) = 2022;
|
||||||
|
end;
|
||||||
|
|
||||||
|
set @Sold_Items_2020 = 0, @Sold_Items_2021 = 0, @Sold_Items_2022 = 0;
|
||||||
|
|
||||||
|
call EvaluateProduct (
|
||||||
|
'P2',
|
||||||
|
@Sold_Items_2020,
|
||||||
|
@Sold_Items_2021,
|
||||||
|
@Sold_Items_2022
|
||||||
|
);
|
||||||
|
|
||||||
|
select @Sold_Items_2020, @Sold_Items_2021, @Sold_Items_2022;
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 3: ##################
|
||||||
|
1. Створіть тригер під назвою UpdateAudit. Цей тригер має спрацьовувати ПІСЛЯ вставки нового замовлення
|
||||||
|
в таблицю Orders й додавати запис у таблицю Audit про дату та час замовлення. Поле AuditID заповнювати
|
||||||
|
не потрібно, оскільки воно заповнюєься автоматично як лічильник.
|
||||||
|
2. Для перевірки роботи тригера введіть три нових записи у таблицю замовлень за сьогоднішнє число.
|
||||||
|
3. Виведіть вміст таблиць Orders (за сьогоднішнє число) та Audit.
|
||||||
|
На наступному знімку екрана показано приклад виводу вмісту таблиць Orders та Audit:
|
||||||
|
https://drive.google.com/open?id=18QqRc6_XjOJkXUSSKsPadPmakhXQ6U-k&usp=drive_fs
|
||||||
|
|
||||||
|
select * from Audit;
|
||||||
|
|
||||||
|
drop trigger UpdateAudit;
|
||||||
|
|
||||||
|
create trigger UpdateAudit
|
||||||
|
after insert on Orders
|
||||||
|
for each row
|
||||||
|
begin
|
||||||
|
insert into Audit(`OrderDateTime`) values (now());
|
||||||
|
end;
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
Orders (
|
||||||
|
OrderID,
|
||||||
|
ClientID,
|
||||||
|
ProductID,
|
||||||
|
Quantity,
|
||||||
|
Cost,
|
||||||
|
Date
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
100,
|
||||||
|
"Cl1",
|
||||||
|
"P1",
|
||||||
|
10,
|
||||||
|
500,
|
||||||
|
curdate()
|
||||||
|
),
|
||||||
|
(
|
||||||
|
101,
|
||||||
|
"Cl2",
|
||||||
|
"P2",
|
||||||
|
5,
|
||||||
|
100,
|
||||||
|
curdate()
|
||||||
|
),
|
||||||
|
(
|
||||||
|
102,
|
||||||
|
"Cl3",
|
||||||
|
"P3",
|
||||||
|
20,
|
||||||
|
800,
|
||||||
|
curdate()
|
||||||
|
);
|
||||||
|
|
||||||
|
select * from Orders where Date = curdate();
|
||||||
|
|
||||||
|
select * from Audit;
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 4: ##################
|
||||||
|
1. Створіть оптимізований запит, який виведе інформацію про місцезнаходження клієнтів та співробітників.
|
||||||
|
У вивід слід включити:
|
||||||
|
• Повні імена (FullName) всіх клієнтів і співробітників із таблиць Clients і Employees.
|
||||||
|
• Адресу (Street, County) кожної людини з таблиці адрес.
|
||||||
|
2. Дані повинні бути впорядковані за назвою вулиці. Зверніть увагу, поле Street починається з
|
||||||
|
назви будинку а не з назви вулиці.
|
||||||
|
Результат виводу показаний на наступному скриншоті:
|
||||||
|
https://drive.google.com/open?id=18SkH6ZmbGctCkWbYtKFcolmmE-v6Nudk&usp=drive_fs
|
||||||
|
|
||||||
|
select * from Clients;
|
||||||
|
|
||||||
|
select FullName, Street, County
|
||||||
|
from Clients
|
||||||
|
join Addresses on Clients.AddressID = Addresses.AddressID
|
||||||
|
union all
|
||||||
|
select FullName, Street, County
|
||||||
|
from Employees
|
||||||
|
join Addresses on Employees.AddressID = Addresses.AddressID
|
||||||
|
order by SUBSTRING(
|
||||||
|
Street, LOCATE(' ', Street) + 1
|
||||||
|
) asc;
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 5: ##################
|
||||||
|
Наступний запит повертає загальну кількість дерев’яних панелей (ідентифікатор P2),
|
||||||
|
проданих в 2020, 2021 і 2022 роках:
|
||||||
|
|
||||||
|
explain
|
||||||
|
|
||||||
|
SELECT CONCAT(SUM(Cost), " (2020)") AS "Total sum of P2 Product"
|
||||||
|
FROM Orders
|
||||||
|
WHERE
|
||||||
|
YEAR(Date) = 2020
|
||||||
|
AND ProductID = "P2"
|
||||||
|
UNION
|
||||||
|
SELECT CONCAT(SUM(Cost), " (2021)")
|
||||||
|
FROM Orders
|
||||||
|
WHERE
|
||||||
|
YEAR(Date) = 2021
|
||||||
|
AND ProductID = "P2"
|
||||||
|
UNION
|
||||||
|
SELECT CONCAT(SUM(Cost), " (2022)")
|
||||||
|
FROM Orders
|
||||||
|
WHERE
|
||||||
|
YEAR(Date) = 2022
|
||||||
|
AND ProductID = "P2";
|
||||||
|
|
||||||
|
|
||||||
|
Вивід з цього запиту показано на скриншоті нижче:
|
||||||
|
https://drive.google.com/open?id=18UCCsysObMJhtmc7saumSbN-JkeS5lQW&usp=drive_fs
|
||||||
|
|
||||||
|
1. Оптимізуйте цей запит.
|
||||||
|
|
||||||
|
select
|
||||||
|
2. Здійсніть вивід та порівняйте з виводом початкового запиту
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 6: ##################
|
||||||
|
У таблиці Activity реєструється інформація про діяльність клієнтів, які користуються інтернет-магазином,
|
||||||
|
зокрема ClientID та ProductID для кожної дії в стовпці JSON Properties. Це відбувається,
|
||||||
|
коли клієнти переглядають продукти в Інтернеті. На наступному скриншоті показано таблицю активності:
|
||||||
|
https://drive.google.com/open?id=18UUaS39qzfLsIyXuKg0TGzhL3rrivfqR&usp=drive_fs
|
||||||
|
|
||||||
|
1. Напишіть запит, який виведе:
|
||||||
|
ClientID, ProductID для всіх клієнтів, які виконували дії, повне ім’я (FullName)
|
||||||
|
та контактний номер (ContactNumber) кожного клієнта з таблиці Клієнти (Clients).
|
||||||
|
2. Здійсніть вивід запиту
|
||||||
|
|
||||||
|
select
|
||||||
|
Properties ->> '$.ClientID' as ClientID,
|
||||||
|
Properties ->> '$.ProductID' as ProductID,
|
||||||
|
FullName,
|
||||||
|
ContactNumber
|
||||||
|
from
|
||||||
|
Activity
|
||||||
|
join Clients on Properties ->> '$.ClientID' = Clients.ClientID;
|
||||||
|
|
||||||
|
Результат запиту має відповідати результатам показаним на скриншоті нижче:
|
||||||
|
https://drive.google.com/open?id=18Vpzx4hWNZ5-5LR7fNnoI9fs93IBXWqD&usp=drive_fs
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 7: ##################
|
||||||
|
1. Створіть збережену процедуру під назвою GetProfit, яка повертає загальний прибуток, отриманий
|
||||||
|
від певного продукту за певний рік. В якості параметрів процедури користувач повинне ввести значення
|
||||||
|
для ProductID та року.
|
||||||
|
Наприклад, результат процедури GetProfit із ProductID="P1" і 2020 роком показано на скриншоті нижче:
|
||||||
|
https://drive.google.com/open?id=18W3lTIs6yJlSw99k6uq1g5oPhSqLnd63&usp=drive_fs
|
||||||
|
|
||||||
|
set @ProductID = "P1", @year = 2020;
|
||||||
|
|
||||||
|
select * from Products;
|
||||||
|
|
||||||
|
select * from Orders;
|
||||||
|
|
||||||
|
drop procedure GetProfit;
|
||||||
|
|
||||||
|
create procedure GetProfit(in inputYear int, in inputProductId varchar(10))
|
||||||
|
begin
|
||||||
|
declare TotalProfit float default 0;
|
||||||
|
|
||||||
|
select round(sum(SellPrice * Quantity - (BuyPrice * Quantity)), 2)
|
||||||
|
into TotalProfit
|
||||||
|
from Orders
|
||||||
|
join Products on Orders.ProductID = Products.ProductID
|
||||||
|
where YEAR(Date) = inputYear and Products.ProductID = inputProductId;
|
||||||
|
|
||||||
|
select TotalProfit as profit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
2. Виведіть значення процедури для кількох різних параметрів.
|
||||||
|
|
||||||
|
call GetProfit ("2020", "P1");
|
||||||
|
|
||||||
|
call GetProfit ("2020", "P2");
|
||||||
|
|
||||||
|
call GetProfit ("2020", "P3");
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#####################################################
|
||||||
|
###################### Task 8: ##################
|
||||||
|
Створіт представлення (VIEW) з назвою DataSummary, яке об’єднає чотири таблиці (Клієнти (Clients),
|
||||||
|
Адреси (Addresses), Замовлення (Orders), Продукти (Products)).
|
||||||
|
1. Віртуальна таблиця повинна відображати такі дані:
|
||||||
|
• Повне ім’я (FullName) та контактний телефон (ContactNumber) для кожного клієнта з таблиці Clients.
|
||||||
|
• Округ (County), у якому проживає кожен клієнт, з таблиці Addresses.
|
||||||
|
• Назва продукту (ProductName), який вони придбали в таблиці Products.
|
||||||
|
• Ідентифікатор продукту (ProductID), вартість (Cost) і дату (Date) кожного замовлення з таблиці Orders.
|
||||||
|
2. Віртуальна таблиця має:
|
||||||
|
2.1 відображати відповідні дані лише за 2022 рік.
|
||||||
|
2.2 впорядковувати вивід даних за вартістю у порядку спадання.
|
||||||
|
Приклад показано на наступному знімку екрана:
|
||||||
|
https://drive.google.com/open?id=18WYAMaBZMfHn1et6GUaIANCdzEmWgVZM&usp=drive_fs
|
||||||
|
|
||||||
|
create view DataSummary as
|
||||||
|
select
|
||||||
|
FullName,
|
||||||
|
ContactNumber,
|
||||||
|
County,
|
||||||
|
ProductName,
|
||||||
|
Products.ProductID,
|
||||||
|
Cost,
|
||||||
|
Date
|
||||||
|
from
|
||||||
|
Clients
|
||||||
|
join Addresses on Clients.AddressID = Addresses.AddressID
|
||||||
|
join Orders on Clients.ClientID = Orders.ClientID
|
||||||
|
join Products on Orders.ProductID = Products.ProductID
|
||||||
|
where
|
||||||
|
YEAR(Date) = 2022
|
||||||
|
order by Cost desc;
|
||||||
|
|
||||||
|
select * from DataSummary;
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
Самостійна 2-9 – 2-12
|
||||||
|
|
||||||
|
База даних Lucky Shrub складається з таких таблиць: Клієнти (Clients), Замовлення (Orders), Продукти (Products), Адреси (Addresses), Співробітники (Employees), Аудит (Audit), Повідомлення (Notifications) та Діяльність (Activity), як показано на наступній ER-схемі: https://drive.google.com/open?id=18QdwKZFf2nbnRDP__leAWjYNaBaKarNx&usp=drive_fs
|
||||||
|
|
||||||
|
Слід використати MySQL для здійснення бізнес аналітики та оптимізації деяких запитів.
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
Для виконання роботи Вам потрібна буде база даних Lucky_Shrub із нобором таблиць та даних.
|
||||||
|
Видаліть якщо є стару базу даних Lucky_Shrub та відновіть її з бекап-версії: https://drive.google.com/open?id=18nJipQRUzjnWikOEVsoleddWgQQis1TJ&usp=drive_fs
|
||||||
|
|
||||||
|
Або ж, для створення/привадення бази даних у початковий стан використайте наступний код в MySQL:
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
############### Завдання #################
|
||||||
|
###############################################
|
||||||
Reference in New Issue
Block a user