Spremam ispit iz Baza Podataka na FONu i sve ide OK osim SQL pitanja a to me u stvari najvise i interesuje.
Dosta se mucim sa ovim zadatkom a ne mogu nikako da proverim da li je tacno. Probao sam da napravim bazu po modelu ali slaba vajda. Ako neko ima vremena da baci pogled samo da mi kaze jel ovo sto ja kucam ima smisla ili sam nacisto promasio...
Posebno sam se namucio pod c) ako moze neki komentar.
Hvala unapred sledi zadatak i ovo sto sam ja uradio.
Data je relaciona shema:
SEZONA ( NAZIV_SEZONE , DATOD , DATDO)
PREDSTAVA (PREDID, NAZIV, TIP)
REPERTOAR (PREDID, DATUMIVREME, STATUS)
GLUMAC (GLUMID, IME, PREZIME)
POSTAVA (PREDID, GLUMID, NAZIV_SEZONE, ULOGA)
Vrednosti atributa STATUS mogu biti “PLANIRANA”, “ODIGRANA” ili ”OTKAZANA”.
Napisati SQL:1999 naredbe kojima se:
a) Prikazati sve glumce koji u sezoni “2006/2007” nisu igrali u predstavi “Mnogo buke ni oko čega”.
(8 poena)
b) Prikazati nazive svih predstava koje su u sezoni “2005/2006” odigrane tačno jedanput.
(8 poena)
c) Kreirati pogled kojim se prikazuje NAZIV PREDSTAVE, UKUPAN BROJ ODIGRANIH PREDSTAVA,
UKUPAN BROJ OTKAZANIH PREDSTAVA koje su najviše puta odigrane do tekućeg datuma, a procenat
otkazanih u odnosu na ukupan broj predstava je manji od 10 procenata.
(8 poena)
7.
a) SELECT IME, PREZIME FROM GLUMAC WHERE GLUMID IN(SELECT DISTINCT GLUMID FROM POSTAVA WHERE NAZIV_SEZONE=’2006/2007’ AND PRED ID <> (SELECT PREDID FROM PREDSTAVA WHERE NAZIV = ’Mnogo buke ni oko cega’))
b) SELECT NAZIV FROM PREDSTAVA WHERE PREDID IN (SELECT PREDID FROM (SELECT COUNT(*) AS BROJ_ODIGRANIH_2005, PREDID FROM (SELECT PREDID FROM REPERTOAR WHERE DATUMIVREME BETWEEN (SELECT DATOD FROM SEZONA WHERE NAZIV_SEZONE=’2005/2006’) AND (SELECT DATDO FROM SEZONA WHERE NAZIV_SEZONE=’2005/2006’) AND STATUS = ’ODIGRANA’) GROUP BY PREDID) WHERE BROJ_ODIGRANIH_2005 = 1)
c) Jel ovaj pogled treba da prikaze samo jednu predstavu koja je najviše puta odigrana a da joj je procenat otkazanih u odnosu na ukupan broj predstava manji od 10%?
CREATE VIEW UKUPNO (PREDID, UKUPNO_DO_DANAS) AS SELECT PREDID, COUNT(*) FROM REPERTOAR WHERE DATUMIVREME < LOCALTIMESTAMP GROUP BY PREDID
DOBIJEMO
PREDID UKUPNO_DO_DANAS
1322 98
2162 65
… …
CREATE VIEW ODIGRANE (PREDID, ODIGRANE_DO_DANAS) AS SELECT PREDID, COUNT(*) FROM REPERTOAR WHERE DATUMIVREME < LOCALTIMESTAMP AND STATUS = ‘ODIGRANA’ GROUP BY PREDID
DOBIJEMO
PREDID ODIGRANE_DO_DANAS
1322 90
2162 45
… …
CREATE VIEW OTKAZANE (PREDID, OTKAZANE_DO_DANAS) AS SELECT PREDID, COUNT(*) FROM REPERTOAR WHERE DATUMIVREME < LOCALTIMESTAMP AND STATUS = ‘OTKAZANA’ GROUP BY PREDID
DOBIJEMO
PREDID OTKAZANE_DO_DANAS
1322 8
2162 20
… …
CREATE VIEW SUMARNO AS SELECT * FROM UKUPNO, ODIGRANE, OTKAZANE (TREBA LI DA DODAM USING(PREDID))
DOBIJEMO
PREDID UKUPNO_DO_DANAS ODIGRANE_DO_DANAS OTKAZANE_DO_DANAS
1322 98 90 8
2162 65 45 20
… … … …
CREATE VIEW TOP_PREDSTAVE (NAZIV_PREDSTAVE, UKUPAN_BROJ_ODIGRANIH_PREDSTAVA, UKUPAN_BROJ_OTKAZANIH_PREDSTAVA) AS SELECT NAZIV, ODIGRANE_DO_DANAS, OTKAZANE_DO_DANAS FROM PREDSTAVA JOIN SUMARNO WHERE (OTKAZANE_DO_DANAS/ UKUPNO_DO_DANAS)<0.10
CREATE VIEW TOP_PREDSTAVA AS SELECT * FROM TOP_PREDSTAVE WHERE UKUPAN_BROJ_ODIGRANIH_PREDSTAVA = MAX(UKUPAN_BROJ_ODIGRANIH_PREDSTAVA)
Dosta se mucim sa ovim zadatkom a ne mogu nikako da proverim da li je tacno. Probao sam da napravim bazu po modelu ali slaba vajda. Ako neko ima vremena da baci pogled samo da mi kaze jel ovo sto ja kucam ima smisla ili sam nacisto promasio...
Posebno sam se namucio pod c) ako moze neki komentar.
Hvala unapred sledi zadatak i ovo sto sam ja uradio.
Data je relaciona shema:
SEZONA ( NAZIV_SEZONE , DATOD , DATDO)
PREDSTAVA (PREDID, NAZIV, TIP)
REPERTOAR (PREDID, DATUMIVREME, STATUS)
GLUMAC (GLUMID, IME, PREZIME)
POSTAVA (PREDID, GLUMID, NAZIV_SEZONE, ULOGA)
Vrednosti atributa STATUS mogu biti “PLANIRANA”, “ODIGRANA” ili ”OTKAZANA”.
Napisati SQL:1999 naredbe kojima se:
a) Prikazati sve glumce koji u sezoni “2006/2007” nisu igrali u predstavi “Mnogo buke ni oko čega”.
(8 poena)
b) Prikazati nazive svih predstava koje su u sezoni “2005/2006” odigrane tačno jedanput.
(8 poena)
c) Kreirati pogled kojim se prikazuje NAZIV PREDSTAVE, UKUPAN BROJ ODIGRANIH PREDSTAVA,
UKUPAN BROJ OTKAZANIH PREDSTAVA koje su najviše puta odigrane do tekućeg datuma, a procenat
otkazanih u odnosu na ukupan broj predstava je manji od 10 procenata.
(8 poena)
7.
a) SELECT IME, PREZIME FROM GLUMAC WHERE GLUMID IN(SELECT DISTINCT GLUMID FROM POSTAVA WHERE NAZIV_SEZONE=’2006/2007’ AND PRED ID <> (SELECT PREDID FROM PREDSTAVA WHERE NAZIV = ’Mnogo buke ni oko cega’))
b) SELECT NAZIV FROM PREDSTAVA WHERE PREDID IN (SELECT PREDID FROM (SELECT COUNT(*) AS BROJ_ODIGRANIH_2005, PREDID FROM (SELECT PREDID FROM REPERTOAR WHERE DATUMIVREME BETWEEN (SELECT DATOD FROM SEZONA WHERE NAZIV_SEZONE=’2005/2006’) AND (SELECT DATDO FROM SEZONA WHERE NAZIV_SEZONE=’2005/2006’) AND STATUS = ’ODIGRANA’) GROUP BY PREDID) WHERE BROJ_ODIGRANIH_2005 = 1)
c) Jel ovaj pogled treba da prikaze samo jednu predstavu koja je najviše puta odigrana a da joj je procenat otkazanih u odnosu na ukupan broj predstava manji od 10%?
CREATE VIEW UKUPNO (PREDID, UKUPNO_DO_DANAS) AS SELECT PREDID, COUNT(*) FROM REPERTOAR WHERE DATUMIVREME < LOCALTIMESTAMP GROUP BY PREDID
DOBIJEMO
PREDID UKUPNO_DO_DANAS
1322 98
2162 65
… …
CREATE VIEW ODIGRANE (PREDID, ODIGRANE_DO_DANAS) AS SELECT PREDID, COUNT(*) FROM REPERTOAR WHERE DATUMIVREME < LOCALTIMESTAMP AND STATUS = ‘ODIGRANA’ GROUP BY PREDID
DOBIJEMO
PREDID ODIGRANE_DO_DANAS
1322 90
2162 45
… …
CREATE VIEW OTKAZANE (PREDID, OTKAZANE_DO_DANAS) AS SELECT PREDID, COUNT(*) FROM REPERTOAR WHERE DATUMIVREME < LOCALTIMESTAMP AND STATUS = ‘OTKAZANA’ GROUP BY PREDID
DOBIJEMO
PREDID OTKAZANE_DO_DANAS
1322 8
2162 20
… …
CREATE VIEW SUMARNO AS SELECT * FROM UKUPNO, ODIGRANE, OTKAZANE (TREBA LI DA DODAM USING(PREDID))
DOBIJEMO
PREDID UKUPNO_DO_DANAS ODIGRANE_DO_DANAS OTKAZANE_DO_DANAS
1322 98 90 8
2162 65 45 20
… … … …
CREATE VIEW TOP_PREDSTAVE (NAZIV_PREDSTAVE, UKUPAN_BROJ_ODIGRANIH_PREDSTAVA, UKUPAN_BROJ_OTKAZANIH_PREDSTAVA) AS SELECT NAZIV, ODIGRANE_DO_DANAS, OTKAZANE_DO_DANAS FROM PREDSTAVA JOIN SUMARNO WHERE (OTKAZANE_DO_DANAS/ UKUPNO_DO_DANAS)<0.10
CREATE VIEW TOP_PREDSTAVA AS SELECT * FROM TOP_PREDSTAVE WHERE UKUPAN_BROJ_ODIGRANIH_PREDSTAVA = MAX(UKUPAN_BROJ_ODIGRANIH_PREDSTAVA)