You are on page 1of 83

Baze podataka

Predavanja
ožujak 2019.

2. Relacijski model
podataka
Relacijski model podataka

▪ E. F. Codd: "A Relational Model of Data for Large Shared


Data Banks", Comm. ACM 13, No. 6, June 1970.

Ciljevi relacijskog modela podataka:


• osigurati visoki stupanj
nezavisnosti podataka
• postaviti temelje za rješavanje
problema semantike,
konzistentnosti i redundancije
podataka (normalizacija)
• omogućiti razvoj DML jezika
temeljenih na operacijama nad
skupovima
Dr. Edgar Frank Codd (1923-2003)

© FER - Zagreb Baze podataka 2018/2019 2


Relacijski model podataka

▪ Važni projekti u ranim 70-tim: jezik ISBL temeljen na relacijskoj algebri,


jezici SQUARE i SEQUEL (DBMS System R) temeljeni na relacijskoj
algebri i predikatnom računu te Query-By-Example temeljen na
predikatnom računu nad domenama
• razvojem prototipova dokazuje se praktična upotrebljivost relacijskog
modela
• postavljaju se temelji za rješavanje problema implementacije u
područjima upravljanja transakcijama, paralelnog pristupa, obnove,
optimizacije upita, sigurnosti i konzistentnosti podataka
▪ Projekti su potaknuli:
• razvoj strukturiranog upitnog jezika (SQL)
• razvoj komercijalnih relacijskih sustava za upravljanje bazama
podataka (RDBMS)
▪ Ingres, Oracle, IBM DB2, Informix, ...
▪ danas: u upotrebi je nekoliko stotina različitih RDBMS sustava

© FER - Zagreb Baze podataka 2018/2019 3


Relacijski model podataka

▪ objekti u relacijskom modelu podataka su RELACIJE


mjesto zupanija
pbr nazMjesto sifZup sifZup nazZup
42000 Varaždin 7 2 Primorsko-goranska
51000 Rijeka 2 7 Varaždinska
52100 Pula 4 4 Istarska
51300 Delnice 2
42230 Ludbreg 7

▪ neformalna definicija: relacija je imenovana


dvodimenzionalna tablica
• atribut je imenovani stupac relacije
• domena je skup dopuštenih vrijednosti atributa
▪ nad istom domenom može biti definiran jedan ili više atributa
• n-torka (tuple) je redak relacije
© FER - Zagreb Baze podataka 2018/2019 4
Matematička relacija

▪ Relacija R definirana nad skupovima D1, D2, ..., Dn je


podskup Kartezijevog produkta skupova D1, D2, ..., Dn
R  D1  D2  ...  Dn
D1  D2  D3

D1 D2 D3
(Iva, Novak, 1987)
Iva Novak 1987 (Iva, Novak, 1989)
Hrvoje Kolar 1989 (Iva, Kolar, 1987)
Ivan (Iva, Kolar, 1989)
(Hrvoje, Novak, 1987)
(Hrvoje, Novak, 1989)
R (Hrvoje, Kolar, 1987)
(Hrvoje, Kolar, 1989)
(Ivan, Novak, 1987)
(Iva, Novak, 1989) (Ivan, Novak, 1989)
(Hrvoje, Novak, 1987) (Ivan, Kolar, 1987)
(Ivan, Kolar, 1989) (Ivan, Kolar, 1989)

© FER - Zagreb Baze podataka 2018/2019 5


Relacijska shema (formalna definicija)

▪ Neka su zadani atributi A1, A2, ..., An. Relacijska shema R


(intenzija) je imenovani skup atributa
R = { A1, A2, ..., An }

▪ radi pojednostavljenja, koristit će se i sljedeća notacija:


R = A1 A2 ... An
▪ uočite: poredak atributa u shemi relacije je nebitan
R = { A1, A2, A3 }  { A3, A1, A2 }

▪ Primjer: relacijska shema MJESTO


MJESTO = { pbr, nazMjesto, sifZup }

© FER - Zagreb Baze podataka 2018/2019 6


Relacijska shema (primjer)

▪ Zadani su atributi pbr, nazMjesto, sifZup

▪ Relacijska shema
MJESTO = { pbr, nazMjesto, sifZup }
identična je relacijskoj shemi
MJESTO = { sifZup, pbr, nazMjesto }

© FER - Zagreb Baze podataka 2018/2019 7


n-torka (formalna definicija)

▪ Neka je R = { A1, A2, ..., An } relacijska shema;


neka su D1, D2, ..., Dn domene atributa A1, A2, ..., An;
n-torka t definirana na relacijskoj shemi R je skup parova
oblika atribut : vrijednostAtributa
t = { A1:v1, A2:v2, ..., An:vn },
pri čemu je v1  D1, v2  D2, ..., vn  Dn

▪ Uočite: poredak elemenata n-torke nije bitan


{ A1:v1, A2:v2, A3:v3 }  { A3:v3, A1:v1, A2:v2 }
▪ Ponekad će se koristiti pojednostavljena notacija: pretpostavi li se da
poredak vrijednosti atributa odgovara "poretku atributa" u relacijskoj
shemi, n-torka se može prikazati na sljedeći način:
t =  v1, v2, ..., vn 
© FER - Zagreb Baze podataka 2018/2019 8
n-torka (primjer)

▪ Zadana je relacijska shema OSOBA = { matBr, ime, prez }, pri


čemu su domene atributa:
dom (matBr) = {1234, 1235, 1236, 1237 }
dom (ime) = { Iva, Hrvoje, Ivan }
dom (prez) = { Novak, Kolar }
t1 = { matBr:1234, ime:Iva, prez:Novak }
t2 = { matBr:1236, ime:Hrvoje, prez:Novak }
t3 = { matBr:1237, ime:Ivan, prez:Kolar }

▪ n-torka t1 se jednako ispravno može napisati na sljedeći način


(poredak elemenata n-torke je nebitan)
t1 = { ime:Iva, prez:Novak, matBr:1234 }
▪ pojednostavljena notacija:
t1 =  1234, Iva, Novak 

© FER - Zagreb Baze podataka 2018/2019 9


Relacija (formalna definicija)

▪ Neka je R = { A1, A2, ..., An } relacijska shema;


neka su D1, D2, ..., Dn domene atributa A1, A2, ..., An;
relacija r (instanca relacije) definirana na shemi relacije R je
skup n-torki koje su definirane na relacijskoj shemi R

▪ kad se želi naglasiti da je relacija r definirana na shemi


relacije R, kao oznaka za relaciju koristi se
r(R) ili r( { A1, A2, ..., An } ) ili r( A1 A2 ... An )

▪ relacijska shema R: mijenja se relativno rijetko


▪ instanca relacije r: predstavlja trenutnu vrijednost relacije i
često se mijenja (pri unosu/brisanju/izmjeni podataka)

© FER - Zagreb Baze podataka 2018/2019 10


Relacija (primjer)

▪ Zadana je relacijska shema STUDENT = { matBr, prez, slika }, pri čemu


