Escolar Documentos
Profissional Documentos
Cultura Documentos
HAVING
Klauzula GROUP BY
Klauzula GROUP BY ima zadatak da omogui
grupisanje vrsta u rezultujuoj tabeli na
osnovu identinih vrednosti
Specijalan nain upotrebe operatora GROUP
BY je povezivanje neke agregatne funkcije sa
grupom redova
Klauzula GROUP BY
Primer1:
SQL upit koji NE MOE DA SE IZVRI i
koji e dovesti do POJAVE GREKE.
SELECT Ime, Prezime, SUM(Plata)
FROM RADNIK;
Ovaj upit je mogu samo uz upotrebu
GROUP BY klauzule.
klauzula GROUP BY izvrava nakon
klauzule WHERE
Klauzula GROUP BY
Primer2:
Nai srednju vrednost plate u svakom
sektoru.
SELECT <kolone1>
FROM <tabele>
WHERE <uslovi>
GROUP BY <kolone2>
Atribut u <kolone1> mora postojati i u
<kolone2>.
U <kolone1> jo moe biti konstanta ili
agregatna funkcija.
Klauzula GROUP BY
WHERE ili ORDER BY klauzule mogu
postojati, u istom upitu, sa GROUP BY
klauzulom.
Nai srednju vrednost plate u svakom
sektoru.
Rjeenje:
SELECT Sektor.Naziv, Avg(Radnik.Plata)
AS ProsekPlata
FROM Sektor, Radnik
WHERE Sektor.Broj=Radnik.Sektor
Klauzula GROUP BY
Primer3:
Nai ukupnu vrednost plata u svakom sektoru
za svako radno mesto.
*Gupisati po sektoru pa po radnom mestu.
SELECT Sektor.Naziv, Sektor.Sef,
SUM(Radnik.Plata) AS Ukupno
FROM Radnik,Sektor
WHERE Radnik.Sektor=Sektor.Broj
GROUP BY Sektor.Naziv, Sektor.Sef
Klauzula GROUP BY
Kvalifikovano grupisanje
HAVING logiki_izraz.
Svaki upitni blok formulisan GROUP
BY i HAVING operatorom moe se
preformulisati u oblik koji ih ne
koristi.
Klauzule GROUP BY i
HAVING
Primena
Klauzule GROUP BY i HAVING je mogue
kombinovati sa WHERE klauzulom
WHERE - primenjuje se predikat koji odreuje
vrste koje ulaze u sastav rezultujue tabele
GROUP BY - vri se grupisanje vrsta u
rezultujuoj tabeli
HAVING - primenjuje se predikat koji odreuje
vrste koje e ostati u rezultatu upita
ORDER BY - sortiranje rezultata se vri tek na
kraju
Klauzule GROUP BY i
HAVING
Primer 7
SELECT Sektor, COUNT(*) AS
BrojRadnika
FROM RADNIK
WHERE Pol = ''
GROUP BY Sektor
HAVING COUNT(*) > 1;
Klauzule GROUP BY i
HAVING
Primer 8
SELECT Sektor, Pol, COUNT(*) AS
ProsekPlata
FROM RADNIK
GROUP BY Sektor, Pol
ORDER BY AVG(Plata);
Spajanje tabela
Svi SQL upiti koje smo do sada razmatrali su
koristili podatke iz samo jedne tabele.
esto se javlja situacija da se traena
informacija nalazi u veem broju tabela.
U takvim situacijama potrebno je izvriti
spajanje vrsta iz razliitih tabela i
generisanje rezultujue tabele.
Za pribavljanje podataka iz veeg broja
tabela dovoljno je u klauzuli FROM navesti
imena tabela iz kojih elimo da pribavimo
podatke.
Spajanje tabela
Da bi spajanje tabela bilo uspeno, osim u
nekim specijalnim sluajevima, potrebno je
da navedemo uslov spoja, odnosno da
navedemo kolone na osnovu ijih vrednosti
se vri spajanje vrsta iz razliitih tabela.
Spajanje tabela se vri tako to se najee
uparuje strani klju iz jedne tabele sa
primarnim kljuem koji referencira u drugoj
tabeli.
Spajanje tabela
Uslov spajanja moe da se zada u okviru
WHERE klauzule ili korienjem kljune
rei JOIN u okviru FROM klauzule.
Spoj na jednakost (equi-join)
obezbeuje spajanje podataka iz dve ili
vie tabela na osnovu jednakosti
odgovarajuih atributa, obino na osnovu
primarnih i spoljnih kljueva.
Najjednostavniji sluaj navoenja spoja je
kada se u WHERE klauzuli specificira uslov
spoja po jednakosti.
Spajanje tabela
Dekartov proizvod je sluaj kada u
WHERE klauzuli ne postoji uslov spoja, a u
FROM klauzuli je navedeno vie tabela.
U tom sluaju nema spajanja vrsta po
vrednosti nekog atributa, ve se pravi
kombinacija svake vrste iz jedne tabele sa
svakom vrstom iz druge tabele (u sluaju
Dekartovog proizvoda dve tabele)
Spajanje tabela
Spoljni spoj (outer-join) omoguava spajanje
dve tabele po vrednosti nekog atributa, ali i
ukljuivanje onih torki (vrsta) iz jedne ili druge
tabele (ili iz obe), koje ne zadovoljavaju uslov
jednakosti.
Da bi bolje razumeli razliite tipove spoja
koristiemo tabele RADNIK i SEKTOR ali u neto
jednostavnijem obliku. Pojednostavljene verzije
tabela, RADNIK1 i SEKTOR1, su date u nastavku.
Za svaki tip spoja daemo oba oblika navoenja
uslova spoja: i korienjem WHERE klauzule i
korienjem kljune rei JOIN u klauzuli FROM.
Spajanje tabela
SELECT *
FROM SEKTOR1 FULL OUTER JOIN RADNIK1 ON
SEKTOR1.Broj = RADNIK1.Sektor;