You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
190<br />
pc_chip/studeni_07/helpdesk<br />
Programiranje<br />
S joinom smo brži<br />
SQL upiti olakšavaju nam kreiranje izvještaja i manipulaciju podacima unutar baze podataka. Najučestaliji su<br />
upiti koji prikupljaju podatke iz jedne tablice, ali zbog brzine rada često je potrebno istovremeno selektirati<br />
podatke iz dviju ili više tablica. U tom je slučaju preporučljivo upotrebljavati join relacije. Velik broj korisnika<br />
plaši se uporabe joinova. Vrijeme je da se taj strah iskorijeni<br />
piše > Boris Kretonić<br />
SQL (Structured Query Language) je<br />
ANSI (American National Standards Institute)<br />
standardni računalni jezik za pristup<br />
i manipulaciju bazama podataka. Na žalost,<br />
proizvođači baza podataka nisu u potpunosti<br />
poštovali ANSI-jeve standarde, pa<br />
postoje mnoge verzije SQL-a. Dobra vijest<br />
je da glavne SQL-ove ključne riječi (select,<br />
update, delete, insert, where itd.) koristimo<br />
na gotovo identičan način u svim verzijama<br />
SQL-a.<br />
Pristup podacima iz jedne tablice korištenjem<br />
SQL upita izuzetno je jednostavan<br />
i većina korisnika s tim nema problema.<br />
Problemi nastaju kada istovremeno trebamo<br />
prikupiti podatke iz više tablica. Neiskusni<br />
korisnici tada se često nađu u problemima.<br />
Sve izgleda u najboljem redu, ali pred njima<br />
se nalazi potpuno pogrešan skup podataka.<br />
Relacijske baze podataka<br />
Osnove relacijskih sustava baza podataka<br />
počivaju na mnogobrojnim tablicama i<br />
mogućnostima međusobnog povezivanja.<br />
Upravo nam veze među tablicama (relacije)<br />
omogućavaju da u izvještajima kombiniramo<br />
podatke iz različitih tablica. Rad s<br />
relacijama logičan je i intuitivan, ali ni u kom<br />
slučaju nemojte podcijeniti kompleksnost<br />
SQL upita, jer se čak i iskusni korisnici mogu<br />
susresti s neočekivanim rezultatima.<br />
Dinamičke relacije među tablicama unutar<br />
relacijske baze podataka definiraju se uporabom<br />
operatora join. Tehnički gledano,<br />
join je operacija koja prilikom preuzimanja<br />
podataka kreira relacije između tablica. To<br />
znači da joinom određujemo koji će slogovi<br />
biti vraćeni iz baze podataka prilikom upita<br />
select, odnosno definira skup podataka nad<br />
kojim ćemo vršiti neke izmjene kod upita<br />
update i delete.<br />
Drugim riječima rečeno, join je operacija<br />
koja je funkcijom slična klauzuli where i možemo<br />
je shvatiti kao neku vrstu filtra. Join se<br />
od where razlikuje u tome što u njemu definiramo<br />
uvjete koji moraju biti zadovoljeni u<br />
objema tablicama za koje join kreiramo, dok<br />
kod klauzule where to nije bitno.<br />
SQL-ovi standardi<br />
Proizvođači baza podataka ne drže se striktno<br />
SQL ANSI standarda, tako da se sintaksa<br />
join operacija razlikuje među bazama po-<br />
Primjer 5 (CROSS JOIN): Cijenama konfiguracija dodali smo vrijednosti određene<br />
komponente (proizvoda) kako bismo dobili konačnu cijenu<br />
“Osnove relacijskih sustava<br />
baza podataka počivaju na<br />
mnogobrojnim tablicama”<br />
dataka. U ovom tekstu nećemo raspravljati<br />
o razlikama u sintaksi baza podataka (MS<br />
SQL, Oracle, MySQL, PostgreSLQ itd.),<br />
već ćemo koristiti najjednostavniju sintaksu<br />
kako bismo što bolje objasnili funkcioniranje<br />
joina.<br />
Join možemo definirati u klauzuli from ili<br />
where, pri čemu ne smijemo zaboraviti da<br />
baze podataka različito tretiraju joinove koji<br />
su specificirani u klauzuli from od onih koji<br />
se nalaze u where. U principu, baze podataka<br />
prvo obrađuju klauzulu from, pa je preporučljivo<br />
da join smjestimo u from dio upita<br />
jer ćemo tako smanjiti količinu podataka<br />
koja će se obrađivati u ostatku SQL upita.<br />
Ukoliko join smjestimo u klauzulu where,<br />
svi slogovi koji su skupljeni u klauzuli from<br />
obrađuju se u ostatku upita, pa se na taj način<br />
obrađuje puno veća količina podataka, a<br />
SQL upit će se sporije izvršavati.<br />
Join u klauzuli from ima sljedeću sintaksu:<br />
SELECT lista_kolona | *<br />
FROM tablica1 JOIN tablica2 [ON lista_uvjeta]<br />
Ukratko: lista_kolona je popis kolona čije<br />
podatke želimo ispisati kao rezultat upita.<br />
Tablica1 i tablica2 predstavljaju tablice koje<br />
stavljamo u relaciju, a join je tip joina koji<br />
primjenjujemo pri kreiranju relacije među<br />
tablicama. Lista_uvjeta su uvjeti, po sintaksi<br />
slični onima koje stavljamo u klauzulu<br />
where, kojima definiramo koji će se skup<br />
podataka nalaziti u relaciji. Na primjer: ON<br />
tablica1.poljeX = tablica2.poljeY. Potrebno je<br />
napomenuti da se poljeX može odnositi na<br />
bilo koje polje iz tablice1, a poljeY može biti<br />
bilo koje polje iz tablice2 - jedino je bitno da<br />
poljeX i poljeY imaju iste tipove podataka.<br />
Postoji više tipova join operacija: inner, left<br />
outer, right outer, full outer i cross. Pojedine<br />
baze podataka ne podržavaju sve vrste join<br />
operacija, pa je potrebno provjeriti doku-