Uvod

Prilikom rada sa bazama podataka često je potrebno:

  • grupisati podatke,

  • filtrirati grupe podataka,

  • povezivati više tabela,

  • sortirati rezultate.

Za ove potrebe koriste se različite SQL klauzule:

  • GROUP BY

  • HAVING

  • JOIN

  • ORDER BY


1. GROUP BY klauzula

 

GROUP BY služi za grupisanje podataka prema jednoj ili više kolona.

Najčešće se koristi zajedno sa agregatnim funkcijama.

Najpoznatije agregatne funkcije su:

  • COUNT() – broji zapise

  • SUM() – računa zbir

  • AVG() – računa prosek

  • MIN() – pronalazi najmanju vrednost

  • MAX() – pronalazi najveću vrednost

Sintaksa

SELECT kolona, agregatna_funkcija(kolona)
FROM tabela
GROUP BY kolona;

Primer 1 – broj učenika po razredima

Tabela:

Ucenik(ID, Ime, Razred)

SELECT Razred, COUNT(*)
FROM Ucenik
GROUP BY Razred;

Rezultat:

Razred Broj učenika
III-1 25
III-2 28
III-3 24

SQL grupiše učenike po razredima i računa koliko ih ima u svakoj grupi.

Pravilo:

Ako SELECT sadrži:

  • agregatnu funkciju i

  • običnu kolonu

onda ta kolona mora biti navedena u GROUP BY klauzuli.

Neispravan primer

SELECT Razred, AVG(Prosek)
FROM Ucenik;

Ovo je pogrešno jer SQL ne zna kako da grupiše podatke po razredima.

Ispravan primer

SELECT Razred, AVG(Prosek)
FROM Ucenik
GROUP BY Razred;

2. HAVING klauzula

 

HAVING služi za filtriranje grupa podataka nakon grupisanja.

Važno je razlikovati:

  • WHERE → filtrira redove pre grupisanja

  • HAVING → filtrira grupe posle grupisanja

Sintaksa

SELECT kolona, agregatna_funkcija(kolona)
FROM tabela
GROUP BY kolona
HAVING uslov;

Primer

Prikazati samo razrede koji imaju više od 25 učenika.

SELECT Razred, COUNT(*)
FROM Ucenik
GROUP BY Razred
HAVING COUNT(*) > 25;

Rezultat:

Razred Broj učenika
III-2 28

Kada se koristi?

Koristi se kada želimo da postavimo uslov nad grupama ili agregatnim funkcijama.


3. JOIN klauzula

 

JOIN služi za povezivanje više tabela.

U relaconim bazama podataka podaci su često raspoređeni u više tabela.

Na primer:

Tabela Ucenik

ID Ime OdeljenjeID

Tabela Odeljenje

ID Naziv

Ako želimo ime učenika i naziv odeljenja, moramo povezati tabele.

Primer

SELECT Ucenik.Ime, Odeljenje.Naziv
FROM Ucenik
JOIN Odeljenje
ON Ucenik.OdeljenjeID = Odeljenje.ID;

Vrste JOIN operacija

  • INNER JOIN – prikazuje podudarne podatke

  • LEFT JOIN – prikazuje sve iz leve tabele + podudarne podatke

  • RIGHT JOIN – prikazuje sve iz desne tabele + podudarne podatke

  • FULL JOIN – prikazuje sve podatke iz obe tabele

U srednjoškolskom radu najčešće se koristi INNER JOIN.


4. ORDER BY klauzula

 

ORDER BY služi za sortiranje rezultata.

Može sortirati:

  • rastuće (ASC)

  • opadajuće (DESC)

Sintaksa

SELECT *
FROM tabela
ORDER BY kolona;

Primer 1 – rastući redosled

SELECT *
FROM Ucenik
ORDER BY Prezime ASC;

Primer 2 – opadajući redosled

SELECT *
FROM Ucenik
ORDER BY Prosek DESC;

Prvo će biti prikazani učenici sa najvećim prosekom.


 

Klauzula Namena
GROUP BY Grupisanje podataka
HAVING Filtriranje grupa
JOIN Povezivanje tabela
ORDER BY Sortiranje rezultata


Zadaci za vežbu

Za tabelu: Proizvod(ID, Naziv, Kategorija, Cena)

  1. Prikazati prosečnu cenu proizvoda po kategorijama.

Rešenje:

SELECT Kategorija, AVG(Cena)
FROM Proizvod
GROUP BY Kategorija;

   2. Prikazati kategorije koje imaju više od 5 proizvoda.

Rešenje:

SELECT Kategorija, COUNT(*)
FROM Proizvod
GROUP BY Kategorija
HAVING COUNT(*) > 5;

 3. Prikazati sve proizvode sortirane po ceni opadajuće.

Rešenje:

SELECT *
FROM Proizvod
ORDER BY Cena DESC;

  4. Povezati tabele Kupac i Porudzbina i prikazati ime kupca i datum porudžbine.

Rešenje:

SELECT Kupac.Ime, Porudzbina.Datum
FROM Kupac
JOIN Porudzbina
ON Kupac.ID = Porudzbina.KupacID;
Last modified: Wednesday, 10 June 2026, 5:41 AM