--------------------------------------------------------------------------
-- Vježba 1.
--------------------------------
-- Napravite pogled koji će dohvaćati sve stupce i retke iz tablice Kategorija
CREATE VIEW v1 AS
SELECT * FROM Kategorija
GO
--------------------------------

--------------------------------
-- Vježba 1a.
--------------------------------
-- Ispišite nazive kategorija, potkategorija i proizvoda (koristite kreirani pogled)
SELECT
	v1.Naziv as 'Kategorija',
	Potkategorija.Naziv as 'Potkategorija',
	Proizvod.Naziv as 'Proizvod'
FROM v1
RIGHT JOIN Potkategorija ON Potkategorija.KategorijaID = v1.IDKategorija
RIGHT JOIN Proizvod ON Proizvod.PotkategorijaID = Potkategorija.IDPotkategorija
GO
--------------------------------

--------------------------------
-- Vježba 1b.
--------------------------------
-- Pomoću pogleda umetnite kategoriju naziva “Alarmi”
INSERT INTO v1 (Naziv) VALUES ('Alarmi')
GO
--------------------------------

--------------------------------
-- Vježba 1c.
--------------------------------
-- Pomoću pogleda promijenite kategoriji “Alarmi” naziv u “Aktivna zaštita”
UPDATE v1 SET Naziv = 'Aktivna zaštita' WHERE Naziv = 'Alarmi'
GO
--------------------------------

--------------------------------
-- Vježba 1d.
--------------------------------
-- Pomoću pogleda obrišite kategoriju “Aktivna zaštita”
DELETE FROM v1 WHERE Naziv = 'Aktivna zaštita'
GO
--------------------------------

--------------------------------
-- Vježba 1e.
--------------------------------
-- Uklonite pogled
DROP VIEW v1
GO
--------------------------------

--------------------------------------------------------------------------
-- Vježba 2.
--------------------------------
-- Napravite pogled koji će dohvaćati naziv grada, naziv države u kojoj se nalazi te sve 
-- podatke o kupcima koji im pripadaju (tablice Grad, Drzava, Kupac).
CREATE VIEW v2 AS
SELECT
	Drzava.Naziv as 'Država',
	Grad.Naziv as 'Grad',
	Kupac.* 
FROM Kupac
LEFT JOIN Grad ON Kupac.GradID = Grad.IDGrad
LEFT JOIN Drzava ON Grad.DrzavaID = Drzava.IDDrzava
GO
-- provjera
SELECT * FROM v2
GO
--------------------------------

--------------------------------
-- Vježba 2a.
--------------------------------
-- Probajte pomoću pogleda umetnuti novi grad. Što se dogodilo?
INSERT INTO v2 (Grad) VALUES ('Bedekovčina')
GO
SELECT * FROM Grad
GO

--------------------------------

--------------------------------
-- Vježba 2b.
--------------------------------
-- Probajte pomoću pogleda umetnuti novu državu. Što se dogodilo?
INSERT INTO v2 (Država) VALUES ('Uzbekistan')
GO
SELECT * FROM Drzava
GO
--------------------------------

--------------------------------
-- Vježba 2c.
--------------------------------
-- Probajte pomoću pogleda umetnuti novog kupca. Što se dogodilo? Možete li vidjeti novododanog kupca kroz pogled? Postoji li on u tablici?
INSERT INTO v2 (Ime, Prezime) 
	VALUES ('Pero','Perić')
GO
SELECT * FROM Kupac
GO
SELECT * FROM v2
GO
--------------------------------

--------------------------------
-- Vježba 2d.
--------------------------------
-- Uklonite pogled
DROP VIEW v2
GO
--------------------------------

--------------------------------------------------------------------------
-- Vježba 3.
--------------------------------
-- Napravite pogled koji će dohvaćati sve kreditne kartice koje su tipa Visa ili MasterCard (tablica KreditnaKastica)
CREATE VIEW v3 AS
SELECT * FROM KreditnaKartica WHERE Tip IN ('Visa', 'MasterCard')
GO
--------------------------------

--------------------------------
-- Vježba 3a i 3b.
--------------------------------
-- Umetnite zapis o kreditnoj kartici tipa American Express.
-- Dohvatiti umetnuti redak pomoću pogleda. Što se dogodilo? Je li redak uspješno umetnut u tablicu?
INSERT INTO v3 (Tip, Broj,IstekMjesec, IstekGodina) 
VALUES ('American Express', '111222333444', 12, 2012)
GO
SELECT * FROM v3 WHERE Tip = 'American Express'
GO