su domene atributa:
• dom (matBr) = { 100, 102, 107, 111, 135 }
• dom (prez) = { Novak, Kolar, Horvat, Ban }
• dom (slika) = { , , }

student(STUDENT) = { { matBr:102, prez:Novak, slika: },


{ matBr:135, prez:Ban, slika: }}

▪ IDENTIČNA RELACIJA (poredak n-torki i članova n-torki je nebitan):

student(STUDENT) = { { prez:Ban, matBr:135, slika: },


{ slika: , matBr:102, prez:Novak } }

© FER - Zagreb Baze podataka 2018/2019 11


Svojstva relacija

▪ relacija posjeduje ime koje je jedinstveno unutar sheme


baze podataka
▪ atributi unutar relacijske sheme imaju jedinstvena imena
(zašto?)
▪ jedan atribut može poprimiti vrijednost iz samo jedne
domene
▪ u jednoj relaciji ne postoje dvije jednake n-torke (zašto?)
▪ redoslijed atributa unutar relacijske sheme je nebitan (zašto?)
▪ redoslijed n-torki unutar relacije je nebitan (zašto?)
zupanija zupanija
sifZup nazZup nazZup sifZup
2
7
Primorsko-goranska
Varaždinska
 Varaždinska
Istarska
7
4
4 Istarska Primorsko-goranska 2

© FER - Zagreb Baze podataka 2018/2019 12


Relacija (primjer)

student(STUDENT) = { { prez:Ban, matBr:135, slika: },


{ slika: , matBr:102, prez:Novak } }

▪ pojednostavljenje prikaza relacije (vizualizacija relacije


tablicom)
student (STUDENT)
matBr prez slika
102 Novak
135 Ban

© FER - Zagreb Baze podataka 2018/2019 13


A-vrijednost n-torke, X-vrijednost n-torke

▪ Oznaka t(A) predstavlja vrijednost koju atribut A poprima u


n-torki t. t(A) se naziva A-vrijednost n-torke t.
▪ Primjer:
t = { matBr:102, prez:Novak, slika: }
t (prez) = Novak

▪ Neka je X  R. n-torka t reducirana na skup atributa X


naziva se X-vrijednost n-torke t i označava s t(X)
▪ Primjer:
t = { matBr:102, prez:Novak, slika: }
X = { matBr, prez } XR
t(X) = t( { matBr, prez } ) = { matBr:102, prez:Novak }
© FER - Zagreb Baze podataka 2018/2019 14
Stupanj i kardinalnost relacije

▪ stupanj relacije: broj atributa (stupaca) - degree


▪ kardinalnost relacije: broj n-torki (redaka) - cardinality

mjesto
pbr nazMjesto sifZup
42000 Varaždin 7
51000 Rijeka 2
52100 Pula 4 kardinalnost = 5
51300 Delnice 2
42230 Ludbreg 7

stupanj = 3 Oznake:
deg(mjesto) = 3
card(mjesto) = 5

© FER - Zagreb Baze podataka 2018/2019 15


Shema i instanca baze podataka

▪ Shema baze podataka je skup relacijskih shema


R = { R1, R2, ..., Rn }

• očito, relacijske sheme u jednoj shemi baze podataka moraju


imati različita imena

▪ Instanca baze podataka definirana na shemi baze podataka


R = { R1, R2, ..., Rn } je skup instanci relacija
r = { r1(R1), r2(R2), ..., rn(Rn) }

▪ shema baze podataka se relativno rijetko mijenja


▪ instanca baze podataka se često mijenja
© FER - Zagreb Baze podataka 2018/2019 16
Operacije u relacijskom modelu podataka

© FER - Zagreb Baze podataka 2018/2019


Relacijska algebra

▪ Operacije relacijske algebre su:


 unija (union)
 presjek (intersection)
\ razlika (set difference)
 dijeljenje (division)
p projekcija (projection)
s selekcija (selection)
 Kartezijev produkt (Cartesian product)
 preimenovanje (renaming)
>< spajanje (join)
agregacija, grupiranje
Primjer: r4 = sA=x  B=y (r1  (r2  r3))

▪ Karakteristika relacijske algebre - proceduralnost - navodi se redoslijed


operacija koje se provode nad relacijama
© FER - Zagreb Baze podataka 2018/2019 18
Predikatni račun

▪ Operacije se specificiraju navođenjem predikata


