Professional Documents
Culture Documents
Isbp Iii1234 87 19
Isbp Iii1234 87 19
Isbp Iii1234 87 19
BAZE PODATAKA
NASTAVNA TEMA: NASTAVNA JEDINICA:
Osnovni elementi
Sortiranje rezultata upita
upitnog jezika SQL
III/ III/ III/
1 2 3
REDNI BROJ ODELJENJE
ČASA: 87. :
III/
4
VREMENSKA ARTIKULACIJA
ČASA:
Uvodni deo: 10 min Glavni deo: 25 min Završni deo: 10 min
Nepregledni upiti
Veoma često se događa da pri upitima koji prikazuju veliku količinu podataka ne
možemo naći ono što nam je potrebno.
Pri prikazivanju rezultata, baze podataka koriste tehnologiju koja se naziva
indeksi.
Indeksi su kolone (ili kolona) po kojoj se sortiraju podaci, kako u samoj bazi tako i
pri upitima.
Po default-u, indeksi se dodeljuju kolonama primarnog ključa, i u nekim
slučajevima kolonama jedinstvenog ključa.
Ukoliko ste primetili, rezultati svih dosadašnjih upita su prikazivani po unapred
definisanom redosledu, po koloni primarnog ključa, bez obzira da li smo mi tu
kolonu navodili u SELECT klauzuli ili ne.
Problem
SELECT id,fname,lname,salary
FROM employee
WHERE city='Philadelphia'
ORDER BY salary ASC;
Pokušajte sada da izvršite istu naredbu, ali bez navođenja ASC kriterijuma.
Ukoliko bi želeli da dobijemo rešenje od najviše ka najnižoj vrednosti plate,
sintaksa bi bila identična, samo što bi u ORDER BY klauzulu morali da navedemo
DESC parametar (opadajući redosled):
SELECT id,fname,lname,salary
FROM employee
WHERE city='Philadelphia'
ORDER BY salary DESC;
Primer 2
ORDEB BY klauzula može raditi sa svim tipovima podataka. Poređajmo sada sve
zaposlene iz Filadelfije po prezimenu (lname) po abecednom poretku.
Rešenje:
SELECT id, fname, lname, salary
FROM employee
WHERE city='Philadelphia'
ORDER BY lname;
Korišćenje većeg broja kolona u ORDER BY
kaluzuli
Ukoliko bi ovaj upit sortirali samo po koloni fname, dobili bi sledeći rezultat:
SELECT * FROM employee
WHERE fname IN ('Bill’, 'Art',Justine’);
ORDER BY fname;
Ukoliko kolona pomoću koje sortiramo rezultate ima u više redova iste vrednosti,
DBMS sortiranje vrši pomoću indeksa (u ovom slučaju primarnog ključa).
Podaci i dalje nisu u potpuno čitljivom obliku.
Rešenje ove situacije jeste sortiranje po (barem) još jednoj koloni, kako bi prikaz
rezultata dobio određeni sklad.
U ovom slučaju, najlogičnije je da se pored kolone fname u ORDER BY klauzulu
uvrsti i kolona lname. Pogledajmo rezultate:
SELECT * FROM employee
WHERE fname IN ('Bill’, 'Art',Justine’);
ORDER BY fname, lname;
Analiza
Obratite pažnju na kolone fname i lname. DBMS prvo rezultate sortira po koloni
fname u rastućem poretku (A-Z), a ukoliko se dogodi da postoji više redova koji
imaju istu vrednost za kolonu fname, DBMS onda te redove sortira po koloni
lname, takođe u rastućem poretku (A-Z).
Primer: Kada je DBMS došao do redova sa imenom Bill, umesto da ih sortira po
vrednosti primarnog ključa (kao u prošlom primeru), on ih sortira po vrednosti
kolone lname (prezimena), što ima više smisla.
Kao rezultat dobijamo uređen skup podataka sortiranih tako da ih možemo
kasnije sa lakoćom koristiti.
Problem?
Međutim, šta bi se desilo ukoliko bi više zaposlenih imalo isto i ime i prezime?
Kako bi onda sortirali rezultate, i da li bi nam dve kolone bile dovoljne za korektno
sortiranje?
Nepisano pravilo je da, u cilju bolje preglednosti podataka, ukoliko sortiranje
vršite po više kolona koje će u nekom slučaju sadržati identične rezultate, u
ORDER BY klauzuli navedete onoliko kolona sa koliko će obezbediti da po svim
kriterijumima sortiranja dobijete uređen skup rezultata.
Primer: Ukoliko ste rezultate sortirali po imenu, prezimenu i gradu u kojem
zapsoleni rade, i imate situaciju u kojoj postoje dva radnika sa identičnim
vrednostima podataka iz tih kolona (npr. Michael Jordan – Chicago), onda je za
sortiranje potrebno dodati još jednu kolonu kojom će se obezbediti da se ta dva
reda ne sortiraju po indeksiranoj koloni (najčešće ključu). Na primer, u ORDER BY
klauzulu dodati i kolonu bdate(datum rođenja) ukoliko su im datumi rođenja
različiti.
Primer 2
Sortirati sve zaposlene (id, ime, prezime, datum rodjenja, država) iz država
Minesota (MN) i Virdžinije (VA) od najmlađeg ka najstarijem, tako da se prvo
prikažu radnici iz Virdžinije a zatim iz Minesote.
Rešenje:
Korišćenje rednog broja kolone umesto
imena kolone