first commit

This commit is contained in:
Vitalii Litvinchuk
2026-05-04 23:15:09 +03:00
commit 6deed0469a
49 changed files with 5366 additions and 0 deletions
@@ -0,0 +1,203 @@
# Робота з підзапитами
Передумови
Для роботи використайте навчальну базу даних OrdersDB_2.
OrdersDB_2 складається з 3-х таблиць:
1. Salespeople - продавці
містить поля:
SNUM - ID продавця
SNAME - імя продавця
CITY - місто продавця
COMM - комісійні продавця
2. Cusstomer - покупці
містить поля:
CNUM - ID покупця
CNAME - імя покупця,
CITY - місто покупця,
RATING - рейтинг покупця,
SNUM - ID продавця, що обслуговує покупця,
3. Orders - покупці
містить поля:
ONUM - ID угоди
amt - сума угоди
ODATE - дата угоди
CNUM - ID покупця,
SNUM - ID продавця,
-------------------------------------------------------
-------------------------------------------------------
1. Створіть, якщо не має базу даних OrdersDB_2.
CREATE DATABASE OrdersDB_2;
-------------------------------------------------------
2. Виберіть базу даних OrdersDB_2
USE OrdersDB_2;
-------------------------------------------------------
3. Створіть необхідні таблиці 3.1 Таблицю продавцівв
CREATE TABLE Salespeople (
SNUM int NOT NULL,
SNAME char(20) NOT NULL,
CITY char(20),
COMM decimal(8, 2),
PRIMARY KEY (SNUM)
);
-------------------------------------------------------
3.2 Таблицю покупців
CREATE TABLE Customers (
CNUM int NOT NULL,
CNAME char(20) NOT NULL,
CITY char(20),
RATING int,
SNUM int,
PRIMARY KEY (CNUM),
CONSTRAINT sales_snum FOREIGN KEY (SNUM) REFERENCES Salespeople (SNUM)
);
-------------------------------------------------------
3.3 Таблицю Замовлень
CREATE TABLE Orders (
ONUM int NOT NULL,
amt decimal(9, 2),
ODATE date,
CNUM int,
SNUM int,
PRIMARY KEY (ONUM),
CONSTRAINT o_sales_snum FOREIGN KEY (SNUM) REFERENCES Salespeople (SNUM),
CONSTRAINT custom_cnum FOREIGN KEY (CNUM) REFERENCES Customers (CNUM)
);
-------------------------------------------------------
4. Заповніть таблиці даними 4.1 Таблицю Satespeople
INSERT INTO Salespeople (SNUM, SNAME, CITY, COMM)
VALUES
(1001,"Peel","London",.12),
(1002,"Serres","San Jose",.13),
(1004,"Motika","London",.11),
(1007,"Rifkin","Barcelona",.15),
(1003,"Axelrod","New York",.10)
;
-------------------------------------------------------
4.2 Таблицю Customers
INSERT INTO
Customers
VALUES (
2001,
"Hoffman",
"London",
100,
1001
),
(
2002,
"Giovanni",
"Rome",
200,
1003
),
(
2003,
"Liu",
"San Jose",
200,
1002
),
(
2004,
"Grass",
"Berlin",
300,
1002
),
(
2006,
"Clemens",
"London",
100,
1001
),
(
2008,
"Cisneros",
"San Jose",
300,
1007
),
(
2007,
"Pereira",
"Rome",
100,
1004
);
-------------------------------------------------------
4.2 Таблицю Orders
INSERT INTO
Orders
VALUES (
3003,
767.19,
"1990-10-03",
2001,
1001
),
(
3002,
1900.10,
"1990-10-03",
2007,
1004
),
(
3005,
5160.45,
"1990-10-03",
2003,
1002
),
(
3006,
1098.16,
"1990-10-03",
2008,
1007
),
(
3009,
1713.23,
"1990-10-04",
2002,
1003
),
(
3007,
75.75,
"1990-10-04",
2004,
1002
),
(
3008,
4723.00,
"1990-10-05",
2006,
1001
),
(
3010,
1309.95,
"1990-10-06",
2004,
1002
),
(
3011,
9891.88,
"1990-10-06",
2006,
1001
);
+107
View File
@@ -0,0 +1,107 @@
use OrdersDB_2;
##################### Завдання #######################
##########################################################
################### Завдання 1.1 #####################
Знайдіть максимальну і мінімальну середню суму угоди на основі середньої суми угод кожного продавця.
Підказка: використайте підзапит у пропозиції FROM.
select max(avg_amt), min(avg_amt)
from (
select avg(amt) as avg_amt
from Orders
group by
SNUM
) as avg_amt;
######################################################
################# Завдання 1.2 ###################
Напишіть запит, що виведе кожне замовлення покупців, якщо їх вартість більша за кожне замовлення
покупця Grass. Вивід здійснити у формі onum, amt, odate, cname.
Підказка: використайте оператор ALL
select onum, amt, odate, cname
from Orders o
join Customers c on o.cnum = c.cnum
where
amt > all (
select amt
from Orders
where
cnum = (
select cnum
from Customers
where
cname = 'Grass'
)
);
######################################################
################# Завдання 1.3 ###################
Виведіть усі замовлення для яких сума угоди перевершує хоча б якесь замолення,
що обслуговувалося продавцем Peel
Вивід здійсніть у формі amt, odate, cname, sname
select amt, odate, cname, sname
from
Orders o
join Customers c on o.cnum = c.cnum
join Salespeople s on o.snum = s.snum
where
amt > any (
select amt
from Orders
where
snum = (
select snum
from Salespeople
where
sname = 'Peel'
)
);
#####################################################
################ Завдання 1.4 ###################
Виведіть продавців серердня сума угод яких перевищує середню суму усіх угод.
У вивід включіть імя продавця та його середню суму угод
Підказка:
select sname, avg_amt
from Salespeople s
join (
select snum, avg(amt) as avg_amt
from Orders
group by
snum
) as avg_amt on s.snum = avg_amt.snum
where
avg_amt > (
select avg(amt)
from Orders
);
#####################################################
################ Завдання 1.5 ###################
Виведіть покупців, серердня сума угод яких перевищує середню суму усіх угод.
У вивід включіть імя покупця та його середню суму угод а також загальну середню суму угод.
Підказка:
select cname, avg_amt, round(
(
select avg(amt)
from Orders
), 2
) as avg_amt_all
from Customers c
join (
select cnum, avg(amt) as avg_amt
from Orders
group by
cnum
) as avg_cus on c.cnum = avg_cus.cnum
where
avg_amt > (
select avg(amt)
from Orders
);
+86
View File
@@ -0,0 +1,86 @@
#####################################################
################ Завдання 2.1 ###################
1. На остнові таблиці Orders створіть представлення V_Orders з алгоритмом обробки TEMPTABLE,
яке б вивело увесь вміст таблиці.
CREATE ALGORITHM = TEMPTABLE VIEW V_Orders AS SELECT * FROM Orders;
SELECT * FROM V_Orders;
2. Переіменуйте представлення на VOrders
RENAME TABLE V_Orders TO VOrders;
SELECT * FROM VOrders;
3. Спробуйте використати переіменоване представлення для видалення запису з onum = 3001.
Поясніть результат.
DELETE FROM VOrders WHERE onum = 3001;
# Error: The target table VOrders of the DELETE is not updatable
# Видалення не відбулося, оскільки представлення було створено з алгоритмом TEMPTABLE.
#####################################################
################ Завдання 2.2 ###################
1. Створіть точну копію таблиці Salespeople, назвавши її Salespeople_1.
create table Salespeople_1 as select * from Salespeople;
2. На остнові таблиці Salespeople_1 створіть представлення V_Salespeople_1, яке б вивело увесь вміст
таблиці.
drop view if exists V_Salespeople_1;
CREATE VIEW V_Salespeople_1 AS SELECT * FROM Salespeople_1;
SELECT * FROM V_Salespeople_1;
3. Спробуйте використати представлення V_Salespeople_1 для додавання в якості продавця себе.
Перевірте наявність змін.
insert into
V_Salespeople_1 (SNUM, SNAME, CITY, COMM)
values (
1008,
'Vitalii',
'Zdolbuniv',
0.1
);
#####################################################
################ Завдання 2.3 ###################
1. На остнові таблиці Salespeople_1 створіть представлення V_Salespeople_2,
яке б вивело лише записи продавців, які проживають у місті London.
drop view if exists V_Salespeople_2;
create view V_Salespeople_2 as
select *
from Salespeople_1
where
CITY = 'London';
SELECT * FROM V_Salespeople_2;
2. Спробуйте використати представлення V_Salespeople_2 для зміни свого міста проживання на Texas.
Перевірте наявність змін.
update V_Salespeople_2 set CITY = 'Texas' where SNUM = 1008;
SELECT * FROM V_Salespeople_2;
3. Спробуйте самостійно знайти спосіб, який заборонить вносити зміни у записи,
які представленням не відображаються. Переконайтеся у працездатності такого обмеження
спробувавши видалити свій запис.
create view V_Salespeople_3 as
select *
from Salespeople_1
where
CITY = 'London'
with
check option;
update V_Salespeople_3 set CITY = 'Texas' where SNUM = 1001;
SELECT * FROM V_Salespeople_3;