1. Päringud

1.Koosta päring, mis kuvab kõik tooted koos nende kategooriate nimedega.

2. Leia kõige kallim toode igast kategooriast

3.Kuvada kõik kategooriad ja nende toodete arv

4. Leia toodete keskmine hind kategooria kaupa.

5.Kuvada ainult need kategooriad, kus pole ühtegi toodet.

6.Leia kõik tooted, mille hind on suurem kui tabeli keskmine hind

2. Vaated (VIEW)
1.Koosta päring, mis kuvab kõik tooted koos nende kategooriate nimedega.
create view toode_nimijahind as
select toodenimetus,hind from toode
--kuuvame vaade
select * from toode_nimijahind

2.Loo vaade, mis näitab kõiki tooteid koos kategooria nimega.
create view tooded_kategooria
as
select t.toodenimetus, t.hind, tk.toodekategooria from toode t
inner join toodekategooria tk on tk.toodekategooriaId = t.toodekategooriaId

3.Loo vaade, mis koondab info: kategooria nimi, toodete arv, minimaalne ja maksimaalne hind.
Alter table toode
add aktiivne bit
update toode set aktiivne = 1
select * from toode
update toode set aktiivne = 0
where toodeId = 2
Create view saadav_toode
as
select * from toode
where aktiivne = 1

4.Loo vaade, mis koondab info: kategooria nimi, toodete arv, minimaalne ja maksimaalne hind.
create view KatefooriaInfo as
select toodekategooria,
COUNT(*) as 'toodete arv',
cast(min(t.hind) as decimal (5,1)) as 'min hind',
cast (max(t.hind) as decimal (5,1)) as 'max hind'
from toodekategooria tk
inner join toode t on t.toodekategooriaId= tk.toodekategooriaId group by tk.toodekategooria;

5.Loo vaade, mis arvutab toode käibemaksu (24%) ja iga toode hind käibemaksuga.
Create view toode_kaibemaksuga as
select toodenimetus, hind,
CAST ((hind * 0.24) as decimal (5,2)) as 'Käibemaks',
CAST ((hind * 1.24) as decimal (5,2)) as 'Hind_käibemaksuga'
3. protseduurid
1.Loo protseduur, mis lisab uue toote (sisendparameetrid: tootenimi, hind, kategooriaID).
create procedure toodesse_panna
@toodeNimetus varchar(200),
@hind int,
@toodeKategooriaID int
as
begin
insert into toode (toodenimetus,hind, toodekategooriaId)
values(@toodeNimetus,@hind,@toodeKategooriaID);
select * from toode
end

2 Loo protseduur, mis uuendab toote hinda vastavalt tooteID-le.
create procedure update_hind
@toodeId int,
@hind decimal(5,2)
as
begin
select * from toode;
update toode set hind=@hind
where toodeId=@toodeId;
select * from toode;
end

3 Loo protseduur, mis kustutab toote ID järgi.
create procedure KustutaToode
@toodeID int
as
begin
delete from toode
where toodeID = @toodeID;
select * from toode
end;

4 Loo protseduur, mis tagastab kõik tooted valitud kategooriaID järgi.
create procedure LeiaToodeKategooriaJargi
@kategooria varchar(30)
as
begin
select toodekategooria, toodeNimetus, hind
from toodekategooria tk
inner join toode t on t.toodekategooriaId=tk.toodekategooriaId
where tk.toodekategooria = @kategooria
end;

5 Loo protseduur, mis tõstab kõigi toodete hindu kindlas kategoorias kindla protsendi võrra.
create procedure Protsenti
@kategooriaId int
as
begin
update toode
set hind = hind * (1+ 15/ 100)
where toodekategooriaId = @kategooriaId
select * from toode;
end;
6 Loo protseduur, mis kuvab kõige kallima toote kogu andmebaasis.
create procedure KallimHind
as
begin
select top 1 *
from toode
order by hind desc
end

3. KASUTAJAD ja ÕIGUSED
1.Loo kasutaja tootehaldur – ta saab lisada, muuta ja kustutada ainult tooted tabeli kirjeid.

GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.toode TO tootehaldur;
2.Loo kasutaja kataloogihaldur – ta saab muuta ainult toodekategooriad tabelit (INSERT, UPDATE, SELECT).

GRANT SELECT, INSERT, UPDATE ON dbo.toodekategooria TO kataloogihaldur;
3.Loo kasutaja vaataja – ta saab vaadata mõlema tabeli andmeid (SELECT), aga mitte muuta.

GRANT SELECT ON dbo.toode TO vaataja;
GRANT SELECT ON dbo.toodekategooria TO vaataja;
kasutaja kinnitus
1.tootehaldur




2.kataloogihaldur





3.vaataja


Lisa eraldi õigusraport
SELECT
CONCAT(table_schema, '.', table_name) AS scope,
grantee,
privilege_type
FROM information_schema.table_privileges
WHERE grantee IN ('tootehaldur', 'kataloogihaldur', 'vaataja');

lisaülesanne – transaktsioonide kordamine
1 Lisa uus toode turvaliselt

2 Uuenda toote hinda turvaliselt
