Exercise AUTORENT

CREATE TABLE auto(
autoID int not null Primary key IDENTITY(1,1),
regNumber
char(6) UNIQUE,
markID int,
varv varchar(20),
v_aasta int,
kaigukastID
int,
km decimal(6,2)
);
SELECT * FROM auto
CREATE TABLE mark(
markID int not null Primary key IDENTITY(1,1),
autoMark varchar(30) UNIQUE
);
select * from mark
INSERT INTO mark(autoMark)
VALUES ('Ziguli');
INSERT INTO mark(autoMark)
VALUES ('Lambordzini');
INSERT INTO mark(autoMark)
VALUES ('BMW');
SELECT * FROM mark;
CREATE TABLE kaigukast(
kaigukastID int not null Primary key IDENTITY(1,1),
kaigukast varchar(30) UNIQUE
);
INSERT INTO kaigukast(kaigukast)
VALUES ('Automaat');
INSERT INTO kaigukast(kaigukast)
VALUES ('Manual');
SELECT * FROM kaigukast;
ALTER TABLE auto
ADD FOREIGN KEY (markID) REFERENCES mark(markID);
ALTER TABLE auto
ADD FOREIGN KEY (kaigukastID) REFERENCES kaigukast(kaigukastID);
create table klient(
klientID int not null Primary key IDENTITY(1,1),
kliendiNimi varchar(50),
telefon varchar(20),
aadress varchar(50),
soiduKogemus varchar(30)
);
select * from klient
create table amet(
ametID int not null Primary key IDENTITY(1,1),
ametiNimi varchar(30),
);
select * from amet
INSERT INTO amet(ametiNimi)
VALUES ('Myyja');
INSERT INTO amet(ametiNimi)
VALUES ('Esimees');
INSERT INTO amet(ametiNimi)
VALUES ('Konsultant');
select * from amet
create table tootaja(
tootajaID int not null Primary key IDENTITY(1,1),
tootajaNimi varchar(50),
ametID int FOREIGN KEY REFERENCES amet(ametID)
);
select * from tootaja
create table rendiLeping(
lepingID int not null Primary key IDENTITY(1,1),
rendiAlgus date,
rendiLopp date,
klientID int FOREIGN KEY REFERENCES klient(klientID),
regNumber char(6) FOREIGN KEY REFERENCES auto(regNumber),
rendiKestvus int,
hindKokku decimal(5,2),
tootajaID int FOREIGN KEY REFERENCES tootaja(tootajaID)
);
select * from rendiLeping
insert into auto(regNumber,markID,varv,v_aasta,kaigukastID,km)
values('777AAA',3,'sinine','1999',1,'7500')
insert into auto(regNumber,markID,varv,v_aasta,kaigukastID,km)
values('650ABA',2,'punane','2023',1,'50')
insert into auto(regNumber,markID,varv,v_aasta,kaigukastID,km)
values('999KLM',3,'must','2013',2,'8500')
insert into auto(regNumber,markID,varv,v_aasta,kaigukastID,km)
values('333MMM',1,'kolane','2006',1,'9990')
insert into klient(kliendiNimi, telefon, aadress,soiduKogemus)
values ('Matvei','55530826','Mustamäe tee 200','Meeldis')
insert into klient(kliendiNimi, telefon, aadress,soiduKogemus)
values ('Yaroslav','56530826','Siili 6','Ei meeldinud')
insert into klient(kliendiNimi, telefon, aadress,soiduKogemus)
values ('Denis','56530726','Aiandi 15','Meeldis')
insert into tootaja (tootajaNimi, ametID)
values ('Pavel', 1)
insert into tootaja (tootajaNimi, ametID)
values ('Aleksander', 3)
insert into tootaja (tootajaNimi, ametID)
values ('Darja', 2)
insert into rendiLeping(rendiAlgus,rendiLopp,klientID,regNumber,rendiKestvus,hindKokku,tootajaID)
values ('2023-05-26','2023-06-26',1,'777AAA',30,500,2)
insert into rendiLeping(rendiAlgus,rendiLopp,klientID,regNumber,rendiKestvus,hindKokku,tootajaID)
values ('2023-06-15','2023-06-20',2,'650ABA',15,750,3)
insert into rendiLeping(rendiAlgus,rendiLopp,klientID,regNumber,rendiKestvus,hindKokku,tootajaID)
values ('2023-06-20','2023-06-22',3,'333MMM',2,50,1)
select * from auto, mark, kaigukast
where mark.markID=auto.markID and kaigukast.kaigukastID=auto.kaigukastID
---или 
select * from auto
INNER JOIN mark ON mark.markID=auto.markID
INNER JOIN kaigukast ON kaigukast.kaigukastID=auto.kaigukastID
SELECT auto.regNumber, kaigukast.kaigukast
FROM auto, kaigukast
Where kaigukast.kaigukastID=auto.kaigukastID
---или
SELECT auto.regNumber, mark.autoMark
FROM auto
INNER JOIN mark ON mark.markID=auto.markID
SELECT klient.kliendiNimi, rendileping.lepingId, auto.regNumber
FROM rendileping
INNER JOIN klient ON rendileping.klientId=klient.klientId
INNER JOIN auto ON rendileping.regNumber=auto.regNumber
SELECT kaigukast.kaigukast, Count(auto.autoId) AS kogus
FROM auto, kaigukast
Where auto.kaigukastId=kaigukast.kaigukastId
GROUP by  kaigukast.kaigukast
SELECT auto.regNumber, tootaja.tootajaNimi 
from auto, tootaja, rendileping
where tootaja.tootajaId=rendileping.tootajaId and rendileping.regNumber=auto.regNumber
SELECT auto.regNumber, tootaja.tootajaNimi 
from auto, tootaja, rendileping
where tootaja.tootajaId=rendileping.tootajaId and rendileping.regNumber=auto.regNumber
and (rendileping.rendiAlgus between '2022-01-10' and '2022-03-12')
select count(lepingID) as lepingud, sum(hindKokku) as kõigestLepingutestTulek
from rendiLeping
where (rendileping.rendiAlgus between '2023-01-10' and '2024-01-10')