--------------------------------

--------------------------------
-- Vježba 3c.
--------------------------------
-- Promijenite pogled tako da ne dopušta umetanje/izmjenu redaka koji neće biti vidljivi kroz njega.
ALTER VIEW v3 AS
SELECT * FROM KreditnaKartica WHERE Tip IN ('Visa', 'MasterCard')
WITH CHECK OPTION
GO
INSERT INTO v3 (Tip, Broj,IstekMjesec, IstekGodina) 
VALUES ('American Express', '111222333444', 12, 2012)
GO
--------------------------------

--------------------------------
-- Vježba 3d.
--------------------------------
-- Umetnite zapis o kreditnoj kartici tipa MasterCard. Što se dogodilo? Je li redak uspješno umetnut u tablicu?
INSERT INTO v3 (Tip, Broj,IstekMjesec, IstekGodina) 
VALUES ('MasterCard', '111222333444', 12, 2012)
GO
--------------------------------

--------------------------------
-- Vježba 3e.
--------------------------------
-- Promijenite pogled tako da dopušta umetanje/izmjenu redaka koji neće biti vidljivi kroz njega.
ALTER VIEW v3 AS
SELECT * FROM KreditnaKartica WHERE Tip IN ('Visa', 'MasterCard')
GO
--------------------------------

--------------------------------
-- Vježba 3f.
--------------------------------
-- Uklonite pogled
DROP VIEW v3
GO
--------------------------------

-- Vježbe 4.
/*
Napravite tablicu Film sa stupcima IDFilm, Naziv, GodinaProizvodnje, TrajanjeMinuta i KratkiOpis. Umetnite koji redak. 
Napravite pogled koji dohvaća sve iz tablice Film
Iskoristite pogled za dohvaćanje podataka
Uklonite stupac TrajanjeMinuta iz tablice
Iskoristite pogled za dohvaćanje podataka
Promijenite pogled tako da bude čvrsto vezan uz objekte koje koristi
Iskoristite pogled za dohvaćanje podataka
Uklonite stupac GodinaProizvodnje iz tablice. Je li uklanjanje uspjelo? Zašto?
Uklonite pogled i tablicu
*/
CREATE TABLE Film
(
	IDFilm int CONSTRAINT PK_Film PRIMARY KEY IDENTITY,
	Naziv nvarchar(200) NOT NULL,
	GodinaProizvodnje int NOT NULL,
	TrajanjeMinuta int NOT NULL,
	KratkiOpis nvarchar(max) NOT NULL
)
GO
INSERT INTO Film (Naziv, GodinaProizvodnje, TrajanjeMinuta, KratkiOpis) 
	VALUES (N'O mačkama i psima 2: Osveta Kitty Galore', 2010, 85, N'U vječnoj bitci mačaka i pasa, jedna poludjela mačka odvest će stvari jednu šapu predaleko. Kitty Galore, bivša agentica špijunske organizacije MIJAU, pobjegla je i skovala đavolji plan u kojem ne samo da će pokušati pripitomiti svoje vječne neprijatelje, već i svoje bivše kolege mačke, ali i cjelokupno čovječanstvo. Suočeni s ovom prijetnjom bez presedana, mačke i psi biti će prisiljeni prvi put u povijesti udružiti snage kako bi spasili sebe – ali i svoje vlasnike')
INSERT INTO Film (Naziv, GodinaProizvodnje, TrajanjeMinuta, KratkiOpis) 
	VALUES (N'Shrek uvijek i zauvijek', 2010, 95, N'Nakon što se borio s opakim zmajem, spasio prekrasnu princezu i oslobodio čitavo kraljevstvo – kakav bi zadatak još mogao postojati u životu slavnog Shreka? Odgovor je jasan: obitelj, odnosno svakodnevna bitka s malim nestašnim Shrekićima. Međutim, sve će to biti kratka vijeka, jer će Shrek ubrzo upoznati lukavog Rumpelstiltskina i iznenada se naći u potpuno drugoj dimenziji, alternativnoj budućnosti u kojoj se on i Fiona nikad nisu susreli, u kojoj je baš on ugrožena vrsta, a Rumpelstiltskin kralj! Naravno, jedino je Shrek taj koji će moći ispraviti novonastalu situaciju, spasiti prijatelje, obnoviti kraljevstvo i ponovno pronaći svoju pravu, jedinu ljubav.')