r = { t | F(t) }
▪ t je varijabla koja predstavlja:
• n-torke - n-torski račun
▪ rezultat r je skup n-torki t za koje je vrijednost predikata F istina
• domene - domenski račun
▪ rezultat je skup domena t za koje je vrijednost predikata F istina
▪ Primjer:
r4 = { t | (r1(t)  ((r2(t)  r3(t)))  t(A)=x  t(B)=y }

▪ Predikatni račun je neproceduralan


• ne navodi se redoslijed operacija
• navode se predikati koje n-torke (domene) moraju zadovoljavati
© FER - Zagreb Baze podataka 2018/2019 19
SQL

Kratki pogled

© FER - Zagreb Baze podataka 2018/2019 20


SQL - Kratki pogled

▪ SQL (Structured Query Language) je temeljen na


relacijskom modelu podataka.
▪ nastao je na temelju jezika SEQUEL
▪ temelji se na predikatnom računu i relacijskoj algebri
▪ proglašen standardnim jezikom za relacijske sustave
▪ objekti u SQL-u su tablice, a ne (formalno definirane)
relacije
• poredak atributa (stupaca) u nekim je slučajevima značajan
• u tablici ili rezultatu operacija nad tablicama moguća je pojava
dvije ili više istih n-torki
▪ ipak, postoje načini kako se to može spriječiti

© FER - Zagreb Baze podataka 2018/2019 21


SQL - Kratki pogled

▪ kreiranje nove instance baze podataka (kreiranje baze


podataka)
• jedan SUBP može istovremeno upravljati s više baza podataka
Baza podataka Rječnik
CREATE DATABASE studAdmin; studAdmin podataka

SUBP
Baza podataka Rječnik
CREATE DATABASE knjiznica; knjiznica podataka

...
▪ Rječnik podataka sadrži opise relacijskih shema, integritetskih ograničenja, ...

DROP DATABASE knjiznica;

© FER - Zagreb Baze podataka 2018/2019 22


SQL - Kratki pogled

▪ opisivanje relacijske sheme (kreiranje relacije)


• kreira praznu relaciju
• ujedno je moguće definirati i integritetska ograničenja

CREATE TABLE mjesto (


pbr INTEGER mjesto
, nazMjesto CHAR(30) pbr nazMjesto sifZup
, sifZup SMALLINT
);

DROP TABLE mjesto;

© FER - Zagreb Baze podataka 2018/2019 23


SQL - Kratki pogled

▪ upisivanje novih n-torki u relaciju


mjesto
pbr nazMjesto sifZup

INSERT INTO mjesto


VALUES (42000, 'Varaždin', 7); mjesto

INSERT INTO mjesto pbr nazMjesto sifZup


VALUES (52100, 'Pula', 4); 42230 Ludbreg 7
42000 Varaždin 7
INSERT INTO mjesto 52100 Pula 4
VALUES (42230, 'Ludbreg', 7);

Treba li poredak n-torki u relaciji biti


u skladu s redoslijedom upisa?

© FER - Zagreb Baze podataka 2018/2019 24


SQL - Kratki pogled

▪ dohvat podataka iz relacije mjesto


pbr nazMjesto sifZup
42230 Ludbreg 7
42000 Varaždin 7
52100 Pula 4

▪ dohvat podataka o mjestima čija šifra županije ima vrijednost 7

SELECT * FROM mjesto pbr nazMjesto sifZup


WHERE sifZup = 7; 42000 Varaždin 7
42230 Ludbreg 7

© FER - Zagreb Baze podataka 2018/2019 25


SQL - Kratki pogled

▪ izmjena vrijednosti atributa u relaciji mjesto


pbr nazMjesto sifZup
42230 Ludbreg 7
42000 Varaždin 7
52100 Pula 4

▪ naziv mjesta s poštanskim brojem 42000 promijeniti u VARAŽDIN


mjesto
pbr nazMjesto sifZup
UPDATE mjesto
42230 Ludbreg 7
SET nazMjesto = 'VARAŽDIN'
42000 VARAŽDIN 7
WHERE pbr = 42000;
52100 Pula 4

© FER - Zagreb Baze podataka 2018/2019 26


SQL - Kratki pogled

▪ brisanje n-torki iz relacije mjesto


pbr nazMjesto sifZup
42230 Ludbreg 7
42000 VARAŽDIN 7
52100 Pula 4

▪ obrisati mjesta za koje šifra županije ima vrijednost 7

mjesto
DELETE FROM mjesto pbr nazMjesto sifZup
WHERE sifZup = 7; 52100 Pula 4

© FER - Zagreb Baze podataka 2018/2019 27


Relacijska algebra

© FER - Zagreb Baze podataka 2018/2019 28


Relacijska algebra

▪ Unarne operacije
• projekcija, selekcija, preimenovanje
• agregacija, grupiranje
▪ Binarne operacije
• skupovske operacije (set operations)
▪ temelje se na relacijama kao skupovima n-torki
▪ unija, presjek, razlika

• ostale binarne operacije


▪ Kartezijev produkt, dijeljenje, spajanje

© FER - Zagreb Baze podataka 2018/2019 29


Relacijska algebra

▪ obavljanje operacije ne utječe na operande, npr.


r3 = r1 r2
• obavljanjem prethodne operacije nastaje nova relacija r3,
a relacije r1 i r2 se pri tome ne mijenjaju
▪ operandi su relacije, a rezultat obavljanja operacije je uvijek
relacija. To znači:
• skup relacija je zatvoren s obzirom na operacije
relacijske algebre
• ta činjenica omogućava da se rezultat jedne operacije
upotrijebi kao operand u sljedećoj operaciji, što
omogućava formiranje složenih izraza
r5 = (r1 r2)  (r3 >< r4)

© FER - Zagreb Baze podataka 2018/2019 30


Unijska kompatibilnost

▪ Dvije relacije su unijski kompatibilne ukoliko vrijedi:


• relacije su istog stupnja
i
• korespondentni atributi su definirani nad istim domenama

polozioMatem polozioProgr • relacije su istog stupnja


matBr ime prez mbr prezSt imeSt • dom (matBr) = dom(mbr)
12345 Ivo Kolar 92632 Ban Jura • dom (ime) = dom(imeSt)
13254 Ana Horvat 67234 Novak Iva • dom (prez) = dom(prezSt)

→ relacije su unijski kompatibilne

▪ kod ocjene jesu li relacije unijski kompatibilne


• poredak atributa nije bitan
• imena atributa nisu bitna

© FER - Zagreb Baze podataka 2018/2019 31


Unijska kompatibilnost

▪ dvije relacije koje imaju jednak broj atributa i jednaka imena


atributa ne moraju ujedno biti unijski kompatibilne

zrakoplov pecivo
oznaka naziv oznaka naziv
B-747 Boeing 747 ZE Žemlja
A-360 Airbus 360 PR Perec

• relacije su istog stupnja


• dom (zrakoplov.oznaka)  dom(pecivo.oznaka)
• dom (zrakoplov.naziv)  dom(pecivo.naziv)
→ relacije NISU unijski kompatibilne

▪ notacija imeRelacije.imeAtributa se često koristi kada je potrebno


razlikovati istoimene atribute različitih relacija

© FER - Zagreb Baze podataka 2018/2019 32


Skupovske operacije: unija, presjek, razlika

▪ Skupovske operacije (unija, presjek, razlika) mogu se


obavljati isključivo nad UNIJSKI KOMPATIBILNIM relacijama

© FER - Zagreb Baze podataka 2018/2019 33


Unija

▪ Rezultat operacije r1 r2 je relacija čije su n-torke elementi


relacije r1 ili elementi relacije r2 ili elementi obje relacije.
• n-torke koje su elementi obje relacije u rezultatu se pojavljuju
samo jednom (jer relacija je SKUP n-torki)
polozioMatem polozioBaremJedan =
mbr ime prez polozioMatem polozioProgr
100 Ivan Kolar polozioBaremJedan
102 Ana Novak mbr ime prez
103 Tea Ban 100 Ivan Kolar
studenti koji su položili ili
107 Jura Horvat 102 Ana Novak Matematiku ili
103 Tea Ban Programiranje ili
polozioProgr
105 Rudi Kolar oba predmeta
mbr ime prez 107 Jura Horvat r1  r2  r2  r1
102 Ana Novak
105 Rudi Kolar
SELECT * FROM polozioMatem
107 Jura Horvat
UNION
SELECT * FROM polozioProgr;
© FER - Zagreb Baze podataka 2018/2019 34
Presjek

▪ Rezultat operacije r1  r2 je relacija čije su n-torke elementi


relacije r1 i elementi relacije r2
polozioMatem polozioOba =
mbr ime prez polozioMatem  polozioProgr
100 Ivan Kolar
102 Ana Novak polozioOba
103 Tea Ban
mbr ime prez studenti koji su
107 Jura Horvat
102 Ana Novak položili i Matematiku
polozioProgr 107 Jura Horvat i Programiranje
mbr ime prez
102 Ana Novak r1  r2  r2  r1
105 Rudi Kolar
107 Jura Horvat
SELECT * FROM polozioMatem
INTERSECT
SELECT * FROM polozioProgr;

© FER - Zagreb Baze podataka 2018/2019 35


Razlika
▪ Rezultat operacije r1 \ r2 je relacija čije su n-torke elementi
relacije r1 i nisu elementi relacije r2
polozioMatem polozioProgr
mbr ime prez mbr ime prez
100 Ivan Kolar 102 Ana Novak r1 \ r2  r2 \ r1
102 Ana Novak 105 Rudi Kolar
103 Tea Ban 107 Jura Horvat
107 Jura Horvat

polozioSamoMatem = polozioMatem \ polozioProgr


polozioSamoMatem
SELECT * FROM polozioMatem
mbr ime prez EXCEPT
100 Ivan Kolar SELECT * FROM polozioProgr
103 Tea Ban
polozioSamoProgr = polozioProgr \ polozioMatem
polozioSamoProgr SELECT * FROM polozioProgr
mbr ime prez EXCEPT
105 Rudi Kolar SELECT * FROM polozioMatem
© FER - Zagreb Baze podataka 2018/2019 36
ŠTO AKO SE IMENA KORESPONDENTNIH ATRIBUTA RAZLIKUJU

▪ Unija, presjek, razlika: u slučajevima kada su relacije unijski


kompatibilne, ali se u relacijama koriste različita imena
korespondentnih atributa, primjenjuje se sljedeći dogovor
(konvencija): kao imena atributa u rezultantnoj relaciji koriste se
imena atributa prvog operanda
polozioMatem
mbr imeSt prezSt
100 Ivan Kolar
polozioOba = polozioMatem  polozioProgr
102 Ana Novak
103 Tea Ban
polozioOba
107 Jura Horvat
mbr imeSt prezSt
polozioProgr 102 Ana Novak
mbr ime prez 107 Jura Horvat
102 Ana Novak
105 Rudi Kolar
107 Jura Horvat

© FER - Zagreb Baze podataka 2018/2019 37


Zadaci za vježbu

▪ zadane su unijski kompatibilne relacije


• m (mbr ime prez) → studenti koji su položili Matematiku
• d (mbr ime prez) → studenti koji su položili Dig. logiku
• p (mbr ime prez) → studenti koji su položili Programiranje
▪ napisati izraze relacijske algebre koji određuju relacije koje
sadrže studente (točnije rečeno n-torke):
a) koji su položili sva tri predmeta
b) koji su položili ili Matematiku ili Digitalnu logiku, ali ne oba
predmeta (ekskluzivni ili)
c) koji su položili točno jedan (bilo koji) od ta tri predmeta
d) koji su položili bilo koja dva predmeta (ali nisu položili treći)

