Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
О т в е т ы н а з а д а н и е №5.
1.
CREATE TABLE Команды (
название CHAR(30) PRIMARY KEY,
страна CHAR(30),
уровень_фанатов CHAR(5) CHECK (уровень_фанатов in (‘дикий’, ‘умеренный’)),
CHECK (страна = ‘England’ OR уровень_фанатов = ‘wild’)
);
CREATE TABLE Игроки (
Имя CHAR(30) PRIMARY KEY,
Страна CHAR(30),
Имя_команды CHAR(30) REFERNCES Команды(название),
Оклад NUMBER,
CHECK (Страна = (SELECT T. страна
FROM Команды T
WHERE T. название = Имя_команды)
OR
оклад/1.2 > (SELECT max(P. оклад)
FROM Игроки P, команды T
WHERE P. имя_команды = Имя_команды
AND T. название = Имя_команды
AND T. страна= P. страна))
);
CREATE TABLE Games(
Имя_команды1 CHAR(30) REFERENCES Команды(название),
Колво_голов1 NUMBER,
Имя_команды 2 CHAR(30) REFERENCES Команды(название),
Колво_голов 2 NUMBER,
дата DATE,
PRIMARY KEY(Имя_команды1, Имя_команды2, дата),
CHECK Имя_команды1 <> Имя_команды2)
);
CREATE TABLE Голы(
Имя_игрока CHAR(30) REFERNCES Игроки(имя),
Колво_голов NUMBER CHECK (Колво_голов > 0),
Дата DATE,
PRIMARY KEY(Имя_игрока, Дата)
);
CREATE ASSERTION Проверка_голов CHECK
(NOT EXISTS
((SELECT *
FROM Игры G
WHERE G. колво_голов1 <>
(SELECT sum(L. колво_голов)
FROM Игроки P, Голы L
WHERE P. имя_команды = G. имя_команды1
AND P. имя = L. имя_игрока
AND G. дата = L. дата))
UNION
((SELECT *
FROM Игры G
WHERE G. колво_голов2 <>
(SELECT sum(L. колво_голов)
FROM Игроки P, Голы L
WHERE P. имя_команды = G. имя_команды2
AND P. имя = L. имя_игрока
AND G. дата = L. дата)))
);
CREATE ASSERTION NoPhantomGoals CHECK
(NOT EXISTS
((SELECT *
FROM Голы L
WHERE L. дата <> ALL
(SELECT G. дата
FROM Игроки P, Игры G
WHERE P. имя = L. имя_игрока
AND G. имя_команды1 = P. имя_команды))
UNION
(SELECT *
FROM Голы L
WHERE L. дата <> ALL
(SELECT G. дата
FROM Игроки P, Игры G
WHERE P. имя = L. имя_игрока
AND G. имя_команды2 = P. имя_команды)))
);
2.
CREATE TABLE R (
a int PRIMARY KEY,
b int
);
CREATE TABLE S (
c int REFERNCES R(a),
d int
);
Инициалицазия: R = {(1,2)}, S = {(1,3)}
Последовательность SQL команд:
1. DELETE FROM R;
2. DELETE FROM S;
3. DELETE FROM R;
Стратегия выбрана по умолчанию (запрет) ON DELETE:
После команды | R | S |
1 | {(1,2)} | {(1,3)} |
2 | {(1,2)} | {} |
3 | {} | {} |
ON DELETE SET NULL:
После команды | R | S |
1 | {} | {(NULL,3)} |
2 | {} | {} |
3 | {} | {} |
ON DELETE CASCADE:
После команды | R | S |
1 | {} | {} |
2 | {} | {} |
3 | {} | {} |
3.
a)
CREATE PROCEDURE ПРОДАЖА (
Игрок IN Игроки. имя%TYPE,
Команда1 IN Игроки. Имя_команды%TYPE,
Команда2 IN Игроки. Имя_команды%TYPE,
) AS
BEGIN
UPDATE Игроки
SET Имя_команды = команда2, оклад = оклад * 1.1
WHERE имя = Игрок AND имя_команда = команда1;
END;
b)
CREATE PROCEDURE Премиальные AS
CURSOR c IS
SELECT Имя_игрока, колво_голов
FROM Голы
WHERE колво_голов > 1;
ng c%ROWTYPE;
бонус Игроки. оклад%TYPE;
BEGIN
OPEN c;
LOOP
FETCH c INTO ng;
EXIT WHEN c%NOTFOUND;
бонус := 1000;
IF ng. колво_голов = 3 THEN
бонус := 10000;
ELSIF ng. колво_голов > 3 THEN
бонус := 100000;
END IF;
UPDATE Игроки
SET оклад = оклад + бонус
WHERE Имя = ng. имя_игрока;
END LOOP;
CLOSE c;
END;
4
1. ALTER TABLE ПРОДАВЕЦ ADD Бонус NUMBER;
2. UPDATE ЗАКАЗ SET Сумма=Сумма/31;
3. DELETE FROM ПРОДАВЕЦ WHERE Имя IN (
SELECT Имя продавца
FROM ЗАКАЗ
GROUP BY Имя продавца
HAVING COUNT(*)<3);
4. DELETE FROM ПОКУПАТЕЛЬ A WHERE NOT EXIST(
SELECT *
FROM ЗАКАЗ B
WHERE A. Имя=В. Имя покупателя);
5.
CREATE PROCEDURE ins_zakaz (
Имя_покупателя IN ПОКУПАТЕЛЬ. Имя%TYPE,
Имя_продавца IN ПРОДАВЕЦ. Имя %TYPE)
AS
nom_zakaz ЗАКАЗ. номер%TYPE;
BEGIN
SELECT MAX(номер) INTO nom_zakaz
FROM ЗАКАЗ;
INSERT INTO ЗАКАЗ
(номер, Имя_покупателя, Имя_продавца)
VALEUS (nom_zakaz+1, имя_покупателя, имя_продавца);
END;


