SQL čitanje i sortiranje podataka
Sada ćemo se upoznati sa najosnovnijim oblikom upita za čitanje podataka iz baze, koji se zadaje u jeziku SQL. Za ovo koristimo iskaz SELECT. Ovaj upit može biti veoma kompleksan, a u ovom tekstu ćemo obraditi samo najosnovnije mogućnosti za čitanje podataka iz jedne tabele.
U svom najosnovnijem obliku, iskaz SELECT koristimo da dobijemo neki "odgovor" od baze podataka, tako što uz njega zadajemo jedan ili više izraza (odvojenih zarezima).
SELECT lista izraza
Slično kao u algoritmima ili klasičnom programiranju, izraz može biti neka kombinacija operanda povezanih operatorima. Pri tom obično kao operande možemo navesti:
- Literal - neka "bukvalna" vrednost - nrp. broj, tekst ili datum
- Naziv kolone - kada povlačimo podatke iz neke tabele u bazi podataka, možemo zadati naziv polja i dobijaćemo kao rezultat vrednosti iz te kolone
- Poziv funkcije - neka od funkcija koju prepoznaje konkretni SQL sistem i kojoj opet možemo zadati listu parametara (tj. opet neku listu izraza), zavisno od funkcije
Ako želimo da zadamo nazive kolona, tj. da izvlačimo podatke iz baze podataka, moramo dopuniti SELECT iskaz odrednicom FROM. Već znamo da tabela u relacionoj bazi podataka, sadrži slogove (redove) sa poljima (kolonama). Jasno nam je da podatke možemo iščitati tako što posle ključne reči SELECT, zadajemo listu polja (i drugih izraza, pošto SELECT ne mora da sadrži isključivo polja - čak i polja mogu biti deo izraza, ne moramo ih navesti samostalno). Svaki izraz iz liste predstavlja po jednu kolonu koja će biti prikazana u rezultatu. Onda se zadaje odrednica FROM posle koje navodimo tabelu odakle čitamo podatke (ovde se u stvari može zadati lista tabela, ali time se bavimo u tekstu o povezivanju tabela).
SELECT lista izraza FROM lista tabela
Za sada ćemo umesto liste tabela sa podacima zadavati samo jednu tabelu. Umesto liste polja, moguće je zadati oznaku * (zvezdica), koja označava sva polja.
SELECT * FROM tabela
Kada se govori o optimizaciji SQL upita, ova praksa se ne preporučuje. Bolje je navesti čak i sva polja nego samo zvezdicu.
Svaki izraz u SELECT listi je moguće imenovati korišćenjem odrednice AS, čime dodeljujemo alternativno ime izrazu - tzv. alias.
SELECT izraz AS naziv, izraz AS naziv, ...
Kasnije u nekim situacijama možemo koristiti taj naziv, na primer kada zadajemo listu za sortiranje, o čemu pišemo u nastavku teksta.
Inače, ako želimo da aliasi sadrže i razmake (tj. da budu sastavljeni iz više reči), moramo da ih navedemo unutar apostrofa.
...izraz AS 'naziv u više reči' ...
Dobijene rezultate je moguće poređati ako navedemo i odrednicu ORDER BY. U ovoj odrednici možemo navesti polje po kome se vrši sortiranje, izraz zasnovan na nekom od polja ili čak listu polja i izraza. Za svaki član ORDER liste možemo navesti da li se sortira po opadajućem redosledu (DESC). Ako se DESC ne navede, sortiranje se vrši po rastućem redosledu (od najmanje ka najvećoj vrednosti). Za tekstualne vrednosti, to je redosled po abecedi. Inače, moguće je navesti i odrednicu ASC, kojom eksplicitno zahtevamo sortiranje u rastućem redosledu.
SELECT lista izraza FROM tabela
ORDER BY lista izraza
SELECT lista izraza FROM [tabela]
ORDER BY izraz [DESC], izraz [DESC] ...
Šta znači kada se zada lista izraza za sortiranje? Pa, najpre se gleda prvi izraz - ako su sve vrednosti različite, vrši se prosto sortiranje po prvom izrazu, a ostali se ignorišu. Međutim, ako se pojavi više vrednsti prvog izraza koje su podjednake, onda se sortiranje vrši prema vrednosti drugog izraza itd.
Primer
Recimo da postoji sledeća tabela pod nazivom knjige.
sifra | naslov | stranice | zanr | pisac |
---|---|---|---|---|
0001 | Isijavanje | 390 | HOR | P02 |
0002 | Boja magije | 270 | FAN | P09 |
0005 | Čekajući Godoa | 90 | DRA | P11 |
0006 | To | 1070 | HOR | P02 |
0007 | Veštice na putu | 370 | FAN | P09 |
000A | Mračna kula - Revolveraš | 200 | FAN | P02 |
000B | Prokleta avlija | 150 | IST | P01 |
Pogledajmo najpre najjednostavniji SELECT iskaz koji treba da pročita naslove i brojeve strana iz tabele knjige.
SELECT naslov, stranice
FROM knjige
naslov | stranice |
---|---|
Isijavanje | 390 |
Boja magije | 270 |
Čekajući Godoa | 90 |
To | 1070 |
Veštice na putu | 370 |
Mračna kula - Revolveraš | 200 |
Prokleta avlija | 150 |
Hajde da sada napravimo takav isti upit, ali da još sortiramo podatke prema broju strana od "najveće" do "najmanje" knjige - dakle u opadajućem redosledu. Takođe smo zadali i novi naziv "broj" za drugi izraz u SELECT listi.
SELECT naslov, stranice AS broj
FROM knjige
ORDER BY broj DESC
naslov | broj |
---|---|
To | 1070 |
Isijavanje | 390 |
Veštice na putu | 370 |
Boja magije | 270 |
Mračna kula - Revolveraš | 200 |
Prokleta avlija | 150 |
Čekajući Godoa | 90 |
Možete i sami isprobati ovaj primer...