© FER - Zagreb Baze podataka 2018/2019 38


Dijeljenje (division)

▪ Zadane su relacije r(R) i s(S). Neka je S  R. Rezultat operacije


r  s je relacija sa shemom P = R \ S. n-torka tr(P) se pojavljuje u
rezultatu ako i samo ako za n-torku trr vrijedi da se tr(P) u relaciji
r pojavljuje u kombinaciji sa svakom n-torkom tss
polozen predmet studenti koji su položili sve predmete
mbrSt sifPred sifPred sa šiframa u relaciji predmet
100 1 1
100 2 2 poloziliSve = polozen  predmet
101 1 3
101 2 poloziliSve
101 3 mbrSt
102 2 101
102 3 103
103 1
103 2
103 3
104 3

© FER - Zagreb Baze podataka 2018/2019 39


Selekcija

▪ Zadana je relacija r(R). Neka je F predikat (formula, uvjet,


condition) koji se sastoji od operanada i operatora
• operandi su:
▪ imena atributa iz R
▪ konstante
• operatori su:
▪ operatori usporedbe:   =   
▪ logički operatori:   
▪ Obavljanjem operacije sF(r) dobiva se relacija sa shemom R koja
sadrži one n-torke relacije r za koje je vrijednost predikata F istina
(true)

© FER - Zagreb Baze podataka 2018/2019 40


Selekcija (primjer)

student matBr ime prez postBr


100 Ivan Kolar 52000
102 Ana Horvat 10000
105 Jura Novak 21000
107 Ana Ban 51000

rezultat = s ime = 'Ana'  postBr  31000 (student)


▪ Za svaku pojedinu n-torku relacije:
• vrijednosti atributa uvrštavaju se u predikat - uvrštavanjem
vrijednosti u predikat dobiva se sud
• onda i samo onda kada je vrijednost dobivenog suda
istina (true), n-torka se pojavljuje u rezultatu selekcije
rezultat
'Ivan' = 'Ana'  52000 > 31000 → true matBr ime prez postBr
'Ana' = 'Ana'  10000 > 31000 → true 100 Ivan Kolar 52000
'Jura' = 'Ana'  21000 > 31000 → false 102 Ana Horvat 10000
'Ana' = 'Ana'  51000 > 31000 → true 107 Ana Ban 51000

© FER - Zagreb Baze podataka 2018/2019 41


SQL - Selekcija

▪ SELECT SELECT List FROM table


[WHERE Condition]
▪ Uvjet (Condition) se sastoji od operanada i operatora
• operandi su:
▪ imena atributa iz relacije table
▪ konstante
• operatori su:
▪ operatori usporedbe: < <= = <> > >=
▪ logički operatori: AND OR NOT
▪ Vrijednosti svake n-torke iz relacije table se uvrštavaju u
Condition (a to je u stvari predikat). Ako je dobiveni sud istinit
(true), n-torka se pojavljuje u rezultatu.

© FER - Zagreb Baze podataka 2018/2019 42


SQL - Lista za selekciju

mjesto pbr nazMjesto sifZup


42000 Varaždin 7
52100 Pula 4

▪ SELECT SELECT List FROM table


▪ SELECT List je lista za selekciju: dio SELECT naredbe koji
određuje koji će se "stupci" pojaviti u rezultatu
SELECT mjesto.pbr
SELECT * FROM mjesto;  ,
,
mjesto.nazMjesto
mjesto.sifZup
FROM mjesto;
▪ uz ime atributa može se navesti ime relacije (radi izbjegavanja
dvosmislenosti u slučajevima kada se podaci dohvaćaju
istovremeno iz više relacija čija se imena atributa podudaraju)
imeRelacije.imeAtributa
▪ u slučajevima kada takva dvosmislenost ne postoji, ime relacije
se može (ali ne mora) ispustiti
© FER - Zagreb Baze podataka 2018/2019 43
SQL - Selekcija

student matBr ime prez postBr


100 Ivan Kolar 52000
102 Ana Horvat 10000
105 Jura Novak 21000
107 Ana Ban 51000

s ime = 'Ana'  postBr  31000 (student)


SELECT * FROM student matBr ime prez postBr
WHERE ime = 'Ana' 100 Ivan Kolar 52000
OR postBr > 31000; 102 Ana Horvat 10000
107 Ana Ban 51000

© FER - Zagreb Baze podataka 2018/2019 44


Projekcija

▪ Zadana je relacija r(R). Neka je skup atributa { A1, A2, ..., Ak }  R


▪ Obavljanjem operacije pA1, A2, ..., Ak(r) dobiva se relacija s sa
shemom { A1, A2, ..., Ak } koja sadrži vertikalni podskup relacije r
• deg(s) = k
• card(s)  card(r) (jer se eliminiraju duplikati)

r "međurezultat"

A B C D B C s
izdvajanje eliminacija
vertikalnog duplikata B C

s = pB, C(r)
podskupa

© FER - Zagreb Baze podataka 2018/2019 45


Projekcija (primjer)

Relacija nastup: u kojim gradovima nastup tenor grad datum


