You are on page 1of 5

Klauzula WHERE

...nastavak (primjeri)

Primjer 20. Prikazati imena zaposlenih koji rade u odjeljenju 20, a imaju posao
vozača.
SELECT ime FROM RADNIK
WHERE brod = 20 AND posao = 'vozač';

Primjer 21. Prikazati ime, posao i platu uposlenih u odjeljenju 30, čija je plata
veća od 2000.
SELECT R.ime, R.posao, R.plata, R.brod FROM RADNIK R
WHERE R.brod = 30 AND R.plata > 2000;

Primjer 22. Prikazati ime, posao, platu i premiju uposlenih čiji je posao analitičar
ili savjetnik.
SELECT ime, posao, plata, premija FROM RADNIK
WHERE posao = 'analitičar' OR posao = 'savjetnik';
U ovom upitu potrebno je da bude zadovoljen jedan od dva uslova, pa je
korišten operator OR. Baza je osmišljena tako da jedan zaposleni može obavljati
samo jedan posao u preduzeću!
Ovaj upit može da se uradi i na drugi način, korištenjem operatora IN, a tada
se kao elementi skupa koji zadovoljavaju uslove navode poslovi 'analitičar' i
'savjetnik'.
SELECT ime, posao, plata, premija FROM RADNIK
WHERE posao IN ('analitičar', 'savjetnik');

Primjer 23. Prikazati ime, posao, platu i premiju zaposlenih čiji posao nije
analitičar ni savjetnik.
SELECT ime, posao, plata, premija FROM RADNIK
WHERE posao <> 'analitičar' AND posao <> 'savjetnik';
U ovom zadatku potrebno je da ne budu prikazani zaposleni koji obavljaju
određene poslove, pa je korišten operator NOT IN da bi bili eliminisani oni
poslovi koji su navedeni u skupu.
SELECT ime, posao, plata, premija FROM RADNIK
WHERE posao NOT IN ('analitičar', 'savjetnik');

Primjer 24. Prikaži ime, posao i broj odjeljenja upravnika i direktora.


SELECT R.ime, R.posao, R.brod FROM RADNIK R
WHERE (R.posao = 'direktor') OR (R.posao = 'upravnik');
Na drugi način:
SELECT R.ime, R.posao, R.brod FROM RADNIK R
WHERE R.posao IN ('direktor', 'upravnik');

Primjer 25. Prikazati ime i broj odjeljenja zaposlenih koji rade u odjeljenju 10 ili
20, a kvalifikacija im je VKV.
SELECT ime, brod FROM RADNIK
WHERE (brod = 10 OR brod = 20) AND kvalif = 'VKV';
U ovom upitu imamo kombinaciju uslova koji su povezani operatorima AND i
OR, pa su zagrade neophodne da bi dobili tačno ono rješenje koje se traži u
zadatku. U dijelu upita (brod = 10 OR brod = 20) izdvojeni su zaposleni iz
odjeljenja 10 ili 20, a onda je dodat još i uslov da oni, pored toga, treba da imaju
i kvalifikaciju VKV. Ovaj zadatak može se uraditi i na drugi način, a da i dalje
bude ispravan:
SELECT ime, brod FROM RADNIK
WHERE (brod = 10 AND kvalif = 'VKV') OR (brod = 20 AND kvalif =
'VKV');
Ako bismo ovaj upit uradili bez stavljanja zagrada tamo gdje je to potrebno,
prikazivao bi netačne rezultate, kao npr.:
SELECT ime, brod FROM RADNIK
WHERE brod = 10 OR brod = 20 AND kvalif = 'VKV';
U nekim SUBP (Oracle, SQL Server i sl.) operacija AND ima viši prioritet od
operacije OR, a NOT ima najviši prioritet. Zbog toga bi ovaj iskaz bio netačno
interpretiran kao uslov: brod = 10 OR (brod = 20 AND kvalif = 'VKV'). Upotreba
zagrada je preporučljiva da korisnik ne bi morao da pamti prioritete operacija.

Primjer 26. Prikazati ime, posao i kvalifikaciju zaposlenih koji obavljaju posao
upravnika ili savjetnika, a zaposleni su u odjeljenju 20.
SELECT ime, posao, kvalif FROM RADNIK
WHERE posao IN ('upravnik', 'savjetnik') AND brod = 20;