INSERT INTO Film (Naziv, GodinaProizvodnje, TrajanjeMinuta, KratkiOpis) 
	VALUES (N'Resident Evil: Drugi svijet', 2010, 90, N'Svijet je poharan virusnom infekcijom od koje oboljeli postaju zombiji. Alice (Milla Jovovich) pronalazi preživjele i spašava ih. Njezina bitka s Umbrella Corporation dostiže smrtonosne razine, no u pomoć joj priskače stari prijatelj. U nadi da će pronaći sigurno mjesto odlaze prema Los Angelesu. No, grad je preplavljen tisućama zombija i oni će naletjeti u zamku')
GO

CREATE VIEW v4 AS
SELECT * FROM Film
GO

SELECT * FROM v4
GO

ALTER TABLE Film DROP COLUMN TrajanjeMinuta
GO

ALTER VIEW v4 
WITH SCHEMABINDING
AS
SELECT IDFilm, Naziv, GodinaProizvodnje, KratkiOpis FROM dbo.Film
GO

SELECT * FROM v4
GO

ALTER TABLE Film DROP COLUMN GodinaProizvodnje
GO

DROP VIEW v4
DROP TABLE Film
GO

-- Vježbe 5.
/*
Napravite pogled koji dohvaća 10 proizvoda koji su najviše prodavani. Stupci koje pogled vraća neka budu ID i naziv te ukupna količina prodanih proizvoda.
Pogledajte SELECT upit pogleda kroz sučelje i pomoću sistemske procedure sp_helptext
Zaštitite pogled
Pogledajte SELECT upit pogleda kroz sučelje i pomoću sistemske procedure sp_helptext
Promijenite pogled tako da bude zaštićen i čvrsto vezan uz tablice
Promijenite pogled tako da bude zaštićen, čvrsto vezan uz tablice i da ne dopušta izmjene koje neće biti vidljive kroz pogled
Uklonite pogled
*/
CREATE VIEW v5 AS
SELECT TOP 10 
	Proizvod.IDProizvod AS 'ID',
	Proizvod.Naziv,
	SUM(Stavka.Kolicina) AS 'UkupnaKolicina'
FROM Proizvod
INNER JOIN Stavka ON Stavka.ProizvodID = Proizvod.IDProizvod
GROUP BY Proizvod.IDProizvod, Proizvod.Naziv
ORDER BY 3 DESC
GO

SELECT * FROM v5
GO

EXECUTE sp_helptext v5
GO

ALTER VIEW v5 
WITH ENCRYPTION
AS
SELECT TOP 10 
	Proizvod.IDProizvod AS 'ID',
	Proizvod.Naziv,
	SUM(Stavka.Kolicina) AS 'UkupnaKolicina'
FROM Proizvod
INNER JOIN Stavka ON Stavka.ProizvodID = Proizvod.IDProizvod
GROUP BY Proizvod.IDProizvod, Proizvod.Naziv
ORDER BY 3 DESC
GO

EXECUTE sp_helptext v5
GO

ALTER VIEW v5 
WITH ENCRYPTION, SCHEMABINDING
AS
SELECT TOP 10 
	dbo.Proizvod.IDProizvod AS 'ID',
	dbo.Proizvod.Naziv,
	SUM(dbo.Stavka.Kolicina) AS 'UkupnaKolicina'
FROM dbo.Proizvod
INNER JOIN dbo.Stavka ON dbo.Stavka.ProizvodID = dbo.Proizvod.IDProizvod
GROUP BY dbo.Proizvod.IDProizvod, dbo.Proizvod.Naziv
ORDER BY 3 DESC
GO

ALTER VIEW v5 
WITH ENCRYPTION, SCHEMABINDING
AS
SELECT TOP 10 
	dbo.Proizvod.IDProizvod AS 'ID',
	dbo.Proizvod.Naziv,
	SUM(dbo.Stavka.Kolicina) AS 'UkupnaKolicina'
FROM dbo.Proizvod
INNER JOIN dbo.Stavka ON dbo.Stavka.ProizvodID = dbo.Proizvod.IDProizvod
GROUP BY dbo.Proizvod.IDProizvod, dbo.Proizvod.Naziv
ORDER BY 3 DESC
WITH CHECK OPTION
GO

DROP VIEW v5
GO