su nastupali koji tenori kojeg datuma P. Domingo London 15.2.1976
P. Domingo New York 27.3.1981
P. Domingo London 11.4.1987
J. Carreras New York 11.4.1987
Traži se: u kojim gradovima su nastupali L. Pavarotti Sydney 22.6.1992
koji tenori L. Pavarotti London 15.2.1976
tenorGrad = ptenor,grad(nastup) L. Pavarotti
L. Pavarotti
Sydney
London
19.1.1993
14.7.1993

tenor grad
P. Domingo London
"međurezultat"

P. Domingo New York tenorGrad tenor grad


P. Domingo London P. Domingo London
J. Carreras New York P. Domingo New York
L. Pavarotti Sydney J. Carreras New York
L. Pavarotti London L. Pavarotti Sydney
L. Pavarotti Sydney L. Pavarotti London
L. Pavarotti London

© FER - Zagreb Baze podataka 2018/2019 46


SQL - Lista za selekciju
mjesto zupanija sifZupanija nazZup
pbr nazMjesto sifZup 7 Varaždinska
42000 Varaždin 7 4 Istarska
52100 Pula 4

▪ u listi za selekciju se ne moraju navesti svi atributi relacije navedene


u FROM dijelu naredbe:
SELECT nazMjesto nazMjesto pbr
, pbr Varaždin 42000
FROM mjesto; Pula 52100

▪ u listi za selekciju se mogu navesti samo oni atributi koji se nalaze u


dosegu SELECT naredbe, tj. atributi relacije koja je navedena u
FROM dijelu naredbe:
SELECT nazMjesto
, pbr Neispravna naredba
, nazZup
FROM mjesto;

© FER - Zagreb Baze podataka 2018/2019 47


SQL - Projekcija

▪ za ispravno obavljanje projekcije nije dovoljno u listi za selekciju


samo navesti imena atributa prema kojima se obavlja projekcija:
▪ primjer koji ujedno SELECT tenor tenor grad
pokazuje kako , grad P. Domingo London
rezultat SQL FROM nastup; P. Domingo New York
naredbe ne mora P. Domingo London
Neispravna projekcija J. Carreras New York
uvijek biti relacija
L. Pavarotti Sydney
L. Pavarotti London
L. Pavarotti Sydney
L. Pavarotti London

ptenor,grad(nastup) SELECT DISTINCT tenor


, grad
tenor
P. Domingo
grad
London
FROM nastup; P. Domingo New York
J. Carreras New York
Ispravna projekcija L. Pavarotti Sydney
L. Pavarotti London

© FER - Zagreb Baze podataka 2018/2019 48


SQL - Projekcija i selekcija

student matBr ime prez postBr


100 Ivan Kolar 52000
102 Ana Horvat 10000
105 Jura Novak 21000
107 Ana Ban 51000

pime(s ime = 'Ana'  postBr  31000 (student))


"međurezultat"
SELECT DISTINCT ime
FROM student matBr ime prez postBr
ime
WHERE ime = 'Ana' 100 Ivan Kolar 52000
Ivan
OR postBr > 31000; 102 Ana Horvat 10000
Ana
107 Ana Ban 51000

© FER - Zagreb Baze podataka 2018/2019 49


Kartezijev produkt

▪ Zadana je relacija r(R) i relacija s(S), pri čemu je R  S = .


▪ Obavljanjem operacije r  s dobiva se relacija p(P), P = R  S.
n-torke relacije p se dobivaju spajanjem (ulančavanjem) svake
n-torke iz relacije r sa svakom n-torkom iz relacije s

• deg(p) = deg(r) + deg(s)


• card(p) = card(r)  card(s)

© FER - Zagreb Baze podataka 2018/2019 50


Kartezijev produkt (primjer)

student predmet
mbr ime prez sifra naziv
100 Ivan Kolar 1 Programiranje
102 Ana Novak 2 Matematika
103 Tea Ban

upis = student  predmet


upis
mbr ime prez sifra naziv
100 Ivan Kolar 1 Programiranje
100 Ivan Kolar 2 Matematika
102 Ana Novak 1 Programiranje
102 Ana Novak 2 Matematika
103 Tea Ban 1 Programiranje
103 Tea Ban 2 Matematika

© FER - Zagreb Baze podataka 2018/2019 51


SQL - Kartezijev produkt

▪ SELECT SELECT List


FROM table [, table]...
[WHERE Condition]
▪ navede li se u FROM dijelu naredbe više od jedne relacije,
obavlja se operacija Kartezijevog produkta navedenih relacija
student predmet
student  predmet
mbr ime prez sifra naziv
100 Ivan Kolar 1 Programiranje
102 Ana Novak 2 Matematika
103 Tea Ban
mbr ime prez sifra naziv
100 Ivan Kolar 1 Programiranje
SELECT *
100 Ivan Kolar 2 Matematika
FROM student, predmet;
102 Ana Novak 1 Programiranje
SELECT student.*, predmet.* 102 Ana Novak 2 Matematika
FROM student, predmet; 103 Tea Ban 1 Programiranje
103 Tea Ban 2 Matematika

© FER - Zagreb Baze podataka 2018/2019 52


SQL - Kartezijev produkt

▪ drugačija sintaksa:
▪ SELECT SELECT List
FROM table [CROSS JOIN table]...
[WHERE Condition]

SELECT *
FROM student CROSS JOIN predmet;

▪ Kartezijev produkt triju relacija:

SELECT *
FROM r1 CROSS JOIN r2 CROSS JOIN r3;

© FER - Zagreb Baze podataka 2018/2019 53


Kartezijev produkt

▪ Što učiniti ukoliko je potrebno obaviti operaciju Kartezijevog


produkta nad relacijama r(R) i s(S), u slučaju kada R  S  
r s
A B B C A B B C
1 a c  1 a c 
2 b d  1 a d 
3 c 2 b c 
2 b d 
3 c c 
3 c d 

NIJE RELACIJA!

→ Potrebno je koristiti operaciju preimenovanja

© FER - Zagreb Baze podataka 2018/2019 54


Preimenovanje (relacije, atributa)

▪ Zadana je relacija r({ A1, A2, ..., An })


• preimenovanje relacije: operacijom preimenovanja s(r)
dobiva se relacija s koja ima jednaku shemu i sadržaj kao
relacija r
• preimenovanje relacije i atributa: operacijom preimenovanja
s(B1, B2, ..., Bn)(r) dobiva se relacija s čija shema umjesto atributa
A1, A2, ..., An sadrži atribute B1, B2, ..., Bn, a sadržaj relacije s je
jednak sadržaju relacije r

p = r  s(B2, C)(s) p A B B2 C
1 a c 
r A B s B C 1 a d 
1 a c  2 b c 
2 b d  2 b d 
3 c 3 c c 
3 c d 
© FER - Zagreb Baze podataka 2018/2019 55
SQL - Preimenovanje atributa

▪ ukoliko se drugačije ne navede, imena stupaca u rezultatu


odgovaraju imenima atributa iz liste za selekciju
▪ implicitna imena stupaca rezultata se mogu promijeniti
korištenjem operatora za preimenovanje AS