SELECT ime, posao, kvalif FROM RADNIK


WHERE (posao = 'upravnik' OR posao = 'savjetnik') AND brod = 20;

SELECT ime, posao, kvalif FROM RADNIK


WHERE (posao = 'upravnik' AND brod = 20) OR (posao = 'savjetnik'
AND brod = 20);
U ovom primjeru je prikazan zadatak urađen na tri
načina, korištenjem različitih kombinacija
zagrada i operatora, a svaki od njih je ispravan.

Primjer 27. Prikaži ime i posao upravnika i analitičara iz odjeljenja 10.


Bez korištenja zagrada zadatak bi se mogao uraditi na sljedeći način, što nije
tačno!
SELECT R.ime, R.posao, R.brod FROM RADNIK R
WHERE R.posao = 'upravnik' OR R.posao = 'analitičar' AND R.brod =
10;
Netačan rezultat bi bio:

Rješenje zadatka urađeno na sljedeći način je ispravno:


SELECT R.ime, R.posao, R.brod FROM RADNIK R
WHERE (R.posao = 'upravnik' OR R.posao = 'analitičar') AND R.brod =
10;
Tačan rezultat bi bio:
Napomena: Poželjno je da redoslijed ispitivanja uslova regulišete upotrebom
zagrada jer u protivnom, možete dobiti potpuno neočekivane i vjerovatno netačne
odgovore na upit, s obzirom na to da uslovi nisu interpretirani na odgovarajući
način.

Primjer 28. Prikazati ime, datum zaposlenja, platu, premiju i broj odjeljenja za
zaposlene koji imaju platu između 1000 i 2000 (uključujući i te vrijednosti).
SELECT ime, datzap, plata, premija, brod FROM RADNIK
WHERE plata BETWEEN 1000 AND 2000;
A rezultat je:

Operator BETWEEN se koristi onda kada je potrebno prikazati podatke iz nekog


opsega vrijednosti, uključujući i granične vrijednosti. Ovaj zadatak bi se mogao
uraditi i na drugi način:
SELECT ime, datzap, plata, premija, brod FROM RADNIK
WHERE plata >= 1000 AND plata <= 2000;

Primjer 29. Prikaži ime i platu uposlenih čija je plata od 2600 do 3000.
SELECT R.ime, R.plata FROM RADNIK R
WHERE R.plata >= 2600 AND R.plata <= 3000;

SELECT R.ime, R.plata FROM RADNIK R


WHERE R.plata BETWEEN 2600 AND 3000;
Primjer 30. Prikazati ime, datum zaposlenja, platu, premiju i broj odjeljenja za
uposlene koji imaju platu između 1000 i 2000 (ne uključujući te vrijednosti).
SELECT ime, datzap, plata, premija, brod FROM RADNIK
WHERE plata > 1000 AND plata < 2000;

Napomena: U ovom slučaju, kada ne treba da se uzmu u obzir granične


vrijednosti 1000 i 2000, ne može se koristiti operator BETWEEN.
Neki SUBP, npr. Oracle, imaju na raspolaganju i klauzule ANY (SOME), ALL
koje se mogu koristiti u WHERE klauzuli. Kod drugih SUBP, npr. MS Access,
MS SQL Server, ove klauzule se mogu koristiti samo u ugniježdenim upitima. U
MySQL-u ANY(), SOME() i EVERY() grupne su funkcije. Upotreba ovih
klauzula ima mnogo više smisla u ugniježdenim upitima. Sljedeća dva primjera
urađena su u SUBP Oracle.

Primjer 31. Prikazati zaposlene koji imaju platu jednaku bilo kojoj vrijednosti iz
skupa {1000, 1500, 2000}.
SELECT idbr, ime, plata FROM RADNIK
WHERE plata = ANY (1000, 1500, 2000);

SELECT idbr, ime, plata FROM RADNIK


WHERE plata = SOME (1000, 1500, 2000);

Primjer 32. Prikazati zaposlene čija je plata veća od svih navedenih vrijednosti u
skupu {1000, 1500, 2000}.
SELECT idbr, ime, plata FROM RADNIK
WHERE plata > ALL (1000, 1500, 2000);

You might also like