Z2-Rešenja

  1. Primer 1
  2. Primer 2
  3. Primer 3
  4. Primer 4
  5. Primer 5
  6. Primer 6
  7. Primer 7
  8. Primer 8
  9. Primer 9
  10. Primer 10
  11. Primer 11
  12. Primer 12
  13. Primer 13
  14. Primer 14
  15. Primer 15
  16. 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])

Comments 💬