zupanija sifZupanija nazZup


7 Varaždinska
4 Istarska

SELECT sifZupanija AS sifraZ sifraZ nazZ


, nazZup AS nazZ 7 Varaždinska
FROM zupanija; 4 Istarska

▪ rezervirana riječ AS SELECT sifZupanija sifraZ


, nazZup nazZ
smije se ispustiti FROM zupanija;

© FER - Zagreb Baze podataka 2018/2019 56


SQL - Preimenovanje atributa

▪ Primjer u kojem je potrebno koristiti preimenovanje atributa


• SQL naredba bi bila ispravna i bez preimenovanja, ali tada kao
rezultat ne bismo dobili relaciju (jer bi u shemi rezultata
postojala dva atributa istog imena)
r A B s B C
r  s(B2, C)(s)
1 a c 
2 b d 
3 c

A B B2 C
1 a c 
SELECT A, r.B, s.B AS B2, C 1 a d 
FROM r, s; 2 b c 
2 b d 
3 c c 
3 c d 

© FER - Zagreb Baze podataka 2018/2019 57


Prirodno spajanje (Natural Join)

▪ Prirodno spajanje obavlja se na temelju jednakih vrijednosti


istoimenih atributa.
▪ Zadane su relacije r(R) i s(S). Neka je R  S = { A1, A2, ..., An }.
Obavljanjem operacije r >< s dobiva se relacija sa shemom
R  S koja sadrži n-torke nastale spajanjem n-torki tr  r, ts  s,
za koje vrijedi tr(A1) = ts(A1)  tr(A2) = ts(A2)  ... tr(An) = ts(An).
mjesto pbr nazMjesto sifZup zupanija sifZup nazZup
42000 Varaždin 7 7 Varaždinska
52100 Pula 4 4 Istarska
42230 Ludbreg 7

mjestouZupaniji = mjesto >< zupanija


mjestouZupaniji pbr nazMjesto sifZup nazZup
42000 Varaždin 7 Varaždinska što možemo reći o
52100 Pula 4 Istarska stupnju rezultata?
42230 Ludbreg 7 Varaždinska

© FER - Zagreb Baze podataka 2018/2019 58


SQL - Prirodno spajanje

SELECT mjesto.*, zupanija.nazZup


FROM mjesto, zupanija
WHERE mjesto.sifZup = zupanija.sifZup;

▪ ili:

SELECT mjesto.*, zupanija.nazZup


FROM mjesto JOIN zupanija
ON mjesto.sifZup = zupanija.sifZup;

© FER - Zagreb Baze podataka 2018/2019 59


SQL - Prirodno spajanje – jednostavnija sintaksa

SELECT mjesto.*, zupanija.nazZup


FROM mjesto JOIN zupanija
USING(sifzup);

▪ ili:

SELECT mjesto.*, zupanija.nazZup


FROM mjesto NATURAL JOIN zupanija;

NAPOMENA: ove naredbe specifične su za PostgreSQL!

© FER - Zagreb Baze podataka 2018/2019 60


Prirodno spajanje - relacije bez istoimenih atributa

▪ Rezultat prirodnog spajanje relacija r(R) i s(S) za koje vrijedi da je


je R  S =  identičan je rezultatu obavljanja operacije
Kartezijevog produkta r  s
mjesto pbr nazMjesto sifZup zupanija sifZupanija nazZup
42000 Varaždin 7 7 Varaždinska
52100 Pula 4 4 Istarska
42230 Ludbreg 7

mjestouZupaniji = mjesto >< zupanija


mjestouZupaniji pbr nazMjesto sifZup sifZupanija nazZup
42000 Varaždin 7 7 Varaždinska
42000 Varaždin 7 4 Istarska
52100 Pula 4 7 Varaždinska
52100 Pula 4 4 Istarska
42230 Ludbreg 7 7 Varaždinska
42230 Ludbreg 7 4 Istarska
© FER - Zagreb Baze podataka 2018/2019 61
Spajanje uz uvjet ili  - spajanje ( - join)

▪ Zadane su relacije r(R) i s(S) pri čemu je R  S = . Neka je F


predikat oblika Ai  Bj, pri čemu je AiR, BjS, a  je operator
usporedbe iz skupa operatora { , , =, , ,  }
▪ Obavljanjem operacije r >< s dobiva se relacija koja sadrži
F
n-torke iz r  s za koje je vrijednost predikata F istina (true),
odnosno:
što možemo reći o stupnju i
r >< s =
F
sF (r  s) kardinalnosti rezultata?

▪ Umjesto jednostavnog predikata Ai  Bj, može se koristiti složeni


predikat dobiven primjenom logičkih operatora nad jednostavnim
predikatima oblika Ai  Bj
▪ Problem spajanja uz uvjet relacija r(R) i s(S) kod kojih je R  S  ,
rješava se na jednak način kao kod Kartezijevog produkta (korištenjem
operatora preimenovanja)

© FER - Zagreb Baze podataka 2018/2019 62


Spajanje uz uvjet (primjer)

linija zrakoplov
let udaljenost tip dolet
CA-825 700 B747 13000
LH-412 4800 A320 5400
BA-722 15000 DC-9 3100
CA-311 13000

mogućnost = linija >< zrakoplov


dolet  udaljenost
mogućnost
let udaljenost tip dolet
CA-825 700 B747 13000
CA-825 700 A320 5400
CA-825 700 DC-9 3100
LH-412 4800 B747 13000 Linije i zrakoplovi koji na
LH-412 4800 A320 5400 tim linijama mogu letjeti
CA-311 13000 B747 13000

© FER - Zagreb Baze podataka 2018/2019 63


SQL - Spajanje uz uvjet
linija zrakoplov
▪ Koristi se ekvivalencija
let udaljenost tip dolet
r >< s =
F
sF (r  s) CA-825
LH-412
700
4800
B747
A320
13000
5400
BA-722 15000 DC-9 3100
linija >< zrakoplov CA-311 13000
dolet  udaljenost

SELECT *
FROM linija, zrakoplov Kartezijev produkt
WHERE dolet >= udaljenost; Selekcija

let udaljenost tip dolet


CA-825 700 B747 13000
Linije i zrakoplovi koji na CA-825 700 A320 5400
CA-825 700 DC-9 3100
tim linijama mogu letjeti
LH-412 4800 B747 13000
LH-412 4800 A320 5400
CA-311 13000 B747 13000

© FER - Zagreb Baze podataka 2018/2019 64


SQL - Spajanje uz uvjet

▪ drugačija sintaksa:
▪ SELECT SELECT List
FROM table [JOIN table ON joinCondition]...
[WHERE Condition]

SELECT *
FROM linija JOIN zrakoplov
ON dolet >= udaljenost;

▪ Spajanje uz uvjet triju relacija:


SELECT *
FROM r1
JOIN r2
ON joinCondition
JOIN r3
ON joinCondition;
© FER - Zagreb Baze podataka 2018/2019 65
SQL - Spajanje uz uvjet i selekcija

