Uvod u relacione baze podataka Ana Spasić 2. čas 1 Mala studentska baza dosije (indeks, ime, prezime, datum rodjenja, mesto rodjenja, datum upisa) predmet (id predmeta, sifra, naziv, bodovi) ispitni rok (godina roka, oznaka roka, naziv) ispit (indeks, id predmeta, godina roka, oznaka roka, ocena, datum ispita,bodovi) 2 Relacioni račun 1. Izdvojiti naziv i broj bodova za sve predmete koji se predaju na fakultetu., px.bodovi 2. Izdvojiti sve detalje o studentima rodenim u Beogradu.,, dx.datum_rodjenja, dx.mesto_rodjenja, dx.datum_upisa where dx.mesto_rodjenja = Beograd 3. Prikazati detalje svih parova student ispit takvih da je student polagao taj ispit.,, dx.datum_rodjenja, dx.mesto_rodjenja, ix.id_predmeta, ix.ocena, ix.datum_ispita, ix.godina_roka, ix.oznaka_roka where ix.indeks = 1
4. Prikazati ime i prezime studenta koji je polagao predmet čiji identifikator je 2001. where exists ix(ix.indeks = and ix.id_predmeta = 2001) 5. Izdvojiti brojeve indeksa studenata koji su polagali sve predmete. where forall px( exists ix( ix.indeks = where not exists px( not exists ix( ix.indeks = 6. Prikazati ime i prezime studenta koji je položio najmanje 1 predmet koji nosi 6 bodova. where exists px( px.bodovi = 6 and exists ix( ix.indeks = and ix.ocena > 5 where exists ix(ix.indeks = and ix.ocena > 5 and exists px(ix.id_predmeta = px.id_predmeta and px.bodovi = 6)) 2
7. Prikazati brojeve indeksa studenta koji su položili bar one različite predmete koje je polagao student sa brojem indeksa 20130023. where forall px(if exists ix(ix.indeks = 20130023 and px.id_predmeta = ix.id_predmeta ) then exists ix(ix.indeks = and px.id_predmeta = ix.id_predmeta and ix.ocena > 5)) range of iy is ispit where forall ix(if ix.indeks = 20130023 then exists iy(iy.indeks = and iy.ocena > 5 and ix.id_predmeta = iy.id_predmeta)) range of iy is ispit where forall ix( ix.indeks <> 20130023 or exists iy(iy.indeks = and iy.ocena > 5 and iy.id_predmeta = ix.id_predmeta)) range of iy is ispit where not exists ix(ix.indeks = 20130023 and not exists iy(iy.indeks = and ix.id_predmeta = iy.id_predmeta and iy.ocena > 5) 8. Izdvojiti nazive svih predmeta koje su položili svi studenti koji su upisali fakultet 2013. godine. where forall dx(if > 20130000 and < 20140000 3
then exists ix( ix.indeks = and ix.ocena > 5 where forall dx( < 20130000 or > 20140000 or exists ix( ix.indeks = and ix.ocena > 5 where not exists dx( > 20130000 and < 20140000 and not exists ix(ix.indeks = and ix.id_predmeta = px.id_predmeta and ix.ocena > 5)) 9. Izdvojiti ime i prezime za svakog od studenata koji nisu polagali predmet čiji identifikator je 1021. where not exists ix(ix.indeks= and ix.id_predmet = 1021) where forall ix(if ix.indeks = then ix.id_predmeta <> 1021) 10. Prikazati šifre svih predmeta koji nose 6 bodova ili ih je neko položio u roku Januar 2015. px.sifra where px.bodovi = 6 or exists ix( ix.godina_roka = 2015 and ix.oznaka_roka = jan and ix.id_predmeta = px.id_predmeta and ix.ocena > 5) 4
11. Izdvojiti nazive svih ispitnih rokova u kojima je polagan predmet Programiranje 1. irx.naziv where exists ix(ix.godina_roka = irx.godina_roka and ix.oznaka_roka = irx.oznaka_roka and exists px(px.id_predmeta=ix.id_predmeta and = Programiranje 1 )) 12. Izlistati spisak identifikatora predmeta koji nose manje bodova od predmeta čiji identifikator je 2004. range of py is predmet px.id_predmeta where exists py(py.id_predmeta = 2004 and px.bodovi < py.bodovi) 13. Prikazati imena i prezimena studenata koji imaju položen neki ispit sa ocenom 6, i neki drugi položen sa ocenom 10. where exists ix( ix.ocena = 6 and = ix.indeks) and exists ix( ix.ocena = 10 and = ix.indeks) 14. * Prikazati nazive svih predmeta koje je položio student Nikola Vukovic. where exists ix( ix.ocena>5 and ix.id_predmeta = px.id_predmeta and exists dx( = ix.indeks and dx.ime = Nikola and dx.prezime = Vukovic )) 15. * Napraviti spisak parova brojeva indeksa studenata takvih da su oba rodena u istom gradu. 5
range of dy is dosije, dy.indeks where dx.mesto_rodjenja = dy.mesto_rodjenja and < dy.indeks Uvodenjem strogog uredenja na indeksima eliminišu se semantički isti parovi indeksa: A,B i B,A. 16. * Izdvojiti nazive svih predmeta koji su studenti rodeni u Beogradu položili u aprilu 2015. where exists ix(ix.ocena>5 and ix.id_predmeta = px.id_predmeta and exists dx( = ix.indeks and dx.mesto_rodjenja = Beograd ) and exists irx(irx.godina_roka = ix.godina_roka and irx.oznaka_roka = ix.oznaka_roka and irx.naziv = April 2015 )) 17. * Prikazati imena i prezimena svih studenata koji su položili najmanje jedan ispit koji je položio student sa indeksom 20140025. where exists px( exists ix(ix.indeks = 20140025 and ix.ocena > 5 and ix.id_predmeta = px.id_predmeta) and exists ix(ix.indeks = and ix.ocena >5 18. * Prikazati oznake i godine ispitnih rokova u kojima nijedan student iz Kraljeva nije položio nijedan predmet koji nosi 4 bodova. irx.godina_roka, irx.oznaka_roka where forall dx(if dx.mesto_rodjenja = Kraljevo then not exists ix( ix.indeks = and ix.ocena > 5 and irx.godina_roka = ix.godina_roka 6
and irx.oznaka_roka = ix.oznaka_roka and exists px(ix.id_predmeta = px.id_predmeta and px.bodovi = 4)) irx.godina_roka, irx.oznaka_roka where forall dx( dx.mesto_rodjenja <> Kraljevo or not exists ix( ix.indeks = and ix.ocena > 5 and irx.godina_roka = ix.godina_roka and irx.oznaka_roka = ix.oznaka_roka and exists px(ix.id_predmeta = px.id_predmeta and px.bodovi = 4)) irx.godina_roka, irx.oznaka_roka where not exists dx( dx.mesto_rodjenja = Kraljevo and exists ix( ix.indeks = and ix.ocena > 5 and irx.godina_roka = ix.godina_roka and irx.oznaka_roka = ix.oznaka_roka and exists px(ix.id_predmeta = px.id_predmeta and px.bodovi = 4)) 7