You are on page 1of 8

INFORMACIONI SISTEMI I

BAZE PODATAKA
NASTAVNA TEMA: NASTAVNA JEDINICA:

Osnovni elementi Korišćenje uslovne logike u


upitnog jezika SQL sortiranju
III/ III/ III/
1 2 3
REDNI BROJ ODELJENJE
ČASA: 88. :
III/
4

CILJ ČASA: TIP ČASA:


Upoznavanjem sa komandama za sortiranje
Vežbe
rezultata
NASTAVNE METODE: NASTAVNA OBLIK RADA:
SREDSTVA:
Demonstrativni Računar, projektor Individualni

VREMENSKA ARTIKULACIJA
ČASA:
Uvodni deo: 10 min Glavni deo: 25 min Završni deo: 10 min
Problem

 Podatke želite da sortirate na osnovnu određene uslovne logike.


 Na primer, želite da soritrate po koloni bonus u rastućem poretku, ali želite da
prikažete i zaposlene koji nemaju bonus (NULL vrednost) na kraju upita.
 Radi poređenja, uzmimo zaposlene iz Nju Jorka. Rezultat bi trebao da ima sledeći
oblik:
 Ukoliko se sećate primera sa prethodnog
časa, ovakav rezultat nismo mogli dobiti sa
NULL vrednostima.
 Sada ćemo razmotriti način na koji to
možemo odraditi.
Analiza

 Potrebno je upotrebiti CASE izraz da bismo označili kada je vrednost NULL, a kada
ne.
 Suština je u tome da se odredi oznaka koja može imati dve vrednosti:
 Jednu koja predstavlja NULL vrednost;
 A druga koja predstavlja sve ostale vrednosti.
 Potom tu oznaku treba dodati u ORDER BY klauzulu, i tako na jednostavan način
možemo odrediti da li će NULL vrednost biti postavljena na početak ili kraj, a da
bude nezavisna od načina sortiranja vrednosti različitih od NULL.
Rešenje i analiza rešenja

SELECT id,fname,lname,city,bonus,
CASE WHEN bonus IS NULL THEN 0 ELSE 1 END AS ordered_by
FROM employee
WHERE city='New York’
ORDER BY ordered_by DESC, bonus

 Ukoliko iskoristimo CASE uslovnu logiku, možemo dodeliti „fiktivnoj“ koloni


ordered_by vrednost 0 svaki put kada je vrednost kolone bonus NULL, i dodeliti joj
vrednost 1 svaki put kada je vrednost kolone bonus NOT NULL.
 Zatim rezultate sortiramo po fiktivnoj koloni ordered_by, u opadajućem poretku, prvo
vrednost 1, a zatim vrednost 0.
 Na taj način smo obezbedili da nam se prvo sortiraju NOT NULL vrednosti iz kolone
bonus, a zatim NULL vrednosti.
 Kako su sve NOT NULL vrednosti za kolonu ordered_by 1, i sortiranje bi se onda vršilo
po primarnom ključu, navodimo kao sledeću kolonu za sortiranje bonus, u rastućem
poretku.
 Na taj način, kako imamo višestruko puta iste vrednosti za kolonu ordered_by, u tom
slučaju se sortiranje vrši po koloni bonus.
Primer 2

 Uslovna logika se može koristiti i u okviru ORDER BY klauzule.


 Primer: Potrebno je da rezultate sortirate tako da, ukoliko je razlika između plate i
bonusa veća od 1000 dolara – sortiranje se vrši po koloni salary, a ukoliko to nije
slučaj, onda se sortiranje vrši po koloni bonus. Zaposleni su iz države NY.
 Napomena: Ukoliko bonus ima NULL vrednost, ukoliko ga oduzimate, ili vršite
bilo kakvu aritmetičku operaciju sa drugom kolonom koja nije NULL, kao rezultat
ćete dobiti NULL vrednost. Potrebno je izostaviti NULL vrednosti bonusa.
Primer 2 - rešenje

SELECT id, fname, lname, state, salary, bonus, salary-bonus


FROM employee WHERE state='NY' AND bonus IS NOT NULL
ORDER BY CASE WHEN salary-bonus>1000 THEN salary
ELSE bonus END;

Pri korišćenju ovakog načina


sortiranja, problem nastaje u
tome što se kolone ne mogu
sortirati po opadajućem
poretku, već samo po
podrazumevanom. Ukoliko
navedemo argument ASC ili
DESC, DBMS će prijaviti
grešku.
Predmetni profesor Elizabeta Momčilović

You might also like