▪ Kako pronaći linije i zrakoplove koji na tim linijama mogu letjeti, ali
samo za one linije na kojima je udaljenost veća od 4000 km

s udaljenost  4000(linija >< zrakoplov)


dolet  udaljenost

SELECT *
FROM linija, zrakoplov
WHERE dolet >= udaljenost
let udaljenost tip dolet
AND udaljenost > 4000;
LH-412 4800 B747 13000
LH-412 4800 A320 5400
SELECT * CA-311 13000 B747 13000
FROM linija
ili JOIN zrakoplov
ON dolet >= udaljenost
WHERE udaljenost > 4000;

© FER - Zagreb Baze podataka 2018/2019 66


SQL - Spajanje uz uvjet i projekcija

▪ Kako pronaći tipove zrakoplova koji se mogu iskoristiti za letove


na postojećim linijama
p tip(linija >< zrakoplov)
dolet  udaljenost

SELECT DISTINCT tip


FROM linija, zrakoplov
WHERE dolet >= udaljenost; tip
B747
A320
DC-9
SELECT DISTINCT tip
FROM linija
ili JOIN zrakoplov
ON dolet >= udaljenost;

© FER - Zagreb Baze podataka 2018/2019 67


Spajanje s izjednačavanjem (Equi-join)

▪ Spajanje relacija s izjednačavanjem je poseban oblik spajanja uz


uvjet u kojem se kao  operator koristi isključivo operator
jednakosti (=)
mjesto pbr nazMjesto sifZup zupanija sifZupanija nazZup
42000 Varaždin 7 7 Varaždinska
52100 Pula 4 4 Istarska
42230 Ludbreg 7

mjestouZupaniji = mjesto >< zupanija


sifZup = sifZupanija

mjestouZupaniji pbr nazMjesto sifZup sifZupanija nazZup


42000 Varaždin 7 7 Varaždinska
52100 Pula 4 4 Istarska
42230 Ludbreg 7 7 Varaždinska
▪ Problem spajanja s izjednačavanjem relacija r(R) i s(S) kod kojih je
R  S  , rješava se na jednak način kao kod Kartezijevog produkta
(korištenjem operatora preimenovanja)
© FER - Zagreb Baze podataka 2018/2019 68
SQL - Spajanje s izjednačavanjem

▪ Koristi se ekvivalencija
s
r >< s = F (r  s) mjesto pbr nazMjesto sifZup
F 42000 Varaždin 7
52100 Pula 4
42230 Ludbreg 7
mjesto >< zupanija zupanija
sifZup = sifZupanija sifZupanija nazZup
7 Varaždinska
4 Istarska
SELECT *
FROM mjesto, zupanija
WHERE sifZup = sifZupanija;

SELECT *
FROM mjesto
ili JOIN zupanija
ON sifZup = sifZupanija;

© FER - Zagreb Baze podataka 2018/2019 69


SQL - Prirodno spajanje ≠
Spajanje s izjednačavanjem
▪ prirodno spajanje se razlikuje od spajanja s izjednačavanjem po
tome što se istoimeni atributi iz dviju relacija izbacuju (tako da od
svakog ostane samo po jedan)
mjesto pbr nazMjesto sifZup zupanija sifZup nazZup
42000 Varaždin 7 7 Varaždinska
52100 Pula 4 4 Istarska
42230 Ludbreg 7

mjestouZupaniji = mjesto >< zupanija

SELECT mjesto.*, zupanija.nazZup


FROM mjesto, zupanija
WHERE mjesto.sifZup = zupanija.sifZup;

pbr nazMjesto sifZup nazZup


42000 Varaždin 7 Varaždinska
52100 Pula 4 Istarska
42230 Ludbreg 7 Varaždinska
© FER - Zagreb Baze podataka 2018/2019 70
Agregacija (aggregation)

ispit mbrStud akGod nazPred ocjena


100 2005 Matematika 3
101 2005 Matematika 5
102 2005 Matematika 2
103 2006 Matematika 3
100 2004 Fizika 5
101 2006 Fizika 5
102 2006 Fizika 2
100 2005 Vjerojatnost 4

▪ Kako izračunati prosjek ocjena na svim ispitima?


prosjek prosjOcj
3.625

© FER - Zagreb Baze podataka 2018/2019 71


Agregacija

▪ Zadana je relacija r(R). Neka je atribut AR. Neka je AF


agregatna funkcija. Rezultat operacije agregacije GAF(A)(r) je
relacija stupnja 1 i kardinalnosti 1, pri čemu je vrijednost atributa
određena primjenom funkcije AF nad vrijednostima atributa A u
svim n-torkama relacije r. Funkcija AF može biti jedna od:
• COUNT određuje broj pojava (broji sve, eventualni duplikati se također broje)
• SUM izračunava sumu vrijednosti
• AVG izračunava aritmetičku sredinu vrijednosti
• MIN izračunava najmanju vrijednost
• MAX izračunava najveću vrijednost
▪ naziv rezultantne relacije i atributa nije definiran operacijom, stoga
se najčešće koristi u kombinaciji s operacijom preimenovanja
▪ također se koriste agregatne funkcije
• COUNT-DISTINCT, SUM-DISTINCT, AVG-DISTINCT

© FER - Zagreb Baze podataka 2018/2019 72


Agregacija
ispit mbrStud akGod nazPred ocjena
100 2005 Matematika 3
101 2005 Matematika 5
102 2005 Matematika 2
103 2006 Matematika 3
100 2004 Fizika 5
101 2006 Fizika 5
102 2006 Fizika 2
100 2005 Vjerojatnost 4

▪ Prosjek ocjena na svim ispitima (rješenje):

prosjek(prosjOcj)(GAVG(ocjena)(ispit)) prosjek prosjOcj


3.625

prosjOcj
SELECT AVG(ocjena) AS prosjOcj
3.625
FROM ispit;

© FER - Zagreb Baze podataka 2018/2019 73


Agregacija (primjeri ostalih agregatnih funkcija)

osoba rez1(broj1)(GCOUNT(sifra)(osoba)) rez1 broj1


sifra tezina visina 4

rez2(broj2)(GSUM(tezina)(osoba))
101 62 170
rez2 broj2
103 94 186
105 74 181 292
107 62 165
rez3(broj3)(GAVG(visina)(osoba)) rez3 broj3
175.5

rez4(broj4)(GMAX(visina)(osoba)) rez4 broj4


186

rez5(broj5)(GMIN(tezina)(osoba)) rez5 broj5


62
Moguće je odjednom izračunati više agregatnih vrijednosti:
rez6(broj6, broj7, broj8)(GMIN(tezina), AVG(visina), MAX(visina)(osoba))
rez6 broj6 broj7 broj8
62 175.5 186
© FER - Zagreb Baze podataka 2018/2019 74
SQL - Agregatne funkcije
osoba sifra tezina visina
101 62 170
▪ naziv rezultantnog atributa nije definiran
103 94 186
operacijom, stoga se koristi AS operator 105 74 181
za preimenovanje 107 62 165

broj1
SELECT COUNT(sifra) AS broj1 FROM osoba;
4

