МОDЕLI
I BАZЕ PОDАТАK А Uvod u web okruženje SQL
Korišteni materijali i reference http://www.hdonweb.com/programiranje/xampp-instalacija-apache-web-servera-za-mysql-i-php http://hr.wikipedia.org/wiki/Apache_%28webserver%29 http://www.portalalfa.com/1/Html/uvod.htm http://php.com.hr/66 http://phptutorial.odlican.net/nestoophpu.php http://www.w3schools.com/sql/sql_intro.asp http://www.elitesecurity.org http://www.darkopetrovic.com/eucenje_tut_phpmyadmin.php http://sistemac.srce.unizg.hr/index.php?id=35&no_cache=1&tx_ttnews[tt_news]=527 http://www.etfos.unios.hr/upload/OBAVIJESTI/obavijesti_strucni/306Predavanja2.pdf http://www2.fsr.ba/internet/pri/pripreme07-PHP.pdf http://alas.matf.bg.ac.rs/~mi06085/zadatak1.html http://poincare.matf.bg.ac.rs/~nenad/rbp/4.Uvod_u_relacione_baze.pdf http://poincare.matf.bg.ac.rs/~nenad/rbp/3.Relaciona_algebra_i_racun.pdf http://poincare.matf.bg.ac.rs/~gordana/FINALE.pdf http://www.gimeko.edu.rs/wp-content/uploads/2011/12/SqlPriru%C4%8Dnik.pdf MySQL 5.6 Reference Manual
http://www.gimeko.edu.rs/wp-content/uploads/20 http://www.gimeko.edu.rs /wp-content/uploads/2011/12/SqlPriru%C4%8Dnik 11/12/SqlPriru%C4%8Dnik.pdf .pdf
1
Uvod: Potrebni programi i programsko okruženje Prije početka izrade dinami čkih web sajtova, odnosno projektovanja baza u web okruženju potrebno je obezbjediti programsko okruženje. Mi ćemo pokušati da se upoznamo sa radom sa MySQL sistemom. Kao preduslov za rad sa MySQL-om potrebno je da se upoznamo sa PHP-om. Za rad u PHP-u poželljno je bar elementarno poznavanje HTML-a, a mi ćemo koristiti MS WebExpresion sa kreiranje okruženje u kome ćemo ugraditi PHP. Da bismo mogli da izradjujemo dinami čke web sajtove neophodno je da imamo instaliran php, podignut web server i istaliranu neku od baza podataka (u našem slu čaju koristićemo mySQL). Postoje gotovi web server paketi koji nam omogu ćavaju da na veoma jednostavan na čin instaliramo sve što nam je potrebno za nesmetan razvoj php aplikacija na lokalnom ra čunaru. Mi ćemo koristiti u XAMPP integrisanoj formi.
Osnovne osobine Web servera Web server je ra čunarski program odgovoran za prihvatanje HTTP (Hypertext Transfer Protocol) zahtjeva od web klijenata, znanih kao web browser-i, i opsluživanje HTTP odgovora sa opcionalnim sadržajem kao što su HTML dokumenti, vezani objekti, slike, itd... Web serverom se naziva i ra čunar na kojem se vrti program opisan gore, ali ćemo u daljnjim razmatranjima pod web serverom podrazumijevati ra čunarski program ili skup programa i usluga.
odnos web servers i database servera
Web serveri razlikuju u detaljima, od programa do programa, ali najvažnija karakteristika je da koriste HTTP protokol. HTTP: svaki web server program prihvata HTTP zahtjeve od klijenta i daje HTTP odgovore. HTTP odgovori se sastoje obi čno od HTML dokumenata, ali to može biti i bilo koji dokument, slika, itd... Ako se desi greška prilikom opsluživanja zahtjeva web server mora poslati broj i opis greške krajnjem korisniku; U praksi web serveri implementiraju i sljede će funkcije: -· Autorizacija: zahtjev za korisni čkim imenom i lozinkom prije nego se dozvoli pristup dijelu ili cijelom resursu; -Rukovanje sa stati čkim ili dinami čkim sadržajima podržavaju ći jedno ili više interfejsa: SSI, CGI, SCGI, FastCGI, JSP, PHP, ASP, ASP.NET, ServerAPI kao što je NSAPI ili ISAPI, itd... -HTTPS podrška (SSL ili TLS) za sigurnu šifriranu konekciju na port 443 umjesto uobi čajenog porta 80; -koriste tzv. princip logiranja (Logging): obi čno web serveri imaju mogu ćnost prikupljanja detaljnih informacija o zahtjevima klijenata i odgovorima servera u tzv. log dokumente koji koriste web urednicima za statističke analize 2
· Komprimiranje sadržaja (npr. gzip kodiranje) da se smanji veli čina odgovora; · Virtualni hosting za opsluživanje mnogo web stranica korištenjem jedne IP adrese;
Apache (webserver) Apache je naziv platforme web servera ( ali isto tako i programske grupe: team-a open source koji razvija software servera, tipa multi-platform) koji radi na razli čitim operativnim sistemima UNIX-Linux, Windows. Kratka istorija razvoja razvoja Apache Apache servera Projekt Apache nastaje 1995. godine, a distribucija (termin distribucija koristi se u zna čenju verzija)ca 1.0 izlazi 1995. U razdoblju samo jedne godine njegova popularnost popularnost nadilazi onu NCSA (National Center Center for Supercomputing Application) odnosno servera iz kojeg proizlazi i sam Apache. 2.0 Apache izlazi za vrijeme konferencije ApacheCon, održane 2000. u Orlandu, Florida. Velika popularnost ovog softwarea je dokaz njegove kvalitete iako spada u open-source, prema istraživanjima Netcrafta 2005., od 75 miliona web stranica, oko 52 miliona koriste Apache web-server Oktobra 2006. godine brojke rastu na 60 milona odnosno (60,32%) ukupno postoje ćih web stranica.
XAMPP Postoje "paketi" softwarea kao sto je Xampp koji se osnivaju na Apache serveru koji objedinjuju aplikacije potrebne za razvoj dinamičnih web stranica razvijenih u PHP programskom jeziku. XAMPP je programski paket koji služi za imitiranje WEBHOST-servera ali na na lokalnom računaru (za podršku PHP programskom jeziku ). Da biste instalirali XAMPP neophodno je da na mreži prona đete instalacioni fajl (potrežite na adresi: http://www.apachefriends.org/en/xampp-windows.html)) http://www.apachefriends.org/en/xampp-windows.html Mi ćemo instalirati XAMPP na WINDOWS operativnom sistemu. Postoji instalacija i za LINUX.
Nakon downloada pokrenite program. program. Nakon prokretanja programa pojavljuje se prozor prozor za izbor jezika. Za početak izaberite standardnu procedury (Yes/Next)
3
Sljedeći korak je izbor lokacije na kojoj želite da instalirate XAMPP. Izaberite C:\ root direktorijum i kliknite NEXT. Nakon izbora lokacije ostaje da obavimo još neka podešavanja. Tu nam se nudi opcija da XAMPP instaliramo kao servis.
Nakon završene instalacije XAMPP paketa program ce vam ponuditi opciju za otvaranje XAMPP control panela. Izaberite opciju YES.
Čestitamo,
uspešno ste instalirali XAMPP. Na sljedećoj slici vidimo da su Apache i MySql instalirani kao servis, što znači da se aktiviraju odmah nakon paljenja vaseg ra čunara.
4
Testiranje XAMPP instalacije Nakon što ste uspesno instalirali XAMPP možete po četi da razvijate php aplikacije na svom ra čunaru. Otvorite web browser (npr. mozzila firefox) i u navigation toolbar unesite adresu http://localhost. Nakon što ste ovo uradili potrebno je da dobijete sljede ći prozor odnosno da pristupite XAMPP web aplikaciji na svom ra čunaru.
Ukoliko ste dobili sličan rezultat znači da je instalacija uspješno obavljena.
5
Uvod u HTML Da bi nastavili sa radom trebamo znati osnovne HTML-a. Da bi mogli nastaviti sa radom da ćemo osakaćeni uvid u HTML okruženje. HTML je programski jezik koji se koristi za kreiranje dokumenata na World Wide Web-u. HTML se koristi za stvaranje hipertekstualnih datoteka (datoteka koje sadržavaju linkove). HTML (HyperText Markup Language) je veoma jednostavan jezik čije osnove svatko može savladati za par dana, a kasnije je sve stvar prakse. Kad savladamo osnove HTML-a možemo prije ći na proučavanje nekog naprednijeg koriš ćenja i dizajniranja u HTML-u. Kada "surfamo" Internetom i nai đemo na neku zanimljivu stranicu , a ne znamo kako je napravljena, njen izvorni HTML kod možemo pogledati ako u liniji menija odaberemo: View / Source (ili View / Page Source). Ovo je najbolji na čin da nau čimo neke nove stvari. Sve što nam je potrebno da bi napravili jednu Web stranice prakti čno već imamo na računaru. To je prije svega jedan najobi čniji tekst editor kao što je Notepad. Umjesto Notepada preporu čujem Notepad++. Slijedeća stvar koja nam je neophodna je Web Browser (preporuka IE ili Firefox) Osnovna deklaracija tipa dokumenta deklaracija na po četku html dokumenta omogu ćava web browseru da prikaže web stranicu ispravno, tj da dokument prepozna kao HTML. U današnjim html dokumentima naj češće se koristi deklaracija: odnosno za verziju XHTML 1.0 Transitional: Napomena: Deklaracija nije obavezna, ali se preporu čuje. HTML komande HTML komande se pišu u vidu tzv. tag - ova. Jedan tag je u komanda koja govori našem browseru što i kako napraviti tj. na koji na čin prikazati sadržaj naših stranice. HTML tagovi su "case insensitive" tj. svejedno je da li ih pišemo malim ili velikim slovima. Tagovi se pišu unutar oznaka "<" i ">" (bez znakova navoda) HTML elementi najčešće dolaze u paru, kao
i . Prvi element nazivamo po četni element, a drugi završni element. Završni element ima isti naziv kao i po četni uz razliku što se ispred elementa ume će kosa crta (slash) Tag: . Ovaj tag se nalazi na po četku svakog HTML dokumenta i on govori našem browseru da je datoteka koju je upravo počeo učitavati baš HTML dokument i da kao takvog treba i prikazati. Na kraj HTML dokumenta se stavlja završni HTML tag:. Ovaj tag govori browseru da je to kraj našeg HTML dokumenta. Ve ćina tagova ima i po četni i završni tag. Završni tag se dobiva dodavanjem znaka "/" i ozna čava mjesto na kojem prestaje djelovanje početnog taga. Postoje i tagovi kod kojih ne moramo stavljati završni tag kao sto je recimo tag
koji služi za prelazak u novi red (o ovom tagu ćemo govoriti kasnije u dijelu o formatiranju teksta). 6
Struktura HTML dokumenta Svaki HTML dokument se sastoji od dva dijela: zaglavlja (head) i tijela (body). Zaglavlje se odvaja tagovima i , a tijelo dokumenta tagovima: i . Sve ono što napišemo u zaglavlju dokumenta ne će se prikazati u prozoru browsera ve ć obično služi samo da pruži neke informacije o našoj stranici. Tako ćemo u okviru našeg zaglavlja svakako staviti tagove:
i izme đu kojih ćemo staviti naslov naše stranice. To nije naslov koji će se pojaviti u tijelu naše stranice ve ć onaj naslov koji se pojavljuje u naslovnoj liniji browsera. Pogledajmo naslovnu liniju našeg browsera - ispred imena browsera vidjećemo da piše: "Uvod u HTML". To je zato što smo u zaglavlju ovog dokumenta napisli:
Uvod u HTML S druge strane sve ono što napišemo izme đu tagova i predstavljat će tijelo našeg dokumenta i pojavit će se kao sadržaj naše web stranice u prozoru browsera (kao što je tekst koji upravo čitamo). Dakle, svaki HTML dokument mora imati slijedeću strukturu:
Ovdje stavimo naziv Web stranice Ovdje unesimo sve ono što želimo da se vidi u stranici kod HTML dokumenta
Vizuelna predstava strukture HTML dokumenta
Kreiranje HTML koda korišćenjem Notepada Sad je vrijeme da napravimo prvu web stranicu. Otvorimo novi dokument u Notepad-u i upišimo gornju strukturu HTML dokumenta u kojem ćemo staviti naslov po želji (npr. naše osobno ime), a izme đu body tagova stavimo neki tekst (npr. "Moj prva Web stranica"):
Milan Moj prva Web stranica Sad snimimo ovaj dokument. U File - Save as dijalog prozoru prvo odaberemo folder u kojem ćemo usnimiti naš Web stranicu. U polje File name upišimo ime naše prve stranice, a kao ekstenziju otkucajmo .htm ili .html (npr. "prva.htm"). U padajućoj listi Save as type odaberimo All Files. Stisnite OK i naša prva html stranica je spremna da je otvori u naš web browser. Ako smo sve ispravno napravili u naslovnici našeg web browsera bi trebalo stajati: Milan, a u prozoru browsera bi trebali vidjeti tekst: Moja prva Web stranica.
Mi ćemo u daljem radu uglavnom koristiti WebExpresion za kreiranje HTML dijelova koda. Detalji i pravila potrebna za HTML kodovanje nisu predmet našeg interesovanja, ali su nešto što se podrazumjeva. Preporuka je da instališete i naviknete se na okruženje WebExp. , što će vam bitno olakšati rad, ali moguće 7
je da koristite i neki dru gi program Adobe Drea mweaver), a čak i sam Notepad. Kreiranje HTML kod u MS We Expresion
Gore je obj ašnjeno kak se u Notep du kreira H TML strani a. Sad ćemo t objasniti k o to uraditi u MS Web xpresion.
Pokrenemo Web Exp
Izb r modo a
Iz enija File i aberemo H ML ka prvi mod i aberemo De sign i dobij mo praznu tranicu U nju upiše mo tekst
8
Promjenimo mod i izaberemo Code da vidimo šta smo uradili (šta je za nas uradio Web Exp
Zapamtimo stranicu i prokrenemo je (pogledamo) u našem browseru.
Klijentski i serverski skript jezici Jedan od pravaca razvoja bazira se na razvoju specijalizovanih programskih jezika klijentskih skript jezika, koji omogućavaju da se izvorni programski kod umetne u HTML Veb stranice, i zatim interpretira i izvršava u okviru Veb pregleda ča. Jezici ovog tipa su JavaScript (kasnije standardizovan kao ECMAScript), JScript, Visual Basic Script, . . . Klijentski skriptovi mogu da reaguju na akcije korisnika (pokrete miša, unos sa tastature...) i da na osnovu toga menjaju i prilagodavaju sadržaj Veb stranice u koju su umetnuti. Kako bi ovo moglo da se realizuje, neophodno je da postoji na čin da se iz skript jezika pristupi elementima stranice i u ovom cilju razvijen je objektni model dokumenta (DOM). DOM omogućava da skriptovi vide Kombinovanje HTML-a, CSS-a sa JavaScript-om koriš ćenjem DOM-a, ponekad se naziva dinami čkih HTML-om (Dynamic HTML - DHTML). Za razliku od klijentskih skriptova, koji su se u obliku izvršnog ili kompajliranog koda prenosili na klijentsku mašinu i na njoj izvršavali, serverski skriptovi predstavljaju programe koji se izvršavaju na serverskoj mašini i rezultat njihovog rada (naj češće u obliku formirane Veb stranice) se šalje klijentu gde se prikazuje. Za razliku od slučaja klijentskih skriptova kada je klijent morao da bude osposobljen da izvršava preneti program (npr. da pregleda č poseduje mogu ćnost izvršavanja JavaScript koda, da je na klijentu instaliran JRE i slično), da bi klijent mogao da koristi serverske skriptove, potrebno je na češće samo da ima elementarne mogućnosti komuniciranja HTTP protokolom i prikazivanja HTML stranica. 9
Medutim, o vaj put, serv erska mašina mora da b de u mogu nosti da izvršava skript ve. U dana nje vrijeme, najčešće ko rišćeni jezici za pisanje skriptova n strani serv ra su PHP, ASP.NET, JSP i Pytho . Nekada j apsolutnu dominaciju n ovom polj imao progr amski jezik Perl. Dva su do inantna nač na za izvršavanje skript va od stran Veb server a: CGI i mod li Veb servera odnosno ommon Ga teway Inter ace (CGI) i pache mo uli.
Princip ada PHP Korisnički rowseri ne azumiju P P (niti ASP, niti CGI,...). Kako to sv skupa onda funkciniše? Kada koris ik u svom retraživaču pozove nek u HTML st anicu tada eb server a kojemu se ta stranica nalazi pošalje korisniku tu stranicu i ona se u čit a u browser (i to prvo HTML kod p tek onda ostali sadržaji kao što su s like, zvukovi itd.) Šta se zapr avo događa kada neki orisnik u s om interne browseru ozove neku PHP (ili ASP ili CGI) skriptu? Tada web server na kojemu se nalazi t a skripta počne izvršavati tu skriptu , a skripta k reira HTM sadržaj koji se šalje kor sniku (i koj njegov bro ser razumije). Sama PHP skripta mo e imati na azličite nač ine ispreple ene PHP i TML dijel ove. Moguće je imati u osnovi HT L osnovu koju je ub čen PHP di . Moguće j isto tako d je čitava s ripta u php u a u njemu definiramo HTML dijelove. U svakom slučaj skripta m ra imati nastavak PHP , a broj iz jena PHP i HTML dijelova treba s esti na razu nu mjeru. Jedan od os novnih prin ipa kojim s možemo ol akšati rad u PHP-u i koji se proporu čuje je da iz led stranice (HTML di ) odredimo u nekom YSIWYG ditoru (Macromedia reamweave , Microsof FrontPageWebExpress) pa onda taj kod p ekopiramo u PHP. N ki "pametniji" HTML editori omogućavaju i olakšavaju direktan rad u PHP-u.
Moja prva php stranica
Kada instaliramo sve št nam je pot ebno kreće o s izrado stranica. U Microso t Expression Web iz me ija File bira mo New i o aberemo P P. Za ime dok menta pred lažem primjer1.php. Dokument emo odma snimiti i to u novu map proba1 u mapi servera a objavljiva je dokume ata (to je mapa appserv/ww w, ili mapa ampp/htdocs, zavisno koj instalaciju ste odabrali). Ovo treba zapamtiti: m pa www ili htdocs je mjesto u ko je stavljamo svoje stranice i to je ro t našeg web ervera. Zbo g bolje orga izacije, kad god radite eki novi pr jekt napravite za njega novu mapu unutar te m pe. U Microso t Expressio Webu se p ebacite u C de View Primjetite a je osnovn a struktura TML doku enta već t : postoje ta ovi za zagl avlje i tijelo dokumenta, naslov stra ice itd.
10
mjesto (unutar body strukture) gd je se ubacuje PHP kod Je ičak za izbor Code View-a
Najčešći način rada s P P-om je ta av da u pos ojeću HTM strukturu bacimo PH dijelove. Svaki PHP dio započinje sa oznako . Primjera ra i, unutar body tagova ubacite slije deću strukturu: Snimite stranicu. Pok renite web rowser. U adresnu tra u napišite: http://local ost/proba1/ rimjer1.php i vaša prva stranica je pred vama! Šta se zapravo dogodi o? Kad god u rowseru zatražite strani u čija adre a počinje sa http://local ost (primjet ite: nema w w!) to zapravo zn či da pokre ete stranicu lokalno sa s ervera na vašem računal . Ta adresa odgovara mapi www unutar mape AppServ ( li mapi htdocs unutar m pe xampp). Ostatak adr se je putanj a do stranic koju smo napravili (/ roba1/primjer1.php). Šta se dogo dilo na serv ru? Kad smo mi u browser zatražili prikaz te strani ce, server je prepoznao a je riječ o hp stranici, djelove koji su čisti HTML i nalaz se izvan < php i ?> ta gova poslao je odmah rowseru, a ono unutar ih tagova j izvršio, nar edba echo z ači ispiši, o nosno doda j HTML do umentu. Ako u svo web bro seru pogledate HTM kod (des i klik > Vi w Source) vidjet ćete da nema n traga PHP u, tu je sa o čisti HT L. Gornji pri jer nije jedini način kako se može koristiti P P. Unutar avodnika n redbe echo mi možem navesti i ra ličite HTM tagove i njihove dodat e argument kako bism imali kont olu nad izgledom teksta. Za ilustraci u malo ćemo obogatiti aš prvi prim jer i unutar tagova dodat i slijedeću naredbu: echo"
Ovo je link na tranice škole:
link ";
Ovaj put s o unutar na redbe echo bacili i lin . Primjetite znakove \ i pred navod ika. Oni na trebaju je kažu nared i echo da t nije kraj o oga šta on treba ispis ti već da o a treba ispi sati navodnike (sjetite s kako se zad aje link HT L-om). Ako bismo bili ekstrem ni u takvoj potrebi PH -a, tad bis o cijelu str nicu mogli staviti unutar
rada PHP:
11
SQL SQL (Structured Query Language ) je relacioni upitni jezik (ANSI i ISO standard). Relacije se kreiraju jednom naredbom i odmah su dostupne, što ga čini jednostavnim za koriš ćenje. Uniforman je jer se svi podaci i rezultati operacija prikazuju u vidu tabele i omogu ćava interaktivno i klasično programiranje. Sve do verzije SQL:1999 ovaj jezik je bio neproceduralan 1, odnosno njime se specificiralo ŠTA, a ne i KAKO nešto treba uraditi. Novije verzije SQL-a imaju mogu ćnosti proceduralnog jezika, naro čoto PL/SQL. Kombinovanjem naredbi jezika tre će generacije i SQL-a omogu ćava, sa jedne strane koriš ćenje proceduralnih karakteristika jezika tre će generacije (sekvenca, selekcija, iteracija, procedura, podprograma), a sa druge strane pristup podacima u bazi podataka pomo ću SQL-a Do sada su baze podataka bile koriš ćene iz programskih jezika “miksanjem” naredbi programskog jezika i upitnog jezika. I mi ćemo koristiti ovaj pristup koristeći MySQL i PHP.
Istorijat Tvorac SQL-a je Chamberlin, a nastao je u IBM-u 1974. godine, na istom mestu gdje je E. F. Kod 1970 definisao osnovne koncepte relacionog modela podataka. Jezik se u početku zvao SEQUEL (Structured English Query Language ) i predstavljao je programski interfejs (API) za System R, prototipski sistem za upravljanje bazom podataka (SUBP) koji se razvijao kao dio istraživačkog projekta pod istim nazivom. Pojava komercijalnih relacionih sistema uvećala je značaj i ubrzala proces standardizacije relacionog upitnog jezika. Prva etapa tog procesa završila se 1986. godine usvajanjem SQL-a kao standardnog relacionog upitnog jezika. Ta prva verzija SQL standarda je poznata pod nazivom SQL-86. Njom su standardizovane osnovne karakteristike SQL-a kao deklarativnog relacionog upitnog jezika. MeÄ‘utim, mnoge bitne karakteristike jezika ostale su nestandardizovane. To je dovelo do revizija standarda, koji je usvojen 1989. godine i kojom su standardizovane karakteristike koje se odnose na očuvanje integriteta baze podataka i povezivanje sa klasičnim programskim jezicima. Ta verzija SQL standarda poznata je pod nazivom SQL-89. 1992. godine usvojena je sljedeća bitna revizija standarda, poznata pod nazivom SQL-92 ili SQL-2, kojom je SQL zaokružen kao programski jezik, a obim standarda uvećan šest puta u odnosu na polaznu verziju. Naredna verzija SQL standarda usvojena je 1999. godine. Iako su početne verzije SQL-a bile prilično jednostavne, bliske korisniku i u velikoj mjeri deklarativne za SQL:1999 se može reći da je kompleksan, proceduralno/deklarativan jezik i da je označio prekretnicu i omogućio masovnu upotrebu SQL-a Postoje različite verzije SQL jezika Iako je SQL je ANSI (American National Standards Institute) standard.. SQL:2003 Standard SQL:2003 se popularno naziva standardom ispravljanja grešaka standarda SQL:1999 (“bugfix release” - revizija standarda SQL:1999), osim u domenu podrške XML-u. Uprkos tome, ovaj standard ima i niz novih rješenja, a glavna su: Novi tipovi podataka Uklonjeni su BIT i BIT VARYING tipovi zbog nedostatka podrške u implementacijama, a dodata su tri nova tipa: BIGINT, MULTISET, XML. Proširenja SQL-rutina Definisane su funkcije koje proizvode tabele, a mogu da budu zadate nekim ne-SQL jezikom ili SQL izrazom. Na primer, funkcija weather , napisana u C-u ili, funkcija DEPTEMPS realizovana u SQL-u; Novi MERGE iskaz je, pored INSERT, UPDATE, DELETE iskaza, još jedan iskaz ažuriranja u SQL-u. OLAP - Online analytic processing (OLAP) se koristi u poslovanju za analizu velikih kolicina podataka da bi se otkrile cinjenice i trendovi koji mogu da uticu na poslovne odluke. Operator CUBE omogucuje agregiranje podataka po više dimenzija (npr.datum, mesto, kategorija) u jednom upitu. Operator WINDOW omogucuje primenu agregatnih funkcija na "pokretni prozor" kroz kolekciju podataka. Multimedija SQL Standard je proširen posebnim ali blisko povezanim standardom ‘‘SQLMultimedia and Application Packages’’ koji se često naziva SQL/MM. •
•
•
• •
SQL:2006 SQL:2006 je samo dopuna standarda SQL:2003 koja se odnosi na podršku XML-u u bazama podataka. Preciznije, ISO/IEC 907514:2006 definiše kako se SQL koristi zajedno sa XML-om. Definiše načine za importovanje i skladištenje XML podataka u SQL bazi podataka, kako se manipuliše njima u bazi podataka i kako se objavljuju (publikuju) XML podaci i konvencionalni SQL podaci u XML obliku. SQL:2006 obezbjeđuje mogućnost integracije (u aplikaciji) SQL koda i XQuery, XML upitnog jezika (W3C), kao i
konkurentni pristup "obi čnim" SQL podacima i XML dokumentima. Trenutno preivlađujuća i važeća je verzija propisana standardima ISO / IEC 9075-1: 2008, koji propisuje minimalne zahtjeve sa dodacima ISO / IEC 9075-2: 2008; ISO / IEC 9075-11: 2008koji propisuju dodatke (ekstenzije). 1
proceduralni program predstavlja niz naredbi programskoga jezika čiji unaprijed utvr đeni slijed opisuje uzastopne korake transformacije ulaznih podataka u tražene rezultate; i odgovara mogi ćnosti formalzaciije i zapis algoritma 12
U SQL su u ljučeni konce ti objektne t hnologije, me anizam triger , rekurzija i funkcionalnost jezika, u S L je uveden proceduralna nadgradnja SQL-a, koju u upravljačkim strukturama klasičnih progra sih jezika. SQ -1999 standar d definiše više Dva osnovna načina su dir ktno (intera tivno) korišće nje SQL-a i ovezivanje S (ugrađeni SQL).
roceduralna p roširenja. Da bi se povećala lavnom čine upravljačke struktrure sličn ačina korišće ja SQL-a. L-a sa klasič nim programskim jezicima
Bez obzira ko ju verziju i dis ribuciju SQL- koristil,i svi QL jezici su glavnom u skl du s ANSI sta ndardom, svi imaju sličan se glavnih koma di (kao što su SELECT, UP ATE, DELET , INSERT, W ERE) i ponaš ju se na sličan način.
Relacion algebra relacioni račun Relaciona lgebra Relaciona lgebra je f amilija alge bri sa dobr o zasnovan m semanti om koja s koristi za modeliranj relacija (o bjekata) s ještenih relaciono bazi podataka i a definisa je upita nad njima. Relacioni peratori: Codd je origi alno predlo žio 8 operat ra: Restrik iju (selekcij u), Projekciju, Proizvod, Uniju, Prje ek, Razliku, (Prirodno) pajanje, Dij eljenje; Kasnije su dodati ope atori: Rena e, Semijoi , Extend, S mmarize. Dodatni o eratori: RE NAME - pr mjena nazi a relacije, SEMIJOIN - Spajanje rel acija A i B rojektovan na atribute relacije A, XTEND - proširuje rela ciju novim tributom, S MMARIZ - omogućava sabiranj po kolona a. Minimalni skup operatora sadrži: restrikciju, projekciju, proizvod, niju, razlik u. Re lacioni oper tori
13
Unij
Dijeljenje
Osobina da su i argu enti i rezultat primjen e bilo kog relacionog operatora ta kođe relacije se naziva relaciono zatvorenje. Ako su u li ti navedeni svi atributi r elacije A tad a je projekcija identitet. Svrha relacione algebre: pisanje relacionih zraza koji se koriste z definisanj prostora z dohvatanje podataka, efinisnje pr ostora za a uriranje po ataka, defi isanje prav la integritet a, definisan e izvedenih relacija, de inisanje pra ila zaštite; snova za o timizaciju upita. Relacioni račun Relacioni r ačun je opisan, neproceduralan jezi , logički e vivalent relacione alge re ako se posmatra dio relacionog odela podataka za obradu podataka i zasnovan e na predikatskom raču u. Postoje dvije varijante: rač n orijentisa ka torkam i rač n orijentisa ka domenima - osnova za QBE. • •
Predikatski račun: Pre ikat je istinitosno vrjed osna funkc ja sa argum ntima, i ka a se argum nti zamjene vrijednosti a funkcija aje izraz ko i se naziva redlog koji može da bu e tačan ili n etačan.
Opseg pro jenljivih: romjenljiva torki ima o pseg iz skupa navedenih relacija i d puštene vrijednosti koje pripadaju t rkama iz ti relacija, p omjenljiva domena im opseg iz s upa navede nih domena i dopušten vrijednosti oje pripada u tim dome ima. Neka je x predikat. Tada se skup svih x taka da je P ta čno za x o načava sa {x | p(x)} i postoje dva kvantifikat ra: : 'z svaki', : 'p stoji'. Relacioni ačun torki: slobodne i vezane pro jenljive. K orišćenjem romjenljivi h torki traž se torke za koje je pre ikat tačan. ostoje dva k vantifikator : FORALL V (p), EXIS S V (p). Kvantifika ija i rad sa slobodnim i ezanim pro menljivim s u skladu s pravilima p redikatskog računa.! Relacioni ačun domena: opseg važenja prom enljivih su domeni a n relacije, m oguće je de inisati uslov pripadnosti. Sintaksa ovog računa s u literaturi rikazuje na različite na ine RANGE O
IS RETRIEV . [WHERE< slovni izraz>] 14
ili RANGEV R RAN ES OVER . [WHERE< slovni izraz>] Uslov je ta an ako post ji torka u relaciji R takv a da je za sv aki konkretan par pore đ enje A=x tačno Na primjer, ISPIT {INDE S INDEKS(20110456), ID_PREDMETA ID_PRED ETA(1001)} ima vrijednos tačno akko postoji torka u is itu koja ima vr ijednost 20110456 za atribut indeks i 1001 z a atribut id_predmeta
Algebra i r čun su sem ntički ekvivalentni. Nek i upitni jezi i su više zasnovani na al gebri, a nek i na računu SQL ima osobine i alg bre i raču a. Jezik je rel ciono komp letan ako je moćan isto ao i algebr , tj. ako bil koja relacij a predstavljiva u algebri može da se predstavi i jeziku. SQL je rel ciono kom letan jer p stoje SQL i zrazi za sv ki od 5 pri itivnih op ratora relacione algebre (restrikciju, projekciju, roizvod, u iju, razliku).
3VL logi a (trova entna lo ika) Zašto ned stajuće vr jednosti? U svakodn vnoj praksi se često j vlja proble m nedostat a podataka: ’...datum ro đenja nepoz at...’ ; ’...i izborne jed inice XX nedostaju pod ci...’ Očigledna je potreba a se indik tor o nedo statku vrij dnosti čuv u bazi, i a se na o govara- uć način vrši brada tak ih podatak . Tako se d olazi do viš valentnih l gika u relac ionom modelu. Codd je pr edložio kori ćenje 4-val entne logik jer postoje dvije vrste nedostajući h vrijednost i: vrijednos nepoznata, vrijednost n e primjenlj va, vrijedno st ne postoji.
Očigledno često postoji PROBLEMI SA NU LL-ama, i to problemi sa proširen jem operac ja relacione algebre na ULL-e: De inisanje operacije selek ije: ako ispi ujemo neku osobinu za isa, kao Bo ovi > 40, i a neki zapis Bo ovi su NU L, što da ra imo? •
15
•
• •
De inisanje presjeke i razli e dviju rela cija: jesu li dva zapisa Jovan,NUL > i isti ili e? Do atni proble i za SQL: a li tretirati NULL-e ka duplikate? Da li da ih uključimo u račun (suma, s ednja vrijednost, ...) i a o da, kako? Kako da s aritmetičke op racije ponašaju kada je rgument N LL?
Najčešći pr istup prihvaćen i u pra si je korišć enje 'nedos ajuće vrijednosti ' (NU LL. Za pro jenu uslova umjesto u bičajene inarne-Bul ve (dvo-vri ednosne) l gike upotr jebiti trova lentnu (tro- rijednosnu) logiku odn sno 3VL lo iku. Kada nema NULL-a, u lovi se proc enjuju kao i stina (true) li neistina ( alse), ali ak NULL-e p stoje, uslov će se procj njivati i kao treća vrijed ost -‘nedefi nisano’, ili ‘ nepoznato’) Ovo je ideja za provjeru uslova u WHERE kl auzuli SQL SELECT-a: Biće vrać ni jedino z pisi gdje j rezultat provjere uslova istina. SQL pri pr imjeni WH RE klauzule na tabelu eliminiše s e redove za koje se izr az u WHE E ima izraz netačno ili edefinisano. Test za null: IS [NOT] NULL. 3VL logika: tri vrijedn sti: tač o, net čno i nepoznato. Operatori: I ( ND), ILI (OR), i NE (NOT). • • •
• • •
Ponekad (rj eđe) se kori ti i notacija: false=0, t ue=1, un nown=1/2, NOT(x)=1-x, AND(x,y) = min(x,y), OR(x,y) =max(x,y)
Baze i relacione baze ‐osn vni termini i poj ovi Ako ste pr čitali (i djelimično shvatili) predho dno poglav je daćemo još neke poj move za ra sa bazama podataka. Bazu podat aka je zbirk a informac ja koje se rganizovane u tabele i u druge vr ste objekat zbog tačno određene n mjere kao š o je pretraž vanje,sortir nje i obrada podataka. Fizička rep ezentacija baze podatak a se sastoji o d dviju ili v še datoteka a disku. U logičko smislu baz podataka s stoji se od v ećeg broja bjekata-tab la, indeksa,i td. Baza poda aka je skup povezanih podataka k oji se nala e u nekom informacio om sistem ,tj. u nekoj organizaciji , i ona sad ži podatke oji se sastoj e iz različit h objekata ekog poslo nog sistem (npr. razne usluge, pos lovni partneri i sl.). Po aci u bazi odataka sl že za jednu ili više apl ikacija, i nezavisni su o programim u kojima s obrađuju, a pristup nji a je kontrolisan. Relacione b aze podatak a su danas najčešće kori tene baze p dataka. Relaciona aza podata a se sastoji od skupa r zličitih relacija (tabela). Tabela od ovara poj u relacije iz standardno (opšteg) re lacionog modela baza po dataka. Entitet ( E tity) Svaku realnu činjenicu ili p javu, bez bzira na s štinu naziv amo entitet m. Entitet razlikujemo na osnovu osobina: Atri uta. Šta je rela ija? Entitet mo emo defini ati kao objekat o kome želimo da s kupljamo informacije, t ada je relac ja opis veze između dva ili više enti eta. Jedan red t bele predstavlja jednu n-torku ili jed nu pojavu r lacije, što o govara jedn oj pojavi tipa entiteta. Kolona u t j tabeli ili p lje (field) odgovara jed om atributu (osobini) ti a entiteta. 16
Definicija t abele se u k ajnjoj liniji i svodi na to da se defin še lista field-ova jedne t abele i da se svako polje (field) okar akteriše nizom osobina. eke od tih sobina je n ophodno o rediti, neke se mogu i „ reskočiti". Kada se de inišu sve ta ele na osno u relacione šeme, potre bno je još u postaviti i v eze (relatio ships) međ tabelama k oje su u ve i. Peciznij , naznačava se preko ojih polja u tabele u vezi, da se unutar baze podataka b ine i o integ itetu (tačnosti) baze pod ataka.
Baza poda aka ( Datab se DB) Gru a tabela po ataka koje adrže srodn podatke. DB se mož sastojati od samo jedne tabele (najčešće to nije slučaj). Tabela (Table) Grupa logova pod taka. Svi sl ogovi su isto organizov ne grupe podataka - olja. Slog (zapis ( Record ) Jedinstveni z pis (vrsta) tabeli koji e sastoji od iše polja sa podacim , u opštem slučaju, različitoga tipa. Polje ( Fiel ) Pojedinačni podatak - s avka u slog . Primjer: u telefonskom imeniku su četir polja: prezim e, ime, adresa i telefonski br oj.
R elacioni model R elacija Torka Atribut Domen atribu a Š ma relacije K ardinalnost P imarni klju
Baza po ataka Tabela Vrsta (re u tabeli) Kolona Tip poda ka kolone skup važećih rijednosti (ti ova) Opis tabe le broj torki atribut (il i kombinacij atributa) koj jedinstveno identifikuje t belu ekvivalencija: R lacioni mo el-Baza po ataka
Primjer koji ilustruje ek vivalencije iz gornje tab le
Relacija ip k nije isto š o i tabela ( a kakve smo mi navikli) er tabela može da sadr i duplirane edove dok relacija ne ože, redov u tabeli su ređ eni u re osljedu od rha ka dnu, dok za rela iju to ne va i, kolone u tabeli su ur eđ ene u red sljedu slijeva udesno, d k za relacij to ne važi .
17
Definiciju baze podataka nazivamo relacionom šemom baze podataka jer se sastoji od naziva relacija i popisa atributa koji ulaze u sastav relacija. Relacija se sastoji od redova i kolona (atributa). Atribut je svojstvo koje koje posjeduje neki entitet. Skup atributa č ijim se podacima može identfiikovati svaki red se naziva primarni ključ . Referencijali integritet je odnos izmeđ u primarnog ključ a (npr. kupca) i vanjskog ili stranog klju č a (npr. šifra dobavljač a) .
Praktični primjeri Zadatak1: Izbor relacija
Ako je neophodno projektovati bazu podataka koja se odnosi na preduze će, prepoznati entitete i njihova svojstva, koje ćete predstaviti relacijama u relacionom modelu, odnosno tabelama u bazi podataka.
Rješenje: Pretpostavimo da preduze će ima više radnika, i za svakog od njih treba čuvati informacije: ime, matični broj, stručna sprema, datum rođenja, pol, plata, adresa. Neka je preduze će organizovano u sektore (sektor ima naziv, broj). Podaci o radnicima preduze ća se mogu predstavljaju relacijom/tabelom RADNIK sa atributima LIME (lično ime), SSL (srednje slovo), PREZIME, MBR (mati čni broj), DATRODJ (datum rođenja), POL, PLATA i ADRESA. Niže je prikazana jedna instanca relacije RADNIK (tabela RADNIK) i jedna instanca relacije ODELJENJE (tabela SEKTOR). RADNIK LIME Ivana Milan Ana Pera
SSL S I P K
PREZIME Gocić Savić Rodić Kostić
MBR 123456 234567 666777 555333
DATRODJ 15-10-87 01-03-57 03-12-50 31-12-53
POL Ž M Ž M
PLATA ADRESA 17000 Niška 4 32000 Humska 2 27000 Savska 34 43000 Čairska 3
SEKTOR BRSEK 40 60 80
NAZIV SEKTORA SBROJ projektovanje proizvodnja razvoj
Zadatak 2: Domeni atributa Identifikovati domene atributa relacije RADNIK iz prethodnog primjera. Rješenje : Domeni nekih atributa relacije RADNIK su prikazani u sljede ćoj tabeli: Atribut LIME PREZIME MBR
Domen Imena Osoba Prezime Osoba Maticni Broj
DATRODJ
Datum Rodjenja
POL PLATA
Pol PlataRadnika
Značenje Skup mogućih imena osoba Skup mogućih prezimena osoba Skup mogućnih matičnih brojeva radnika Moguće vrijednosti za datume rođenja zaposlenih u preduzeću Pol radnika Moguće vrednosti plata radnika
ADRESA
AdresaRadnika
Moguće adrese radnika preduzeća
18
Definicija domena Niz karaktera, dužine do 15. Niz karaktera, dužine do 15. Cijeli brojevi, napr. opsega 111111-999999 Datum, opseg, od 01-JAN-44 nadalje Karakter (1), vrednost M i Ž Broj, opseg od minLD do 40000.00, gdje je minLD minimalni republički lični dohodak Niz karaktera (30)
SQL naredbe Iako se naziva upitnim jezikom. SQL ima naredbe za sveobuhvatan rad s relacionom bazom podataka. SQL je nazvan jezikom iako on nije potpun programski jezik. Npr. u njemu se uobi ča jeno ne nalazi If...Then...Else konstrukcija za ispitivanje uslova, a nema ni konstrukciju za logi č ku strukturu petlje Do...While ili For...Next. SQL je uglavnom zasnovan na relacionom ra čunu, s time da je matemati čka notacija zamijenjena naredbama (ključnim-rezervisanim rije čima) nalik na govorni engleski jezik.
Upit se postavlja fleksibilnom naredbom SELECT. Rezultat upita se shvata kao nova privremena relacija, izvedena iz stalnih. Najćešće se SQL razvrstava na tri kategorije naredbi:
1. Naredbe za definisanje podataka (Data Definition Statements) omogu ćavaju definisanje resursa i logičkog modela relacione baze podataka: CREATE TABLE – kreiranje fizičke tabele baze podataka, CREATE VIEW – kreiranje virtuelne imenovane tabele, “pogled”, CREATE INDEX – kreiranje indeksa nad jednom ili više kolona tabele ili pogleda, ALTER TABLE – izmjena definicije tabele, izmjena, dodavanje ili uklanjanje kolone (atributa), DROP TABLE – uklanjanje tabele iz baze podataka, DROP VIEW – uklanjanje pogleda iz baze podataka. 2. Naredbe za rukovanje podacima (Data Manipulation Statements) omogu ćavaju ažuriranje podataka u širem smislu (izmjenu, dodavanje i brisanje) i izvještavanje (pribavljanje novih informacija) iz baze podataka: SELECT – pristup podacima i prikaz sadržaja baze podataka, INSERT – unošenje podataka, dodavanje redova u tabelu, Sintaksa: INSERT INTO tabela (kolone)VALUES (podaci); Primjeri: INSERT INTO artikli (naziv, cijena)VALUES ('Špageti', 5); INSERT INTO godine (godina, opis)VALUES (YEAR(NOW()), 'godina izbora'); DELETE – brisanje podataka, izbacivanje redova iz tabele , Sintaksa: DELETE FROM tablica WHERE uslov; Oprez!!! Nemojte zaboraviti WHERE uvjet jer će inače svi podaci biti izbrisani! Primjer: DELETE FROM artikli WHERE id=20; UPDATE – ažuriranje, izmjena vrijednosti podataka u koloni. Sintaksa: UPDATE tabela SET kolona=podatak, ...WHERE uslov; Primjer: UPDATE artikli SET cijena=500 WHERE id=1;
podataka (Data Control Functions) 3. Naredbe za upravljanje bezbjednoš ću omogućavaju oporavak, konkurentnost, sigurnost i integritet relacione baze podataka: GRANT – dodjela prava korišćenja tabele drugim korisnicima od strane vlasnika tabele, (sva prava ALL, svim korisnicima PUBLIC) REVOKE – oduzimanje prava korišćenja tabele drugim korisnicima, BEGIN TRANSACTION – početak transakcije koji se može završiti jednom od dvije naredne naredbe: COMMIT WORK – prenos dejstva transakcije na bazu podataka, ROLLBACK WORK – poništavanje dejstva transakcije na bazu podataka. SQL po standardu 1999 razvrstava SQL naredbe u sljedećih 7 kategorija: 1. Naredbe za šemu baze podataka (SQL-schema statements) - za kreiranje, izmenu i izbacivanje šema i objekata šema (CREATE, ALTER, DROP ) 2. Naredbe za podatke (SQL-data statements) - za prikaz i ažuriranje podataka baze (SELECT, INSERT, UPDATE, DELETE) 19
3. Naredbe za transakcije (SQL-transaction statements) - za startovanje, završavanje i postavljanje parametara za transakcije (COMMIT,
ROLLBACK)
4. Naredbe za kontrolu (SQL-contol statements), koje se koriste za kontrolu izvršavanja sekvence SQL naredbi (CALL,
RETURN)
5. Naredbe za konekcije (SQL-connection statements) - za uspostavljanje i prekidanje SQL konekcije (CONNECT,
DISCONNECT)
6. Naredbe za sesije (SQL-session statements) - za postavljanje default vrijednosti i drugih parametara SQL sesije (SET) 7. Naredbe za dijagnostiku (SQL-diagnostic statements) - signalizuju izuzetke u SQL rutinama (GET DIAGNOSTIC)
Sintaksa SQL naredbi Upoznavanje sa sintaksom i sematikom 2 pojedinog programskog jezika zna či ustvari učenje pisanja programskog koda-programiranja. Ovdje ćemo dati samo uvodne napomene kako da pišete programske naredbe i promjenjive. SQL spada u takozvane no-case-sensitive programske pakete, što zna či da se naredbe, klju čne riječi, imena objekata i varijabli mogu pisati i malim i velikim slovima, a da sistem pri tome ne pravi razliku me đu njima. Međutim, i pored toga, zbog preglednosti napisanog programa, preporu čljivo je dosljedno koristiti mala i velika slova. SQL naredbe po pravilu se završavaju interpunkcijskim znakom (;) Između bilo koje rije či se može pre ći u novi red. SQL nije case sensitive, ali imena tabela jesu!
7
Ako neka tabela sadrži ime neke klju čne riječi, potrebno ju je ozna čiti sa specijalnim navodnikom: ` . (AltGr+7 na tastaturi) . Jednostavnosti radi, te navodnike, odnosno takav sadržaj treba izbjegavati. Jednostruki navodnici se koriste za oznaku stringova. Primjer: SELECT 'Hello\nworld! :)'; Pun naziv objekta specificira se u obliku: , , Osnovne (ne i jedine) naredbe SQL-a koje se koriste u manipulisanju podacima u relacionoj bazi podataka omogućavaju definisanje, koriš ćenje i zaštitu podataka. Formalno SQL jezik je podijeljen na nekoliko jezi čkih elemenata odnosno kategorija naredbi: 1. Upiti (Queries), koji vra ćaju podatke na osnovu odre đenih kriterijuma. Ovo je najvažniji element SQL. 2. Klauzule (Clauses), koje su sastavni dijelovi izjava i upita. (U nekim slu čajevima klauzule su opcione). 3. Izrazi (Expressions), koji mogu da proizvedu ili skalarnu vrijednost ili tabele koje se sastoje od kolona i redova sa podacima. 4. Predikata (Predicates), koji se koriste za ograni čavanje efekata izjava i upita, ili za promene toka programa. 5. Izjave (Statements), koje mogu da kontrolišu transakcije, protok programa, veza, ili dijagnostiku. Sve ove kategorije ćemo analizirati u poglavlju SQL upiti, jer koriš ćenje klauzula, izjava i predikata omogućava kreiranje i realizaciju upita.
2
semantika – skup pravila koja daju odgovor na pitanje što znači neka naredba sintaksa – pravila koja određuju pripada li skup simbola jeziku ili ne
20
Struktura SQL‐a Definisanje strukture S L znači de inisanje: Do ena Indeksa Ka aloga Še a Ta ela • • • • •
Definisanje strukture z ač i da sm ranije krei rali model aze podata a koji nam je to omog ćio. A ope model baze podataka n astao je na osnovu anal ize problem kojeg želi o rješiti up otrebom ba e podataka. što smo ob vili prije ne o smo prist pili izradi odela baze.
Znač i prije nego što p istupimo de inisanju str ukture baze neophodno e uraditi a nalizu i napraviti model baze, poto ćemo definisati elemen e SQL-a. A aliza i izra a modela s temelj SQ -a.
Domen Domeni se definišu k o skupovi z kojih atri uti relacij uzimaju s oje vrijedn osti. Dome prost, koris ički definisan imenova objekat. Uobičajeno je da se do eni podijel na: -Predefinisane domen , domeni k ji postoje u j ezicima baza podataka. -Semantič e domene, koje korisnik definiše nad predefi isanim ili rethodno d efinisanim domenima građujući u definiciju neko ogranič nje i dajući im na taj nnačin određe o značenje i nazivaju semantički. Semantički domeni se jo nazivaju i pstraktnim li korisnički definisani Semantički domeni su a pstraktni tipovi podatak , odnosno o bjekti koje definiše kori nik. Mada je iz definicije vi ljivo da se od domeno podrazu jeva nešto širi p jam, pojed ostavljeno ćemo smatr ti da je:
je u SQL-u
emantički bog čega s domenima.
Domen = tip p dataka
SQL podr ava osam predefinisa ih domen ; osam tip va podatak je mogu ć koristiti k o unaprije definisane građene - sistemski p edefinisane,, a po potre bi se iz nji mogu izv sti-definisati korisničk definisan ( RBR, PRB , ...i neki d ugi). Ugrađ eni SQL do eni su: 1. bro evi (numbe s), 2. niz ve karakter a (character strings), 3. niz ve bitova ( it strings), 4. dat mi (dates), 21
5. 6. 7. 8.
vremena (times), kombinacija datuma i vremena (timestamps), intervali godina/mjesec (year/month intervals), intervali dan/vrijeme (day/time intervals). INTERVAL YEAR
INTEGER (INT)
CHARACTER (CHAR)
SMALLINT Tačni
N u m e r i č k i t i p o v i
NUMERIC DECIMAL (DEC) REAL Približni DOUBLE
PRECISION
T e k s t u a l n i t i p o v i
CHARACTER VARYING (CHAR VARING, VARCHAR) CHARACTER LARGE OBJECT(CHAR LARGE OBJECT, CLOB)
Godinamesec
DATE BIT B i n a r n i t i p o v i
BIT VARYING BINARY LARGE OBJECT (BLOB)
D a t u m s k i t i p o v i
TIME TIMESTAMP TIME WITH TIMEZONE TIMESTAMP WITH TIME ZONE
I n t e r v a l n i t i p o v i
INTERVAL MOUNTH INTERVAL YEAR TO MOUNTH INTERVAL DAY INTERVAL
Danvreme(neki DAY TO iz grupe) HOUR
INTERVAL HOUR TO MINUTE
FLOAT
Kreiranje domena (definisanje tipova podataka) Postoje tri osnovne naredbe za definisanje domena: CREATE DOMAIN ALTER DOMAIN DROP DOMAIN (RESTRICT, CASCADE) • • •
Domen se kreira naredbom : CREATE DOMAIN [AS] [DEFAULT ] [[CONSTRAINT ] CHECK ()] .. Definicija domena se mijenja naredbom ALTER : ALTER DOMAIN SET DEFAULT | DROP DEFAULT | ADD [CONSTRAINT ] CHECK () | DROP CONSTRAINT Domen se uništava naredbom: DROP DOMAIN
22
Indeksi Indeksi su strukture podataka koje olakšavaju i čine efikasnijim pristup podacima baze. Vrijednosti indeksiranih kolona mogu biti jedinstvene (primarni ključ) ukoliko se pri kreiranju izabere varijanta UNIQUE.
CREATE [UNIQUE] INDEX ON ( ( [, , ..]) ; Izbacivanje indeksa se vrši naredbom:
DROP INDEX
Šema Šema je kolekcija tabela, pogleda, domena, tvrdnji (assertions). Šema predstavlja kolekciju svih objekata koji dijele isti prostor imenovanja. Šema može sadržati jednu ili više tabela, a svaka tabela može pripadati logi čki tačno jednoj šemi. Svaki objekat (tabela, pogled, itd.) pripada ta čno jednoj šemi. Pod pripadnoš ću se ne podrazumjeva fizi čka pripadnost, ve ć hijerarhijska veza u kojoj, na primjer, šema sadrži nula ili više tabela, a svaka tabela logi čki pripada tačno jednoj šemi. Šema se može pretstaviti dijagramima relacija Ali šema se može pretstaviti i u tekstualnom obliku na entiteta: sledeći način: Kupci (BrojKupaca, Ime, Adresa, Grad) Porudžbine (BrojPorudžbine, BrojKupca, Iznos, Datum)
Primarni ključevi su na primjer boldovani a spoljni klju čevi na primjer podvučeni.
Šema se kreira naredbom: CREATE SHEMA Izbacivanje šeme može biti CASCADE - izbacuje šemu i objekte iz nje ili RESTRICT - brisanje šeme koja je prazna i ostvaruje se naredbom: DROP SHEMA CASCADE | RESTRICT
Katalog Katalog je imenovana kolekcija šema baze podataka u SQL-u.
Baza podataka, pored podataka, sadrži i metapodatke, odnosno tzv “Rjecnik podataka” (Data Dictionary, Data Directory, Catalog). Katalog baze podataka opisuje posmatranu bazu podataka (strukturu baze, pravila o čuvanja integriteta podataka, prava koriš ćenja i slično i možemo ga shvatiti da je "baza podataka o bazi podataka". 23
Katalog je kolekcija šema. U katalogu postoji i informaciona šema (INFORMATION_SCHEME), katalog u užem smislu riječi, u kojoj se daju informacije o svim šemama u katalogu. Svaki katalog sadrži šemu sa nazivom INFORMATION_SCHEMA, koja predstavlja rje čnik podataka. Nju čini skup pogleda, odnosno sistemskih tabela, koje sadrže sve bitne informacije o SQL okruženju . Sadržaj sistemskih tabela se automatski održava. U SQL standardu ne postoje naredbe za kreiranje i uništavanje kataloga . Način njihovog kreiranja i uništavanja je implementaciono-definisan (implementation-defined), odnosno prepušten je vlasnicima softverskih proizvoda koji implementiraju SQL okruženje. Pun naziv objekata šeme ima tri komponente, razdvojene ta čkama: naziv kataloga, naziv šeme i naziv objekta. Ako je posmatrani objekat tabela, tada se njen pun naziv specificira na slede ći način: ... Objekti šeme se mogu referencirati sa eksplicitnim ili implicitnim nazivom kataloga i šeme: FROM -- nekvalifikovan naziv FROM .-- djelimično kvalifikovan naziv FROM ..-- potpuno kvalifikovan naziv model objektiveze za relacioni katalog:
Klaster je kolekcija kataloga.
Tabele Tabele predstavljaju dvodimenzionalne matrice čiji redovi predstavljaju naziv i svojstvo objekata smještenog u tabelu, a kolone objekata izražena odgovaraju čim tipom podataka. Uz pomo ć jedne n-torke opisan je jedan objekat. Kreiranje tabela Podaci se u SQL-u čuvaju se i prikazuju u obliku tabela. Svaka kolona tabele ima ime i tip podatka (domen). Red je najmanja jedinica podatka koja se može uneti u tabelu ili izbrisati iz nje. U SQL-u koriste se: 1. Bazna tabela - vrsta tabele za čuvanje svih SQL podaka. može biti: 3
Perzistentna tabela
CREATE TABLE ( NOT NULL], [NOT NULL], ..) Globalna privremena tabela
CREATE GLOBAL TEMPORARY TABLE ( [ NOT NULL], [ NOT NULL], . .) ; Kreirana lokalna privremena tabela
CREATE LOCAL TEMPORARY TABLE ( [ NOT NULL], [ NOT NULL], . .) ;
Deklarisana lokalna privremena tabela
DECLARE LOCAL TEMPORARY TABLE MODULE ( [NOT NULL], [ NOT NULL], . .) ;
3
Podaci koji se čuvaju i nakon prestanka rada određenog programa kome pripadaju i nazivaju se perzistentni podaci
24
2. Izvedena tabela - predstavlja rezultat izvršavanja upita. 3. Tabela pogleda - predstavlja rezultat poziva imenovanog upita (pogleda). Kasnije u sklopu MySQL više ćemo se baviti konkretnim primjerima, pa ipak u sklopu upoznavanja sa principima SQL-a često ćemo davati primjere, pa tako i ovdje: Kako u SQL-u kreirati tablicu? Primjer 1 CREATE TABLE osoba Primjer2 ( maticni broj NVARCHAR(15), CREATE TABLE grad ime NVARCHAR(15) NOT NULL, ( prezime NVARCHAR(15) NOT NULL, pbr SMALLINT, ulica NVARCHAR(25), naziv VARCHAR(50), mjesto NVARCHAR(15) DEFAULT ‘Banja Luka’ CONSTRAINT grad_pk PRIMARY KEY(pbr) PRIMARY KEY (maticni broj) ); );
Izmjena definicije tabele Dodavanje nove kolone •
ALTER TABLE [ADD COLUMN] ; Izmena postojeće kolone ALTER TABLE [ALTER COLUMN] SET DEFAULT | DROP DEFAULT; Izbacivanje kolone iz tabele ALTER TABLE DROP [COLUMN] ; Dodavanje ili izbacivanje ograni čenja na Vrijednosti ALTER TABLE ADD [CONSTRAINT ] | DROP CONSTRAINT ; •
•
•
Izbacivanje tabele Brisanje sadržaja tabele DELETE TABLE ; Brisanje tabele i njenog sadržaja DROP TABLE ; Za razliku od DELETE koja izbacuje samo n-torke iz relacije, ova naredba izbacuje i de finiciju relacije pa relacija i njena relaciona šema više ne postoji. •
•
Funkcije SQL podržava rad sa funkcijama. Da ćemo najčešću podjelu SQLfunkcija po kategorijama funkcija: 1. Aritmetičke funkcije, 2. Znakovne funkcije, 3. Agregatne funkcije
25
Aritmetič e (matem tičke) fun cije
Koriste se a realizaciju standardni matematičk ih operacija nad numeri kim tipom odataka.
SQL dozv ljava korišćenje matem tičkih funk ija u SEL CT i WHE E klauzula a. Na taj ačin se ka rezultat pr traživanja ogu prika ati rezultati izračunava ja nekog atematičko g izraza. K asnije ćemo detaljno ob aditi Select, pa zasad sa o pogledaj te, a kasnije detaljno analizirajte pri jere koji sli ede: Izla : Primjer 1. SQL> sel ct proizvod_id, PR IZVOD_ID ROUND(M IN_CIJENA,0) round(min_cijena,0 ---- ------ ---- ----------- from cije a 100890 46 where kataloska_cijena>5; 100890 41 104352 38 104352 41 Primjer 2. SQL> sel ct proizvod_id, 5*exp(1+cos(min_ci ena/3)) F nkcija from cije a where kataloska_cijena>50;
Izla :
PR IZVOD_ID FUNKCIJA ---- ------ ---- ---100890 5.146 74 100890 24.63 69 104352 36.92 397 104352 22.67 254
26
Funkcije za rad sa tekstualnim podatacima –znakovne funkcije Koriste se pri radu sa stringovima -tekstualnim tipom podataka. Funkcija OPIS LEFT(,X) RIGHT(,X) UPPER() LOWER() INITCAP() LENGTH() || LPAD(,X,'*') RPAD(,X,'*') SUBSTR(,X,Y) NVL(,)
Kao rezultat daje X „najljevijih“ znakova stringa. Kao rezultat daje X „najdesnijih“ znakova stringa. Pretvara sadržaj cijelog stringa u velika slova. Pretvara sadržaj cijelog stringa u mala slova. Pretvara sadržaj stringa tako da je svaka rije č sa početnim velikim slovom. Kao rezultat daje broj znakova u stringu. Spaja dva stringa u jedan string, pri čemu iza prvog odmah slijedi drugi string. Dodaje stringu sa lijeve strane onoliko znakova * (ili znak naveden unutar apostrofa) koliko je potrebno da bi se dobio string dužine X znakova. Dodaje stringu sa desne strane onoliko znakova * (ili znak naveden unutar apostrofa) koliko je potrebno da bi se dobio string dužine X znakova. Izdvaja Y znakova iz stringa po čevši od pozicije X. Zamjenjuje sve vrijednosti NULL u koloni vrijednostima
Funkcije agregacije Kao posebnu kategoriju obi čno se izdvajaju funkcije koje obavljaju agregaciju, mada se one mogu shvatiti i kao kombinacija znakovnih i matemati čkih funkcija. Funkcije agregacije su dobile naziv po tome što vrše agregaciju rezultata upita. Korišćenje ovih funkcija je jednostavno, pošto se navode u listi kolona SELECT klauzule koje se prikazuju. U najosnovnijem obliku agregatne funkcije vra ćati će skalarnu vrijednost, a sintaksa je sljedeća: SELECT AgregatnaFunkcija(atribut) FROM tabela Korišćenje ovih funkcija je jednostavno, pošto se navode u listi kolona SELECT klauzule koje se prikazuju. Daćemo tabelarni pregled naj češće korišćenih: Funkcija Opis-značenje AVG(obl) SUM(obl) MIN(obl) MAX(obl) COUNT({*|[DISTINCT]obl}) ABS(broj) MOD(br1, br2) POWER(br, e) UPPER(str) SUBSTRing(str, pos [, d]) CONCAT(str1, str2, str3, ...) YEAR(obl)
srednja vrijednost suma svih obeležja minimalna vrijednost maksimalna vrijednost broj pojavljivanja apsolutna vrijednost br1 po modulu br2 br na e-ti stepen u velika slova podstring od str, sa poz. pos konkatenacija stringova vraća godinu iz datuma
Daćemo dva primjera za ilustraciju funkcija agregacije (sa istom primjedbom uz mat. f-je; posta će jasnije nakon analize Select upita) Pr. 1. Napiši upit koji odre đuje maksimalnu, minimalnu, prose čnu i ukupnu platu svih radnika: SELECT MAX(Plata) AS MaxPlata, MIN(Plata) AS MinPlata, AVG(Plata) AS ProsPlata, SUM(Plata) AS UkPlata FROM RADNIK;
Pr 2. Pomoću funkcije COUNT odredi broj vrsta u rezultuju ćoj tabeli. SELECT COUNT(*) AS PlataSaBonusom FROM RADNIK;
27
SQL upi i – naredbe upita Osnova SQL-a je upit. Realizuje s kao blok o lika: SELE T < FRO WHE
lista tributa> < lista relacija> E < kvalif ikacioni izraz>
Pr mjer primje e Select up ta
Naredba up ita SELEC je jedna o najkomple ksnijih naredbi SQL pr gramskog j zika i sad ži veći broj ključnih ri eči klauzula: 1. SE ECT - definiše listu kolona koje će biti uključe e u rezultuj ću tabelu 2. FR OM - definiše tabele i kojih se p ribavljaju p daci za po rebe generi sanja rezult juće tabele. Klauzula FRO može da ključi jedn u ili više o cionih JOI klauzula a poveziva je tabela na osnovu kriterij ma zadatih d strane ko isnika. 3. W ERE - defi niše predika na osnovu oga se ograničava broj rsta u rezul tujućoj tabeli. Klauzule S LECT i FR OM su obavezne, a WH RE nije. Klauzula ELECT
SELECT definiše listu kolona oje će biti uključene rezultujuć tabelu. Li stom atribu a zadaje s operacija P OJEKCIJE. Klauzula S LECT sp cificira kol ne koje tre a uključiti u rezultujuću tabelu. M ogu se kori titi sljedeće opcije: ALL - u rezul tujućoj tabeli prikazuju s e sve vrste oje zadovol avaju nave eni predikat DISTINCT - iz rezultuju e tabele izb cuju se duplikati vrsta * - rezultujuća tabela uklj čuje sve kol one tabele ili tabela iz k jih se priba ljaju podac tabela.* - rez ltujuća tabela uključuje sve kolone pecificirane tabele izraz - ime kolone ili funk cije nad kol nama koja e biti uklju ena u rezult ujuću tabelu AS pseudoni - novo im kolone ili f unkcije nad kolonama k je im se do eljuje u rez ltujućoj ta beli
Klauzula ROM
FROM - d finiše tabel iz kojih se ribavljaju p odaci za po rebe generisanja rezultuj uće tabele. lauzula FROM može da uključi jednu ili vi e opcionih OIN klauz la za povez vanje tabela na osnovu riterijuma zadatih od trane korisnika Klauzula F OM speci icira tabele iz kojih se p ibavljaju podaci. Ukolik o se navede više tabela otrebno je specificirati način spaja ja tabela Kvalifikaci nim izrazo zadaju se slovi selekc ije i spajanj , odnosno i kazi slični i skazima u r lacionom računu.
28
Primjer S LECT / FR M upita Najjed ostavniji up t bez selekc e izdvaja s mo kolone...ostavlja on koje su nav edene, a izb cuje ostale.
Analiziraćemo tabelu k ja sadrži je instveni ma tični broj gr đana, imen , prezimena i adrese zaposlenih:
Pretpostavi o da ho će o da vidite adrese svih aposlenih. oristimo naredbu SEL CT: SE ECT Ime, Prezime, Adresa, Gra , Republi a FR M Tabela dresaRad ika; Rezultat ovog upita u b zu podatak je
Da objasni o sada šta ste upravo uradili: tražil i ste sve po atke u tabeli TabelaAdr esaRadnika – preciznije, tražili ste k olone pod n azivom Ime, Prezime, dresa, Gra , Republika. Obratite p ažnju da im na kolona i tabela ne s drže razm ke – ona s moraju na esti kao je na riječ, ka i da se na edba završava tačkom i zarezom (;). Opšti oblik naredbe SE ECT kojo se dobijaju svi redovi u tabeli je:
SELECT ImeKolone, ImeKolone, ... FROM ImeTabele;
Da biste do ili sve kolone neke tab le bez navo enja svih i ena kolona, koristite:
SELECT FROM I eTabele;
Klauzula
HERE
WHERE - definiše predikat na os ovu koga s ograničava broj vrsta rezultujućo j tabeli. Ov klauzula iz rezultata eli miniše sve rste za koje specificirani predikat ne vraća vrijednost TRUE. Klauzula HERE spe ificira uslo na osnovu koga se kreira rezultuju a tabela. U ezultujuću tabelu će biti uključene samo one vrs e-kolone, k je zadovolj vaju specificirani uslov. U uslovu s mogu javiti: Relacioni o peratori Logički op ratori Operator B TWEEN Operator I Operator L KE Operator I NULL
29
Relacioni operatori
Klauzula
HERE SQL podržava š st relacioni operatora oji imaju sl deće značen je: J dnako V će od = > M nje ili jedn ko od <> Nije jednako različito) <= anje od V će ili jedna o od < >=
Primjeri j dnostavn uslovne s lekcije (S LECT/FR M/WHERE)
Upite ćemo postavljati a sljedeću t belu:
Ukoliko želite da dobij te ID brojeve onih zapo lenih koji z rađuju prek 50.000, ko ristite sljedeću naredbu: SELECT I RADNIKA FROM TA ELAPRIM NJARAD IKA WHERE P ATA >= 5 000; Obratite pa nju da se k risti znak (r elacione ope ratore) >= veće ili jednako), pošto smo željeli da izdvojimo one zaposle ne koji zara uju više od 50,000, ili j dnako 50,0 0, i to prikazano zajedn o. Kao rezultat dobijamo: Opis klauz le WHERE, odnosno deo PLATA > 50000, na iva se uslov (operacija k oja kao rez ltat daje vrednost True ( tačno) ili Fa se (netačno)).
Isti tip oper acije može s e primeniti a tekstualne kolone: SE ECT IDR DNIKA FROM ABELAPRIMANJARA NIKA WHERE P LOŽAJ = ' ukovodila '; Ova naredb a prikazuje D brojeve s ih rukovodi laca. Generalno, u slučaju te stualnih kolona, koristit e operatore jednako ili različito, i ob vezno cijeli tekst koji se pojavljuje u naredbi avedite unutar apostrof (').
Važno! Fu kcije agre acije nije oguće kor istiti u WHERE klauz li. To je p sljedica čin jenice da s rezultat fu nkcija agre acija izračunava nakon što se odrede vrste koje ulaze u s astav rezult juće tabele, odnosno na kon obrade redikta koji je zadata u HERE klauzuli. Pogledajte QL upit ko i se NE MOŽE IZVRŠI I i koji će ENERISA I GREŠKU : SE ECT Ime, Prezime, Plata FROM ADNIK WHER E Plata > VG(Plata ) 30
Klauzula ORDER BY
ORDER BY - koristi se za sortiranje rezultuju će tabele. Korisnici specificiraju kolone po kojima se vrši sortiranje kao i smjer sortiranja. Klauzula ORDER BY specificira redosljed prikazivanja vrste rezultuju će tabele, sortiranjem po vrijednosti nekih kolona u rastu ći (ASC) (predefinisana vrijednost) ili opadaju ći redosljed (DESC). Ukoliko klauzula ODER BY nije navedena vrste u rezultuju ćoj tabeli su poređane po slučajnom principu i ne postoji nikakva garancija da će isti upit uvijek generisati rezultuju ću tabelu čije su vrste poređane na isti način. Primjer pokazuje SQL upit koji prikazuje podatke o radnicima i sortira ih prema prezimenu u opadaju ćem i rastućem redosljedu. SELECT * FROM RADNIK ORDER BY Prezime;
Klauzula GROUP BY Grupisanje se obavlja prema jednom ili više atributa iz relacije (ili više relacija ukoliko su navedene u FROM clause). GROUP BY clause sadrži popis atributa ili izraza prema kojima se obavlja grupisanje. GROUP BY - grupiše vrste koje u odre đenim kolonama imaju identi čne vrijednosti. Grupisanje se obavlja tako da se n-torke koje imaju jednake vrijednosti atributa navedenih u listi za grupisanje, kombiniraju u zajednicku grupu. Za svaku dobivenu grupu u rezultatu se pojavljuje samo jedna n-torka.
Primjer: SELECT sifPred FROM rezervacija, dvorana WHERE rezervacija.oznDvorana = dvorana.oznDvorana GROUP BY sifPred Postavljanje uslova nad grupom zapisa –Having klauzula Za postavljanje uslova nad grupom zapisa koristi se HAVING clause. HAVING - definiše predikat na osnovu koga se elimišu vrste nakon što je klauzula GROUP BY primjenjena na rezultujuću tabelu. Dok se uz pomo ć WHERE clause izdvajaju one n-torke koje će formirati grupe definisane u GROUP BY clause, HAVING clause služi za postavljanje uslova kojeg dobivene grupe moraju zadovoljiti da bi se pojavile u rezultatu. Za razliku od WHERE dijela naredbe, u HAVING dijelu naredbe dozvoljeno je koristiti agregatne funkcije. U HAVING dijelu naredbe dozvoljeno je koristiti samo one atribute koji se nalaze u GROUP BY listi. Atributi koji se ne nalaze u GROUP BY listi smiju se koristiti jedino kao argumenti agregatnih funkcija.
Primjer: ispis šifri predmeta i broja položenih ispita, ali samo onih predmeta za koje je položeno više od dva ispita. SELECT sifPred, COUNT(*) FROM ispit WHERE ispit.ocjena > 1 GROUP BY sifPred HAVING COUNT(*) > 2 31
Slika pokazuj povezanost WHERE, G OUP BY i HAVING d jela SELECT naredbe S LECT sifPr ed, COUNT(*) F OM ispit WHERE ispit. ocjena > 1 G OUP BY s ifPred H VING CO NT(*) > 2
U HAVING dijelu nare be dozvolj no je korstiti usl ove sa pod pitima na isti n čin kao što se k riste u W ERE claus .
WHERE dio naredbe o ređuje koje n-torke će f rmirati gru e (samo položeni ispiti). GROUP B lista odre uje struktur grupa tj. p o kojim atri butima se o avlja grupi sanje n-torki (sve ntorke koje imaju j ednaku šifr predmeta ulaze u jednu grupu). HAVING dio naredbe dređuje koj od nastalih grupa ce biti prihvacene kao rezulta (samo one rupe u kojima je b oj ntorki, tj. COUNT(*) veci od dva ). Ispisuje s po jedan za pis za svaku grupu koja adovoljava taj uslov.
Logički operatori
SQL omo BETWEE slučajevim Prioritet lo 1. N 2. A 3. O
ućava kori ćenje stan ardnih logi čkih operatore AND, R i NOT , ali i operatore IN i koji omogućavaju jednostavnij e korišćenje prethodno navedeni h operator u neki . ičkih operat ora je slede i: T D
Logički op ratori AND i OR se kor iste na stand ardni način. Međutim, k d SQL-a, l gički operator negacije NOT se na odi na početku logičko izraza, a ne ispred oper atora poređe ja. Na primje , NOT A = B e validni WHERE u slov, ali A OT = B nije. Primjer1
* FROM RADNIK WHERE Prezime = "Petrović"; Primjer3 SELECT * FROM RADNIK WHERE Prezime = "Petrović" SELECT
rimjer2
* FROM RA NIK HERE Prezime = " etrović" A ELECT
R Prezime =
"Jovan vić";
32
D Plata
>= 40000;
Operator IN Operator IN zamenjuje višestruku upotrebu operatora OR i = . Operator NOT IN prikazuje sve vrste osim onih određenih IN listom. Primjer: Korišćenjem operatora IN izdvajaju se samo radnici koji se prezivaju Petrovi ć ili Jovanović. SELECT * FROM RADNIK WHERE Prezime IN ("Petrović","Jovanović"); Naredni upit pribavlja podatke o svim radnicima osim onih koji se prezivaju Petrovi ć ili Jovanović. SELECT * FROM RADNIK WHERE Prezime NOT IN ("Petrović","Jovanović");
Operator BETWEEN Operator BEETWEEN zamjenjuje višestruku upotrebu operatora AND i =. Ovaj operator omogu ćava ispitivanje da li je vrijednost atributa/kolone u zadatom opsegu.
Primjer: Za prikazivanje podataka o radnicima čija je plata u opsegu od 30000 do 40000 (uklju čujući i granice opsega) možemo iskoristiti operator BETWEEN SELECT * FROM RADNIK WHERE Plata BETWEEN 30000 AND 40000; ili bez korišćenja BETWEEN SELECT * FROM RADNIK WHERE Plata>=30000 AND Plata<=40000;
Operator LIKE Operator LIKE omogućava poređenje vrijednosti kolone sa zadatim šablonom. Kod definisanja šablona koristi se procenat (%) i znak pitanja (?). Procenat (%) predstavlja bilo koji mogu ći znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?) zamenjuje samo jedan znak. Primjer:
SELECT * FROM RADNIK WHERE Prezime LIKE "J*";
Za nalaženje svih radnika koji sadrže slovo "J" negdje u prezimenu mogao bi se koristiti šablon "*J*". Obratite pažnju da se ne pravi razlika izme đ u malih i velikih slova.
Operator NOT LIKE prikazuje sve vrste koje ne odgovaraju prethodno datom opisu, tj. za prethodni slu čaj, sve radnike koji nemaju slovo "J" u svom prezimenu.
Operator IS NULL Operator IS NULL se koristi za pore đenje sa NULL vrijednostima. Treba voditi ra čuna da se na NULL vrijednosti ne može primjeniti ni jedan relacioni operator. Može se samo proveravati da li kolona ima NULL vrijednost ili nema. 33
Primjer koji pokazuje SQL upit koji izdvaja podatke o svim radnicima kojima nije definisan datum ro đenja odnosno datum ro đenja ima NULL vrijednost. SELECT * FROM RADNIK WHERE DatRodj IS NULL; Aritmetičke funkcije u Select u Where klauzulama SQL dozvoljava koriš ćenje matematičkih funkcija u SELECT i WHERE klauzulama. Na taj na čin se kao rezultat pretraživanja mogu prikazati rezultati izra čunavanja nekog matemati čkog izraza. Aritmetičke funkcije se mogu primjenjivati i u WHERE klauzuli. Primjer: SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom FROM RADNIK WHERE Plata + 5000 > 40000;
Selektivno spajanje dva niza operatorom & SQL jezik koristi operator & koji omogućuje spajanje dva znakovna niza. Primjer SELECT Ime & " " & SSlovo & " " & Prezime AS [Ime i prezime radnika] FROM RADNIK; U ovom primjeru izvršili smo spajenje imena i prezimena zaposlenih. Da ne bi došlo do spajanja rije či ubacili smo jedan prazan znak - blanko ('' '') izme đu riječi.
34
Spojevi ( Joins) Jedna od najvećih prednosti jezika SQL je njegova mogu ćnost da spaja i manipuliše podacima koji se nalaze u više različ itih izvornih tabela. U velikoj većini sluč ajeva upiti se ne izvršavaju samo nad jednom tabelom, već nad više njih koje je potrebno na neki od na č ina, spojiti. Da nema ove mogućnosti, trebali bi smo da sve mogu će podatke stavimo u jednu jedinu tabelu. i tako bismo ostali bez relacionog modela.
Pri objašnjenju upita sreli smo se sa potrebom spajanje dve ili više tabela. SQL to realizuje sa naredbom JOIN. Najčešće se koristi kao podupit u izrazu FROM . Spajanje tabela se obi čno vrši na osnovu kolona koje sadrže isti tip podataka. Naj češće spajanje je između primarnog ključa jedne tabeli i stranog klju ča druge tabele tj. tzv. "foreign relationship" izme đu tabla.
Postoje četiri tipa JOIN operacije, ali je tzv. unutrašnje spajanje ili "INNER JOIN" naj češće korišćeno.
INNER JOIN - spajanje dvije tabele koje imaju zajedni čke vrijednosti u nekim od svojih kolona. Primjera radi, možemo spojiti tabele Radnici i Plate, jer tabela "Plate" ima sifru radnika. SELECT Radnici. Prezime, Radnici. Ime, Radnici. Odeljenje, Plate. Iznos FROM Radnici INNER JOIN Plate ON Radnici. RadnikID = Plate. RadnikID OUTER JOIN - Postoji "LEFT OUTER JOIN" i "RIGHT OUTER JOIN" tj. lijevo i desno vanjsko spajanje. Recimo da imamo slede ći primjer: SELECT Korisnici. ImeKompanije, Korisnici. BrojTelefona, Narudzbe. DatumNarudzbe FROM Korisnici LEFT JOIN Narudzbe ON Customers. KorisnikID = Narudzbe. KorisnikID U ovom primjeru rezultat pretraživanja će sadržati sve korisnike, bez obzira da li imaju nula, jednu ili vise narudžbi. Korisnici sa vise narudžbi bi će prikazani u rezultuju ćoj tabeli onoliko puta koliko narudžbi imaju.
CROSS JOIN je takođe poznato kao Kartazijanski- Dekartov proizvod. Rezultat koji dobijemo je kombinacija svih vrsta jedne tabele sa svim vrstama druge tabele. Primjera radi, možemo napraviti novu tabelu spajanjem tabela "Studenti" i "Ispiti". SELECT Studenti. StudentID, Kursevi. KursID FROM Studenti AS s CROSS JOIN Kursevi AS k Primjetite da ON iskaz nije koristen. SELF JOIN je slučaj kada spajamo kolonu samu sa sobom. Recimo da imamo tabelu "Radnici" koja ima ključ "RadnikID". Želimo da napravimo listu svih radnika, sa imenima njihovih menadžera. Naravno, menadžer je takođe u tabeli "Radnici". SELECT e1. Prezime AS "Prezime", e1. Ime AS "Ime", e2. Prezime AS "Menadzer" FROM Radnici e1 INNER JOIN Radnici e2 ON e1. MenadzerID = e2. RadnikID 35
Osnovne klauzule ograničenje integriteta kolone Unutar SQL-a postoje mnogobrojna ograni čenja za ograničenje integriteta a za po četak ćemo navesti pet osnovnih koja omogu ćavaju ograničenje vrijednosti kolone koje sprje čava narušavanje integriteta podataka tako da onemogu ćuje unos podataka koji ne zadovoljavaju pretopstavljene vrijednosti. Najjednostavnije je vršiti očuvanje integriteta definišu ći vtijdnosti kolona: 1. NOT NULL – u koloni nije dozvoljena NULL 2. UNIQUE – u koloni nije dozvoljeno ponavljanje iste vrijednosti 3. PRIMARY KEY – kolona je primarni klju č, nije dozvoljena NULL vrijednost niti ponavljanje vrijednosti 4. CHECK (Predikat) – svaka vrijednost u koloni mora da zadovolji uslov zadat logi čkim izrazom Predikat. U izrazu se ne mogu navoditi druge kolone 5. DEFAULT=Konstanta – ako se prilikom unošenja jednog reda podataka u tabelu za kolonu ne zada vrijednost, podrazumjeva se Konstanta
36
Primjer složenog upita
Analiziraćemo bazu koj a sadrži tri t bele:
Ko je kupio stolicu? Da biste do ili imena o SE ECT PREZ FROM WHER
ih koji su k pili stolicu, koristite ovaj upit: MEVLASNIKA, IMEVL ASNIKA LASNICIANTIKVITETA, ANTIKVITETI IDKUPCA = IDVLAS IKA AND KOMADNA EŠTAJA = 'stolica';
Obratite pa nju na sled će činjenice o ovom upi tu: obje tabele koje su u elaciji nave dene su u k auzuli FROM nar dbe SELECT. U klauzuli HERE pri jetite da uslov KOMA NAMEŠT JA = 'stolica' ograničava izbor na one koji su kup li (a u naše primjeru, toga posedu u) stolicu. Drugo, obr tite pažnju ako se uspostavlja odno s između kolona sa ID b ojevima iz ve tabele u otrebom uslova IDK UPCA = ID LASNIK . Samo ako se podudara u ID brojev u tabelama i kupljen komad nameštaja je stolica (zb g operatora AND), prik azaće se im na iz tabele. Rezultat ovog upita su va imena: Simonović, B oban i Filip vić, Sima Koristeći z pis sa tačk ma da biste izb jegli dv smislenost, ispred imen kolona mo ete pisati i ena tabela: SEL CT VLAS ICIANTI VITETA.P REZIMEVLASNIKA,
VLAS
ICIANTI VITETA.I MEVLASNIKA
FRO VLASNICIANTIKVITETA, ANTIKVITETI WHERE ANTI VITETI.ID UPCA = VLASNICIA TIKVITET .IDVLASN KA AN KOMADNAMEŠTAJA = 'stolica'; Međutim, k ako su u tabelama imen kolona razl ičita, ovo nije bilo beop odno.
Napravite spisak svih lasnika po abecednom redu prezi ena. SE ECT DISTINCT IDPR DAVCA, P REZIMEVL SNIKA, I EVLASNIK A FR M ANTIK ITETI, VL SNICIANTIKVITETA W ERE IDPR DAVCA = IDVLASNI A ORDER BY PREZIMEVLA NIKA, IME VLASNIKA;
Ko je por čio nešto to se nudi Napravite pit koji prik azuje prezi ena onih vl asnika koji su poručili ešto i njiho u porudžbi u, pri čemu se daju sa o one poru žbine koje se mogu za ovoljiti (to jest, postoji prodavac k oji je vlasni poručeno komada na eštaja): 37
SELECT V .PREZIME LASNIKA Prezime, P OR.ŽELJENIKOMAD P ručen ko ad FROM PO UDŽBINE POR, VLASNICIANTIKVITETA VL WHERE P R.IDVLAS IKA = VL.IDVLASNI A AND POR.ŽEL ENIKOMA IN (SELE T KOMAD FROM NTIKVITETI); Ovo kao re ultat daje:
Ima nekoliko stvari na koje t eba obratiti pa nju u ovom u itu: 1. "Pr zime" i "Poručen komad" u r du koji počinje sa SELECT p edstavljaju za lavlja kolona izveštaju. 2. VL i POR su pseu onimi; to su nova imena za tabele naveden u klauzuli FR OM koja se ko riste u zapisu a tačkama kao pre iksi svih imena kolona u upitu. Ovim se el iminiše dvos islenost, naro ito pri spajanj u izjednačava jem u klauzuli WHERE jer obe t bele imaju kolonu pod nazi om IDVlasni a, a zapis sa t čkama ukazuj e SQL-u da s u pitanju dv različite kolone ID lasnika iz dv različite tabel . 3. Obr tite pažnju na redosljed tabela (vidi spoj vi) da je tabela Porudžbine navedena prva u klauzuli F OM; ovim s osigurava da se s isak prikazuj prema toj ta eli, a da se druga tabela VlasniciAntikvit ta koristi sa o za detaljnij pod tke (prezime). 4. Naj ažnije, AND klauzuli WH RE izaziva iz ršavanje IN p dupita ("= ANY" ili "= SOM E" su dva ekvi alentna zapisa za I ). Ono što se ovim postiže j izvršavanje p dupita koji ka rezultat da je sve posjedova e komade na eštaja iz tabel Antikviteti jer ne a klauzule W ERE. Zato, da bi se prikazao red iz tabele orudžbine, Žel jeniKomad mora se nalaziti toj raćenoj listi komada nameštaja iz tabele Antikviteti, čime se neki antikvit t prikazuje sa o ako porudžbina može da s realizuje kupovino od drugog v asnika . Ovo ože da se shv ti na sljedeći ačin: podupit ao rezultat daje skup komada na eštaja koji se u poređuje sa sv kim željenim omadom iz ta ele Porudžbine; IN uslov je t ačan samo ako ŽeljeniKoma pripada tom vraće om skupu iz ta bele Antikviteti. 5. Obr tite pažnju tak ođe da se u ov m slučaju desi lo da je svaki eljeni antikvit t bio raspoloži v, što naravno eće uvijek biti slučaj. Pored toga, kada se koris e ključne riječ i IN, "= ANY" ili "= SOME", one ukazuju na podudarnost redova, a n kolona. To znači da ne možete navesti više olona u klau uli SELECT ekog podupit želeći da uparite kolonu spol jašnjoj klauzul WHERE sa j dnom od više mogućih vrije nosti kolone u podupitu. U p odupitu se mo e navesti samo jed a kolona, a moguća podudarnost proizilazi iz više vrijednosti redovau toj j dnoj koloni, a ne obrnuto.
Ko je kupi o skup anti vitet? Na primer, prikažimo k pce koji su kupili skup antikvitet (c jena antikvi eta je za 10 veća od pr sječne cijene svih upljenih antikviteta): SELECT I KUPCA FR M ANTIK ITETI W ERE CENA > (SELE T AVG(CE A) + 100 FROM NTIKVITETI); Podupit izrač nava prosječn cijenu plus 100, a zatim se p ikazuju ID bro jevi kupaca za svaki komad n ameštaja koji j koštao iznad tog iznosa.
38