-- POGLEDE VIEW
-- napraviti pogled
-- u pogledu imati ispitne rokove cija je skolska godina >= 2018

CREATE VIEW ispitni_rok_2018 AS
SELECT skgodina, oznakaroka, naziv, datpocetka, datkraja
FROM ispitnirok
WHERE skgodina >= 2018;

SELECT * 
FROM ispitnirok
WHERE skgodina >=2018
	AND oznakaroka LIKE '%test%';

SELECT * 
FROM ispitni_rok_2018
WHERE oznakaroka LIKE '%test%';

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2018, 'test', 'test 2018', '04/04/2018', '10/04/2018');

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2018, 'test1', 'test1 2018', '04/05/2018', '10/05/2018');

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2018, 'test2', 'test2 2018', '04/06/2018', '10/06/2018');

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2019, 'test', 'test 2019', '04/04/2019', '10/04/2019');

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2019, 'test1', 'test1 2019', '04/05/2019', '10/05/2019');

UPDATE ispitni_rok_2018
SET oznakaroka = 'test0'
WHERE oznakaroka = 'test';

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2017, 'test', 'test 2017', '04/05/2017', '10/05/2017');

UPDATE ispitni_rok_2018
SET skgodina = 2017
WHERE oznakaroka = 'test2';

SELECT * 
FROM ispitnirok
WHERE oznakaroka LIKE '%test%';

SELECT * 
FROM ispitni_rok_2018
WHERE oznakaroka LIKE '%test%';

-- Dok posmatramo ovaj pogled treba primetiti razlike ukoliko zadamo
-- LOCAL ili CASCADED(isto sto i bez specifikacije) CHECK OPTION
-- takodje probati sta se desava kada se te opcije dodaju 
-- samo u pogled ispitni_rok_2018
CREATE VIEW ispitni_rok_test AS
SELECT skgodina, oznakaroka, naziv, datpocetka, datkraja
FROM ispitni_rok_2018
WHERE oznakaroka LIKE 'test%'
WITH LOCAL CHECK OPTION;

SELECT *
FROM ispitni_rok_test;

INSERT INTO ispitni_rok_test(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2019, 'test2', 'test 2019', '04/06/2019', '10/06/2019');


INSERT INTO ispitni_rok_test(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2017, 'test', 'test 2017', '04/05/2017', '10/05/2017');

INSERT INTO ispitni_rok_test(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2017, '_test', '_test 2017', '04/05/2017', '10/05/2017');

DELETE FROM ispitnirok
WHERE oznakaroka LIKE '%test%';
DROP VIEW ispitni_rok_2018;
DROP VIEW ispitni_rok_test;


CREATE VIEW ispitni_rok_2018 AS
SELECT ir.skgodina, ir.oznakaroka, ir.naziv, ir.datpocetka, ir.datkraja
FROM ispitnirok ir JOIN skolskagodina sg
	ON ir.skgodina = sg.skgodina
WHERE YEAR(sg.datpocetka) >= 2018;

SELECT * FROM ispitni_rok_2018;

INSERT INTO ispitni_rok_2018(skgodina, oznakaroka, naziv, datpocetka, datkraja)
VALUES (2019, 'test1', 'test1 2019', '04/05/2019', '10/05/2019');

CREATE VIEW ir_proseci
AS
SELECT skgodina, oznakaroka, AVG(ocena + 0.0) prosek
FROM ispit
WHERE ocena > 5 AND status = 'o'
GROUP BY skgodina, oznakaroka;

SELECT * FROM ir_proseci;

DROP VIEW ir_proseci;


-- 1. Kreirati pogled kojim se izdvajaju sva polaganja studenata
--   koji se zovu Marko ili Maja
--   i koji su u junskom ispitnom roku 2018 godine polozili bar jedan ispit
--   napraviti pogled nad kojim je dozvoljeno azuriranje ili ubacivanje novih podataka

CREATE OR REPLACE VIEW ispiti_marko_maja AS
SELECT DISTINCT i.*
FROM ispit i JOIN dosije d
		ON i.indeks = d.indeks
	 JOIN ispit i1 ON i1.indeks = d.indeks
WHERE d.ime IN ('Marko', 'Maja')
	AND i1.oznakaroka = 'jun1'
	AND i1.skgodina = 2018
	AND i1.ocena > 5
	AND i1.status = 'o';

CREATE OR REPLACE VIEW ispiti_marko_maja AS
SELECT *
FROM ispit i
WHERE i.indeks IN (SELECT indeks FROM dosije
				   WHERE ime IN ('Marko', 'Maja'))
   	AND i.indeks IN (SELECT DISTINCT indeks
   					 FROM ispit
   					 WHERE skgodina = 2018
   					 	AND oznakaroka = 'jun1'
   					 	AND ocena > 5 AND status = 'o')
WITH CHECK OPTION;

SELECT * FROM ispiti_marko_maja;

DROP VIEW ispiti_marko_maja;

-- INDEX
-- 1. napraviti indeks nad tabelom dosije nad atributima ime i prezime
CREATE INDEX ON predmet (naziv DESC);

DROP INDEX dosij_ime_prezime_index;

-- primetimo da sledeca naredba 'puca' (nije ispostovan unique uslov koji smo naveli

CREATE UNIQUE INDEX dosij_ime_prezime_index ON dosije
(ime DESC, prezime DESC);

-- dok ovako nesto prolazi:
CREATE UNIQUE INDEX dosij_ime_prezime_index ON dosije
(ime DESC, prezime DESC, indeks);

-- 3. Za studente Osnovnih akademskih studija Matematike
--     koji su upisani 2018. godine pronaci
--    koji su obavezni predmeti ostali do zavrsetka studiranja
--    izdvoijit indeks, ime, prezime i naziv predmeta koji je ostao
--    student je upisao fakultet 2018 ako mu jeindeks oblika 2018****

SELECT d.indeks, d.ime, d.prezime, p.naziv
FROM dosije d JOIN studijskiprogram sp
		ON d.idprograma = sp.id
	JOIN nivokvalifikacije nk ON sp.idnivoa = nk.id
	JOIN predmetprograma pp ON pp.idprograma = d.idprograma
	JOIN predmet p ON pp.idpredmeta = p.id
WHERE char(d.indeks) LIKE '2018%'
	AND sp.naziv = 'Matematika'
	AND nk.naziv = 'Osnovne akademske studije'	
	AND NOT EXISTS(SELECT * FROM ispit i
					WHERE i.indeks = d.indeks
					AND i.ocena > 5 AND i.status = 'o'
					AND i.idpredmeta = p.id);


SELECT * FROM nivokvalifikacije