broj2
SELECT SUM(tezina) AS broj2 FROM osoba;
292

broj3
SELECT AVG(visina) AS broj3 FROM osoba;
175.5

SELECT MAX(visina) AS broj4, broj4 broj5


MIN(tezina) AS broj5 186 62
FROM osoba;

© FER - Zagreb Baze podataka 2018/2019 75


SQL - Agregatne funkcije

osoba sifra tezina visina


101 62 170
103 94 190
▪ agregatne funkcije s DISTINCT 105 74 170
107 62 170

SELECT COUNT(DISTINCT visina) AS broj1 broj1


FROM osoba; 2

SELECT SUM(DISTINCT tezina) AS broj2 broj2


FROM osoba; 230

SELECT AVG(DISTINCT visina) AS broj3 broj3


FROM osoba; 180

© FER - Zagreb Baze podataka 2018/2019 76


Agregacija i grupiranje

ispit mbrStud akGod nazPred ocjena


100 2005 Matematika 3
101 2005 Matematika 5
102 2005 Matematika 2
103 2006 Matematika 3
100 2004 Fizika 5
101 2006 Fizika 5
102 2006 Fizika 2
100 2005 Vjerojatnost 4

▪ Zadatak: izračunati prosječnu ocjenu za svaki pojedini predmet


• prosjek za Matematiku
• prosjek za Fiziku
• ... i za sve ostale predmete čiji se naziv pojavljuje u relaciji

© FER - Zagreb Baze podataka 2018/2019 77


Agregacija i grupiranje

▪ Loše rješenje:
• Za svaki predmet napisati po jedan upit
prosjek(prosjOcjMat)(GAVG(ocjena)(snazPred= 'Matematika'(ispit)))
SELECT AVG(ocjena) AS prosjOcjMat
FROM ispit prosjOcjMat
WHERE nazPred = 'Matematika'; 3.25

prosjek(prosjOcjFiz)(GAVG(ocjena)(snazPred= 'Fizika'(ispit)))
SELECT AVG(ocjena) AS prosjOcjFiz
FROM ispit prosjOcjFiz
WHERE nazPred = 'Fizika'; 4

• itd. (za svaki naziv predmeta) ▪ postoji li bolje rješenje?


© FER - Zagreb Baze podataka 2018/2019 78
Grupiranje (grouping)

▪ Zadana je relacija r(R). Neka su atributi A1, A2, ..., Am, B1, B2, ...,
Bn atributi sheme R. Opći oblik operacije grupiranja je sljedeći:

A1, A2, ..., AmGAF1(B1), AF2(B2), ..., AFn(Bn) (r)

a) određuju se grupe n-torki: u svakoj grupi se nalaze n-torke


koje imaju jednake vrijednosti atributa A1, A2, ..., Am
b) za svaku grupu n-torki izračunavaju se vrijednosti agregatnih
funkcija AF1(B1), AF2(B2), ..., AFn(Bn)
c) za svaku grupu formira se n-torka s vrijednostima atributa A1,
A2, ..., Am i izračunatim vrijednostima agregatnih funkcija

© FER - Zagreb Baze podataka 2018/2019 79


Agregacija i grupiranje
ispit mbrStud akGod nazPred ocjena
100 2005 Matematika 3
101 2005 Matematika 5
102 2005 Matematika 2
103 2006 Matematika 3
100 2004 Fizika 5
101 2006 Fizika 5
102 2006 Fizika 2
100 2005 Vjerojatnost 4

▪ Za svaki predmet ispisati prosječnu ocjenu (ispravno rješenje):


prosjek(nazPred, prosjOcj)(nazPredGAVG(ocjena)(ispit))
▪ grupirati po nazPred prosjek
▪ za svaku grupu izračunati AVG(ocjena) nazPred prosjOcj
▪ za svaku grupu formirati po jednu n-torku s Matematika 3.25
vrijednošću atributa nazPred i izračunatim Fizika 4
prosjekom Vjerojatnost 4
▪ obaviti operaciju preimenovanja
© FER - Zagreb Baze podataka 2018/2019 80
Agregacija i grupiranje

▪ Ispisati prosječnu i najveću ocjenu za svaki predmet i akademsku godinu:


ispit mbrStud akGod nazPred ocjena
100 2005 Matematika 3
101 2005 Matematika 5 ▪ u istu grupu ulaze n-torke
102 2005 Matematika 2 koje imaju jednake
103 2006 Matematika 3 vrijednosti atributa nazPred i
100 2004 Fizika 5 akGod
101 2006 Fizika 5
102 2006 Fizika 2
100 2005 Vjerojatnost 4

prosjek1(nazPred, akGod, prosjOcj, maxOcj)(nazPred, akGodGAVG(ocjena), MAX(ocjena)(ispit))


prosjek1 nazPred akGod prosjOcj maxOcj
Matematika 2005 3.333 5
Matematika 2006 3 3
Fizika 2004 5 5
Fizika 2006 3.5 5
Vjerojatnost 2005 4 4
© FER - Zagreb Baze podataka 2018/2019 81
SQL - Grupiranje

▪ SELECT SELECT List


FROM ...
[WHERE Condition]
[GROUP BY column [, column]...]

prosjek1(nazPred, akGod, prosjOcj, maxOcj)(nazPred, akGodGAVG(ocjena), MAX(ocjena)(ispit))

SELECT nazPred
nazPred akGod prosjOcj maxOcj
, akGod
Matematika 2005 3.333 5
, AVG(ocjena) AS prosjOcj
Matematika 2006 3 3
, MAX(ocjena) AS maxOcj
Fizika 2004 5 5
FROM ispit
Fizika 2006 3.5 5
GROUP BY nazPred, akGod; Vjerojatnost 2005 4 4

© FER - Zagreb Baze podataka 2018/2019 82


SQL - Grupiranje

▪ svi atributi koji se nalaze u listi za selekciju, a koji nisu argumenti


agregatnih funkcija, moraju biti navedeni u GROUP BY dijelu naredbe
ispit
SELECT nazPred
mbrStud akGod nazPred ocjena
, akGod NEISPRAVNO!
100 2005 Matematika 3
, mbrStud
101 2005 Matematika 5
, AVG(ocjena) AS prosjOcj
102 2005 Matematika 2
, MAX(ocjena) AS maxOcj
103 2006 Matematika 3
FROM ispit
100 2004 Fizika 5
GROUP BY nazPred, akGod;
101 2006 Fizika 5
102 2006 Fizika 2
100 2005 Vjerojatnost 4
Zašto je to neispravno? nazPred akGod mbrStud prosjOcj maxOcj
Za svaku grupu se formira Matematika 2005 100, 101, 102 ? 3.333 5
samo po jedna n-torka: što s Matematika 2006 ? 3 3
onim grupama u kojima Fizika 2004 ? 5 5
postoji više vrijednosti Fizika 2006 ? 3.5 5
atributa mbrStud? Vjerojatnost 2005 ? 4 4
© FER - Zagreb Baze podataka 2018/2019 83

You might also like