Создаем пользователя и его параметры

---выдаем права на просмотр и добавление
use AutorentKemppi;
grant select to tootaja;
grant insert on rendiLeping to tootaja;

Проверка пользователя

логинимся под нашим пользователем и паролем
select * from auto
insert into rendiLeping(rendiAlgus,rendiLopp,klientID,regNumber,rendiKestvus,hindKokku,tootajaID)
values('2023-06-15','2023-06-20',2,'650ABA',15,'650',3)
drop table auto
update auto set varv= 'sinine'
WHERE autoID = 2;

Создание процедур

---lisamine tabelisse mark
use AutorentKemppi;
go
create procedure lisaAutod
@uusautoMark varchar(30)
as
begin
insert into mark(autoMark)
values(@uusautoMark);
select * from mark;
end
 
exec lisaAutod @uusautoMark='Bentley'
lisaAutod – protseduur
---lisamine tabelisse klient
use AutorentKemppi;
go
create procedure lisaKliendid
@uusklient varchar(50),
@uustelefon varchar(20),
@uusaadress varchar(50),
@uusSoiduKogemus varchar(30)
as
begin
insert into klient(kliendiNimi, telefon, aadress,soiduKogemus)
values(@uusklient,@uustelefon,@uusaadress,@uusSoiduKogemus);
select * from klient;
end
 
exec lisaKliendid @uusklient = 'Denis' ,@uustelefon = '56827832' ,@uusaadress = 'Mustamäe tee 170' ,@uusSoiduKogemus = 'Meeldis' 
lisaKliendid – protseduur
---kustuta lepping ID-ga
use AutorentKemppi;
go
create procedure LepinguKustutamine
@kustutaID int
as
begin
select * from rendiLeping;
 
delete from rendiLeping
where lepingID=@kustutaID;
 
select * from rendiLeping;
end
 
exec LepinguKustutamine @kustutaID=3;

LepinguKustutamine – protseduur
---Näita tulemused mis on suurem kui
use AutorentKemppi;
go
create procedure suuremKui
@hind int
as
begin
select * from rendiLeping
where hindKokku > @hind;
end
exec suuremKui @hind = 250

suuremKui – protseduur