01.01.2013 Views

download manager - PC Chip

download manager - PC Chip

download manager - PC Chip

SHOW MORE
SHOW LESS

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-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!