Z2-Rešenja
- Primer 1
- Primer 2
- Primer 3
- Primer 4
- Primer 5
- Primer 6
- Primer 7
- Primer 8
- Primer 9
- Primer 10
- Primer 11
- Primer 12
- Primer 13
- Primer 14
- Primer 15
- Primer 16
Primer 1
Prikazati šifru i naziv predmeta.
-- file: 'primer2-1.sql'
RANGE OF PX IS PREDMET
PX.SIFRA, PX.NAZIV
Primer 2
Prikazati podatke o predmetima koji imaju po 6 kredita.
-- file: 'primer2-2.sql'
RANGE OF PX IS PREDMET
P.* WHERE KREDITI = 6
Primer 3
Izdvojiti ime i prezime studenta sa indeksom 25/2010.
-- file: 'primer2-3.sql'
RANGE OF DX IS DOSIJE
DX.IME, DX.PREZIME WHERE INDEKS = 20100025
Primer 4
Za svakog studenta izdvojiti predmete koje je polagao. Izdvojiti indeks studenta, naziv predmeta i ocenu koju je dobio.
-- file: 'primer2-4.sql'
RANGE OF IX IS ISPIT
RANGE OF PX IS PREDMET
IX.INDEKS, PX.NAZIV, IX.OCENA WHERE
IX.ID_PREDMETA=PX.ID_PREDMETA
Primer 5
Izdvojiti parove predmeta koji imaju isti broj kredita. Izdvojiti šifre i nazive predmeta.
-- file: 'primer2-5.sql'
RANGE OF PX, PY IS PREDMET
PX.SIFRA, PX.NAZIV, PY.SIFRA, PY.NAZIV
WHERE PX.KREDITI = PY.KREDITI AND PX.ID_PREMETA < PY.ID_PREDMETA
Primer 6
Izdvojiti šifre i nazive predmeta koje je položio student sa indeksom 26/2010.
-- file: 'primer2-6.sql'
RANGE OF PX IS PREDMET
RANGE OF IX IS ISPIT
PX.SIFRA, PX.NAZIVWHERE EXISTS IX (IX.ID_PREDMETA = PX.ID_PREDMETA AND IX.INDEKS =
20100026 AND IX.OCENA > 5)
Primer 7
Izdvojiti indekse studenata koji su polagali sve predmete.
-- file: 'primer2-7.sql'
RANGE OF PX IS PREDMET
RANGE OF IX IS ISPIT
RANGE OF DX IS DOSIJE
DX.INDEKS WHERE FORALL PX (EXISTS IX (IX.ID_PREDMETA =
PX.ID_PREDMETA AND DX.INDEKS = IX.INDEKS))
Primer 8
Pronaci nazive predmeta koji imaju po 6 kredita i koje je polagao student sa prezimenom Vukovic.
-- file: 'primer2-8.sql'
RANGE OF DX IS DOSIJE
RANGE OF PX IS PREDMET
RANGE OF IX IS ISPIT
PX.NAZIV
WHERE KREDITI = 6 AND EXISTS IX(IX.ID_PREDMETA = PX.ID_PREDMETA
AND EXISTS DX (DX.INDEKS = IX.INDEKS AND DX.PREZIME = ‘Vukovic’))
Primer 9
Pronaci indekse studenata koji su položili bar sve predmete koje je položio student sa indeksom 25/2010.
-- file: 'primer2-9.sql'
RANGE OF PX IS PREDMET
RANGE OF IX, IY IS ISPIT
RANGE OF DX IS DOSIJE
DX.INDEKS WHERE FORALL PX(IF EXISTS IX(IX.ID_PREDMETA =
PX.PREDMETA AND IX.INDEKS = 20100025 AND IX.OCENA>5) THEN EXISTS
IY(IY.ID_PREDMETA = PX.ID_PREDMETA AND IY.INDEKS = DX.INDEKS AND
IX.OCENA >5))
Primer 10
Pronaci indeks, ime i prezime studenta koji je položio samo Programiranje 1.
-- file: 'primer2-10.sql'
RANGE OF PX IS PREDMETRANGE OF IX, IY IS ISPIT
RANGE DX OF DOSIJE
DX.INDEKS, DX.IME, DX.PREZIME
WHERE EXISTS IX (IX.INDEKS = DX.INDEKS AND IX.OCENA > 5 AND EXISTS
PX (PX.ID_PREDMETA = IX.ID_PREDMETA AND PX.NAZIV = ‘Programiranje 1’
AND NOT EXISTS IY(IY.INDEKS = DX.INDEKS AND IY.ID_PREDMETA <>
PX.ID_PREDMETA AND IY.OCENA >5)))
Primer 11
Pronaći predmet sa najvećim brojem kredita. Izdvojiti naziv i broj kredita predmeta.
-- file: 'primer2-11.sql'
-- Relaciona algebra:
DEFINE ALIAS P1 FOR PREDMET
DEFINE ALIAS P2 FOR PREDMET
DEFINE ALIAS P3 FOR PREDMET
(PREDMET[NAZIV, KREDITI]
MINUS
((P1 TIMES P2) WHERE P1.KREDITI <P2.KREDITI)[P1.KREDITI]) JOIN
P3)[P3.NAZIV, KREDITI]
-- Relacioni račun:
RANGE OD PX, PY IS PREDMET
PX.KREDITI, PX.NAZIV WHERE NOT EXISTS PY (PY.KREDITI > PX.KREDITI)
Primer 12
Pronaci studente koji su položili neki predmet sa 6 kredita. Izdvojiti indeks, ime, prezime i naziv predmeta.
-- file: 'primer2-12.sql'
-- Relaciona algebra:
(DOSIJE JOIN (ISPIT WHERE OCENA > 5) JOIN (PREDMET WHERE KREDITI =
6))[DOSIJE.INDEKS, DOSIJE.IME, DOSIJE.PREZIME, PREDMET.NAZIV]
-- Relacioni račun:
RANGE OF PX IS PREDMET
RANGE OF IX IS ISPIT
RANGE OF DX IS DOSIJE
DX.INDEKS, DX.IME, DX.PREZIME, PX.PREDMET
WHERE PX.KREDITI = 6 AND EXISTS IX (IX.ID_PREDMETA =
PX.ID_PREDMETA AND IX.OCENA > 5 AND IX.INDEKS = DX.INDEKS)
Primer 13
Pronaci studenta koji je u jednoj godini položio sve predmete. Izdvojiti godinu i indeks.
-- file: 'primer2-13.sql'
-- Relaciona algebra:
(ISPIT WHERE OCENA>5)[GODINA_ROKA, INDEKS, ID_PREDMETA]
DIVIDE BY
PREDMET[ID_PREDMETA]
-- Relacioni račun:
RANGE OF PX IS PREDMET
RANGE OD DX, DY IS DOSIJE
RANGE OF IRX IS ISPITNI_ROK
RANGE OF IX IS ISPIT
IRX.GODINA_ROKA, DY.INDEKS
WHERE EXISTS DX(FORALL PX(EXISTS IX
(IX.GODINA_ROKA=IRX.GODINA_ROKA AND IX.INDEKS=DX.INDEKS AND
IX.ID_PREDMETA=PX.ID_PREDMETA AND IX.OCENA>5))
Primer 14
Pronaci studente koji su predmet sa identifikatorom 4002 polagali tacno dva puta.
-- file: 'primer2-14.sql'
-- Relaciona algebra:
DEFINE ALIAS I1 FOR ISPIT
DEFINE ALIAS I2 FOR ISPITDEFINE ALIAS I3 FOR ISPIT
((I1 TIMES I2) WHERE I1.INDEKS=I2.INDEKS AND I1.ID_PREDMETA=4002 AND
I2.ID_PREDMETA=4002 AND (I1.GODINA_ROKA<>I2.GODINA_ROKA OR
I1.OZNAKA_ROKA<>I2.OZNAKA_ROKA)[I1.INDEKS]
MINUS
((I1 TIMES I2 TIMES I3) WHERE I1.INDEKS=I2.INDEKS AND
I1.INDEKS=I3.INDEKS AND I1.ID_PREDMETA=4002 AND
I2.ID_PREDMETA=4002 AND I3.ID_PREDMETA=4002 AND
(I1.GODINA_ROKA<>I2.GODINA_ROKA OR
I1.OZNAKA_ROKA<>I2.OZNAKA_ROKA) AND
(I1.GODINA_ROKA<>I3.GODINA_ROKA OR
I1.OZNAKA_ROKA<>I3.OZNAKA_ROKA) AND
(I2.GODINA_ROKA<>I3.GODINA_ROKA OR
I2.OZNAKA_ROKA<>I3.OZNAKA_ROKA )[I1.INDEKS]
-- Relacioni račun:
RANGE OF DX IS DOSIJE
RANGE OF IX,IY,IZ IS ISPIT
DX.INDEKS
WHERE EXISTS IX(IX.INDEKS=DX.INDEKS AND IX.ID_PREDMETA=4002 AND
EXISTS IY(IY.INDEKS=DX.INDEKS AND IY.ID_PREDMETA=4002 AND
(IX.GODINA_ROKA<>IY.GODINA_ROKA OR
IX.OZNAKA_ROKA<>IY.OZNAKA_ROKA) AND NOT EXISTS
IZ(IZ.INDEKS=DX.INDEKS AND IZ.ID_PREDMETA=4002 AND
(IX.GODINA_ROKA<>IZ.GODINA_ROKA OR
IX.OZNAKA_ROKA<>IZ.OZNAKA_ROKA) AND
(IY.GODINA_ROKA<>IZ.GODINA_ROKA OR
IY.OZNAKA_ROKA<>IZ.OZNAKA_ROKA))))
Primer 15
Pronaci predmete koje su položili dva studenta rodjena iste godine. Izdvojiti godinu i naziv predmeta.
-- file: 'primer2-15.sql'
-- Relaciona algebra:
DEFINE ALIAS ISPIT1 FOR ISPIT
DEFINE ALIAS DOSIJE1 FOR DOSIJE
(((ISPIT WHERE OCENA>5) JOIN DOSIJE) TIMES ((ISPIT1 WHERE OCENA>5)
JOIN DOSIJE1)) WHERE ISPIT.ID_PREDMETA=ISPIT1.ID_PREDMETA ANDISPIT.INDEKS<>ISPIT1.INDEKS AND
DOSIJE.GOD_RODJENJA=DOSIJE1.GOD_RODJENJA)[ISPIT.ID_PREDMETA,
DOSIJE.GOD_RODJENJA] JOIN PREDMET)[GOD_RODJENJA, NAZIV]
-- Relacioni račun:
RANGE OF PX IS PREDMET
RANGE OF DX, DY IS DOSIJE
RANGE OF IX, IY IS ISPIT
DX.GOD_RODJENJA, PX.NAZIV
WHERE EXISTS IX(IX.INDEKS=DX.INDEKS AND
IX.ID_PREDMETA=PX.ID_PREDMETA AND IX.OCENA>5 AND EXISTS
IY(IY.ID_PREDMETA=PX.ID_PREDMETA AND IY.OCENA>5 AND EXISTS
DY(DY.INDEKS<>DX.INDEKS AND
DX.GOD_RODJENJA=DY.GOD_RODJENJA)))
Primer 16
Pronaci studenta koji:
-- file: 'primer2-16.sql'
-- je položio sve predmete od 6 kredita
-- Relaciona algebra:
(ISPIT WHERE OCENA>5)[INDEKS, ID_PREDMETA]
DIVIDE BY
(PREDMET WHERE KREDITI=6)[ID_PREDMETA]
-- Relacioni račun:
RANGE OF PX IS PREDMET
RANGE OF DX IS DOSIJE
RANGE OF IX IS ISPIT
DX.INDEKS
WHERE FORALL PX( IF PX.KREDITI=6 THEN EXISTS
IX(IX.INDEKS=DX.INDEKS AND IX.ID_PREDMETA=PX.ID_PREDMETA AND
IX.OCENA>5)
-- je položio neki predmet od 6 kredita ali ne i sve predmete od 6 kredita
-- Relaciona algebra:
((ISPIT WHERE OCENA>5) JOIN (PREDMET WHERE KREDITI=6))[INDEKS]
MINUS
((ISPIT WHERE OCENA>5)[INDEKS, ID_PREDMETA]DIVIDE BY
(PREDMET WHERE KREDITI=6)[ID_PREDMETA])
-- Relacioni račun:
RANGE OF PX, PY IS PREDMET
RANGE OF DX IS DOSIJE
RANGE OF IX, IY IS ISPIT
DX.INDEKS
WHERE EXISTS PX(PX.KREDITI=6 AND NOT EXISTS
IX(IX.INDEKS=DX.INDEKS AND IX.ID_PREDMETA=PX.ID_PREDMETA AND
IX.OCENA>5))
AND EXISTS PY(PY.KREDITI=6 AND EXISTS IY(IY.INDEKS=DX.INDEKS AND
IY.ID_PREDMETA=PY.ID_PREDMETA AND IY.OCENA>5)
-- nije položio sve predmete od 6 kredita.
-- Relaciona algebra:
DOSIJE[INDEKS]
MINUS
((ISPIT WHERE OCENA>5)[INDEKS, ID_PREDMETA]
DIVIDE BY
(PREDMET WHERE KREDITI=6)[ID_PREDMETA])