Podupit (subquery) predstavlja SQL upit koji je smešten unutar drugog, glavnog upita. U zavisnosti od rezultata koji vraćaju, podupiti mogu biti različitih tipova. U okviru ove lekcije poseban akcenat stavlja se na podupite koji vraćaju jednu jedinu vrednost.

Podupiti koji vraćaju jednu vrednost

Podupit koji vraća jednu vrednost naziva se skalarni podupit. Najčešće koristi agregatne funkcije kao što su AVG (izračunavanje prosečne vrednosti), MIN (pronalaženje najmanje vrednosti), MAX (pronalaženje najveće vrednosti), COUNT (brojanje redova), SUM (sabiranje vrednosti).

Pošto rezultat ovakvog podupita predstavlja jednu jedinu vrednost, on se može koristiti u poređenju sa vrednostima iz kolona glavnog upita.

Operator poređenja u kombinaciji sa podupitima

Operatori poređenja omogućavaju upoređivanje vrednosti iz tabele sa vrednošću koju vraća podupit.

Podupit se u ovakvim slučajevima najčešće nalazi u WHERE delu SQL naredbe i uvek je zapisan u zagradama.

Opšti oblik SQL naredbe je:

SELECT kolone
FROM tabela
WHERE kolona operator (SELECT ...);

Najčešće korišćeni operatori su: = (jednako), > (veće od), < (manje od), >= (veće ili jednako), <= (manje ili jednako), <> (različito)

Napomena: Operatori poređenja se mogu koristiti samo u kombinaciji sa podupitima koji vraćaju jednu vrednost. Ukoliko podupit vrati više redova, dolazi do greške u izvršavanju upita, jer SQL ne može da izvrši poređenje jedne vrednosti sa skupom više vrednosti pomoću osnovnih operatora poređenja. Zbog toga se u praksi najčešće koriste agregatne funkcije koje garantuju da će rezultat podupita biti jedna vrednost.


Tabela koju koristimo 

SQL upiti za kreiranje i popunjavanje tabele Zaposleni koja će biti korišćena u primerima:

Kreiranje tabele Zaposleni

CREATE TABLE Zaposleni (
    ID INT PRIMARY KEY,
    Ime VARCHAR(50),
    Plata INT,
    Odeljenje VARCHAR(30)
);

Popunjavanje tabele podacima

INSERT INTO Zaposleni (ID, Ime, Plata, Odeljenje) VALUES
(1, 'Ana', 60000, 'IT'),
(2, 'Marko', 55000, 'IT'),
(3, 'Ivana', 48000, 'HR'),
(4, 'Petar', 70000, 'IT'),
(5, 'Jelena', 48000, 'HR');

Primer 1: Plata veća od prosečne

Čest zahtev u praksi jeste pronalaženje zaposlenih čija je plata veća od prosečne plate svih zaposlenih. Da bi se ovaj zadatak rešio, prvo je potrebno izračunati prosečnu platu, a zatim izvršiti poređenje.

SELECT Ime, Plata
FROM Zaposleni
WHERE Plata > (SELECT AVG(Plata) FROM Zaposleni);

U ovom primeru podupit računa prosečnu platu, dok glavni upit prikazuje samo one zaposlene čija je plata veća od dobijene vrednosti.


Primer 2: Plata manja od maksimalne vrednosti

Podupiti se često koriste i za poređenje sa ekstremnim vrednostima u tabeli. Sledeći primer prikazuje zaposlene koji nemaju najveću platu.

SELECT Ime, Plata
FROM Zaposleni
WHERE Plata < (SELECT MAX(Plata) FROM Zaposleni);

Podupit pronalazi najveću platu, a glavni upit izdvaja sve zapise čija je plata manja od te vrednosti.


Primer 3: Zaposleni sa minimalnom platom

Korišćenjem operatora jednako i agregatne funkcije MIN moguće je pronaći zaposlenog ili više zaposlenih sa najmanjom platom.

SELECT Ime, Plata
FROM Zaposleni
WHERE Plata = (SELECT MIN(Plata) FROM Zaposleni);

Primer 4: Poređenje sa prosečnom vrednošću

Operator različito omogućava izdvajanje zapisa čije se vrednosti razlikuju od izračunate prosečne vrednosti.

SELECT Ime, Plata
FROM Zaposleni
WHERE Plata <> (SELECT AVG(Plata) FROM Zaposleni);

Ovakvi upiti se koriste kada je potrebno isključiti zapise koji imaju tačno određenu referentnu vrednost.


Napomena

Kod korišćenja operatora poređenja sa podupitima neophodno je voditi računa da podupit vraća tačno jednu vrednost. Ukoliko podupit vrati više redova, SQL server neće moći da izvrši poređenje i doći će do greške. Zbog toga se u praksi najčešće koriste agregatne funkcije koje garantuju jedan rezultat.

Takođe, tip podatka koji vraća podupit mora biti kompatibilan sa tipom podatka kolone sa kojom se poredi.

Greške u radu sa podupitima najčešće nastaju usled neusklađenosti tipova podataka, zaboravljenih zagrada oko podupita ili pogrešnog pretpostavljanja da će podupit vratiti samo jedan rezultat.


Zadaci za samostalan rad
  1. Napisati SQL upit koji prikazuje zaposlene čija je plata veća od minimalne plate.

  2. Prikazati zaposlene čija je plata manja ili jednaka prosečnoj plati.

  3. Pronaći zaposlene koji imaju istu platu kao zaposleni sa najvećom platom.

Last modified: Friday, 30 January 2026, 7:33 AM