Upload
others
View
13
Download
0
Embed Size (px)
Citation preview
1
МО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/2011/12/SqlPriru%C4%8Dnik.pdf
2
Uvod:Potrebniprogramiiprogramskookruž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. OsnovneosobineWebservera 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
3
· 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. KratkaistorijarazvojaApacheservera 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 nadilazi onu NCSA (National 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) Mi ćemo instalirati XAMPP na WINDOWS operativnom sistemu. Postoji instalacija i za LINUX.
Nakon downloada pokrenite program. Nakon prokretanja programa pojavljuje se prozor za izbor jezika. Za početak izaberite standardnu procedury (Yes/Next)
4
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.
5
TestiranjeXAMPPinstalacije 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.
6
UvoduHTML 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) Osnovnadeklaracijatipadokumenta <!DOCTYPE> 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: <!DOCTYPE html> odnosno za verziju XHTML 1.0 Transitional: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> Napomena: Deklaracija nije obavezna, ali se preporučuje. HTMLkomande 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 <big> i </big>. 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: <html>. 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:</html>. 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 <br> koji služi za prelazak u novi red (o ovom tagu ćemo govoriti kasnije u dijelu o formatiranju teksta).
7
StrukturaHTMLdokumenta Svaki HTML dokument se sastoji od dva dijela: zaglavlja (head) i tijela (body). Zaglavlje se odvaja tagovima <head> i </head>, a tijelo dokumenta tagovima: <body> i </body>. 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: <title> i </title> 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: <title>Uvod u HTML</title> S druge strane sve ono što napišemo između tagova <body> i </body> 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: <html> <head> <title>Ovdje stavimo naziv Web stranice</title> </head> <body> Ovdje unesimo sve ono što želimo da se vidi u stranici </body> </html>
kod HTML dokumenta Vizuelna predstava strukture HTML dokumenta KreiranjeHTMLkodakorišćenjemNotepada 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"): <html> <head> <title>Milan</title> </head> <body> Moj prva Web stranica </body> </html> 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
je da koristi Kreiranje Gore je objaSad ćemo to
Pokrenemo Exp
U nju upišemtekst
ite i neki dru
HTMLkoda
ašnjeno kakoo objasniti ka
Web
Iz mkao
mo
ugi program (
au MS Web
o se u Notepaao to uraditi
menija File izo prvi mod iz
(Adobe Drea
b Expresion
adu kreira HTu MS Web E
zaberemo HTzaberemo De
Izbo
8
amweaver), p
TML stranicExpresion.
TML esign i dobije
or modov
pa čak i samo
ca.
emo praznu s
va
o Notepad.
stranicu
9
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. Klijentskiiserverskiskriptjezici 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.
Medutim, onajčešće koapsolutnu dDva su domCGI i modu Principr Korisnički bKako to sveKada korisnnalazi pošalkao što su sŠta se zaprskriptu? Tasadržaj kojiSama PHP osnovi HTMdefiniramo HTML dijelJedan od os(HTML dioWebExpresolakšavaju d Mojaprva Kada instali U Microsof
Primjetite dnaslov stran
ovaj put, servorišćeni jezicdominaciju naminantna načiuli Veb serve
radaPHPa
browseri ne re skupa ondanik u svom plje korisnikulike, zvukovavo događa da web serv se šalje koriskripta mož
ML osnovu uHTML dije
lova treba svsnovnih princo) odredimo ss) pa onda direktan rad
phpstrani
iramo sve što
ft Expression
da je osnovnanice itd.
verska mašinci za pisanje a ovom poljuina za izvrša
era odnosno C
a
razumiju PHa funkciniše?pretraživaču
u tu stranicu vi itd.)
kada neki ker na kojemuisniku (i kojiže imati na ru koju je ubaelove. U svavesti na razumcipa kojim siu nekom Wtaj kod pr
u PHP-u.
ica
o nam je potr
n Web iz men
a struktura H
na mora da buskriptova na
u imao progrvanje skriptoCommon Ga
HP (niti ASP, pozove nek
i ona se učit
korisnik u svu se nalazi ti njegov browrazličite načiačen PHP dioakom slučajumnu mjeru.i možemo ola
WYSIWYG erekopiramo
rebno krećem
nija File bira
HTML dokum
10
ude u moguća strani serveramski jezik ova od straneateway Interf
, niti CGI,...)
ku HTML strta u browser
vom internetta skripta powser razumijine isprepleto. Moguće jeu skripta mo
akšati rad u editoru (Mau PHP. Ne
mo s izradom
amo New i od
menta već tu
ćnosti da izvera su PHP, Perl. e Veb serverface (CGI) i A
).
ranicu tada w(i to prvo H
t browseru pčne izvršavae). tene PHP i He isto tako daora imati na
PHP-u i kojcromedia Deki "pametn
m stranica.
daberemo PHZa ime dokuDokument ćproba1 u m(to je mapa zavisno kojOvo treba zmjesto u konašeg web sgod radite nnovu mapu U MicrosofView
u: postoje tag
ršava skriptoASP.NET, J
a: Apache mod
web server nTML kod pa
pozove nekuati tu skriptu
HTML dijela je čitava sk
astavak PHP
i se proporučDreamweaver
iji" HTML
HP. umenta predćemo odmahapi servera zappserv/wwu instalaciju
zapamtiti: maoje stavljamoservera. Zbogneki novi prounutar te ma
ft Expression
govi za zagla
ove. U današJSP i Python
duli.
na kojemu sa tek onda os
u PHP (ili Au, a skripta k
love. Mogućkripta u php-
P, a broj izm
čuje je da izgr, Microsoft
editori om
dlažem primjh snimiti i to za objavljivan
ww, ili mapa xu ste odabraliapa www ili o svoje stranig bolje organojekt napravape. n Webu se pr
avlje i tijelo
šnje vrijeme,n. Nekada je
e ta stranicastali sadržaji
ASP ili CGI)kreira HTML
će je imati u-u a u njemu
mjena PHP i
gled stranicet FrontPage-
mogućavaju i
er1.php. u novu mapunje dokumenxampp/htdo). htdocs je ce i to je roonizacije, kad
vite za njega
rebacite u Co
dokumenta,
, e
a i
) L
u u i
e -i
u nata cs,
ot d
ode
,
Najčešći naSvaki PHP Primjera rad
<?phpecho"?>
Snimite strhttp://localhŠta se zaprKad god u bzapravo znaunutar mapenapravili (/pŠta se dogoKad smo msu čisti HTMizvršio, nareAko u svomtraga PHP-Gornji primnavesti i razZa ilustracijecho"<br>OvOvaj put smkažu naredbkako se zadAko bismo tagova i sveTo je moguNaučili smaIsto tako na
Još jedn
ačin rada s PHdio započinjdi, unutar bp "PHP ispis:
ranicu. Pokrhost/proba1/pravo dogodilbrowseru zatači da pokreće AppServ (iproba1/primjdilo na serve
mi u browseruML i nalazeedba echo znm web brow-u, tu je sam
mjer nije jedizličite HTMLju malo ćemovo je link na s
mo unutar nabi echo da tu
daje link HTMbili ekstrem
e elemente stće, no najčeš
ao kako napraučili smo ka
nu ilustraciju
HP-om je take sa oznakomody tagova
moja prva
renite web bprimjer1.phplo? tražite stranicćete stranicu ili mapi htdojer1.php). eru? u zatražili prie se izvan <?nači ispiši, odwseru poglemo čisti HTMini način kaL tagove i njo obogatiti nstranice školearedbe echo uu nije kraj onML-om).
mni u takvoj utranice ispisašće nije baš praviti i kako sako provjeriti
u rada PHP:
mjesto (u
Jez
kav da u postm <?php a zaubacite slijed
stranica";
browser. U p i vaša prva
cu čija adreslokalno sa se
ocs unutar ma
ikaz te strani?php i ?> tadnosno dodajdate HTML
ML. ko se može ihove dodatn
naš prvi primj: <a href=\" hubacili i linknoga šta ona
upotrebi PHPati naredbompraktično. spremiti phpi šta smo to z
unutar body
zičak za izbo
11
tojeću HTMLavršava sa ozdeću struktur
adresnu trakstranica je p
sa počinje saervera na vaape xampp).
ice, server jeagova poslaoaj HTML dokL kod (desn
koristiti PHne argumente
mjer i unutar http://www.gk. Primjetite a treba ispisa
P-a, tad bismm echo.
p stranicu. zapravo napr
strukture) gd
r Code View
L strukturu uznakom ?>. ru:
ku napišite:red vama!
a http://localhšem računaluOstatak adre
prepoznao do je odmah bkumentu. ni klik > Vie
HP. Unutar ne kako bismotagova <?phimnazijabanjaznakove \ is
ati već da on
mo cijelu stra
ravili uz pom
dje se ubacuj
-a
ubacimo PHP
host (primjetu. Ta adresa ese je putanja
da je riječ o pbrowseru, a o
ew Source)
navodnika nao imali kontrhp i ?> dodatialuka.org \"> spred navodnna treba ispis
anicu mogli
moć lokalno i
e PHP kod
P dijelove.
tite: nema wwodgovara ma do stranice
php stranici, ono unutar t
vidjet ćete
aredbe echo rolu nad izglti slijedeću na link </a>"; nika. Oni namsati navodni
staviti unuta
instaliranog
ww!) to api www
e koju smo
djelove kojitih tagova je
da nema ni
mi možemoedom teksta.aredbu:
m trebaju jerke (sjetite se
ar <?php i ?>
web servera.
i e
i
o .
r e
>
.
12
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 neproceduralan1, 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. IstorijatTvorac 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 9075-14: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
U SQL su ukfunkcionalnosupravljačkim sDva osnovna (ugrađeni SQ Bez obzira kojglavnih koman Relacion Relaciona aRelaciona arelacija (oRelacioni oUniju, PrjesKasnije su Dodatni opna atribute rpo kolonamMinimalni
ključeni koncept jezika, u SQstrukturama klanačina su dire
QL).
ju verziju i distndi (kao što su
nalgebrai
algebra algebra je f
objekata) smoperatori: Csek, Razliku,dodati oper
peratori: RErelacije A, E
ma. skup opera
pti objektne teQL je uvedenaasičnih programektno (interak
tribuciju SQL-aSELECT, UPD
irelacion
familija algemještenih uodd je origin, (Prirodno) Sratori: Renam
ENAME - proEXTEND - p
tora sadrži:
ehnologije, meha proceduralna
msih jezika. SQLktivno) korišće
a koristil,i svi SDATE, DELETE
niračun
bri sa dobrou relacionojnalno predložSpajanje, Dijme, Semijoinomjena nazivproširuje rela
restrikciju, Re
13
hanizam trigeranadgradnja S
L-1999 standardenje SQL-a i p
SQL jezici su uE, INSERT, WH
o zasnovanoj bazi podžio 8 operatojeljenje; n, Extend, Suva relacije, Saciju novim a
projekciju, elacioni oper
a, rekurzija i pSQL-a, koju ugd definiše više
povezivanje SQ
uglavnom u sklaHERE) i ponaša
om semantikdataka i zora: Restrikc
ummarize. SEMIJOIN -atributom, SU
proizvod, utori
proceduralna pglavnom čine načina korišćen
QL-a sa klasič
adu s ANSI staaju se na sličan
kom koja seza definisanciju (selekciju
Spajanje relaUMMARIZE
uniju, razliku
proširenja. Da upravljačke st
nja SQL-a. čnim program
andardom, svi in način.
e koristi za nje upita u), Projekcij
acija A i B pE - omoguća
ku.
bi se povećalaruktrure slične
mskim jezicima
imaju sličan set
modeliranjenad njima.
ju, Proizvod,
projektovanoava sabiranje
a e
a
t
e . ,
o e
Osobina darelaciono zAko su u lisSvrha relapodataka, drelacija, defRelacioni rRelacioni rarelacionog mPostoje dvij
• raču• raču
Predikatski vrijednostim Opseg prompripadaju tovrijednosti kNeka je x pkvantifikato
: 'za : 'po
Relacioni rkoje je pred
FORALEXIST
Kvantifikac Relacioni rpripadnosti.Sintaksa ovRANGE OFRETRIEVE[WHERE<u
D
a su i argumzatvorenje. sti navedeni cione algeb
definisnje prfinisanje pravračun ačun je opismodela podaje varijante: un orijentisanun orijentisan
račun: Predma funkcija d
mjenljivih: porkama iz tihkoje pripadajpredikat. Ta
ora: a svaki', ostoji'.
račun torki:dikat tačan. PLL V (p),
TS V (p). cija i rad sa s
račun dome.
vog računa seF <promenljiE <promenljiuslovni izraz
ijeljenje
menti i rezu
svi atributi rre: pisanje ostora za ažvila zaštite; o
san, neprocedataka za obra
n ka torkaman ka domeni
dikat je istinidaje izraz koj
promjenljivah relacija, prju tim domen
ada se skup
: slobodne i Postoje dva k
lobodnim i v
na: opseg va
e u literaturi piva> IS <tabeiva>.<imeatrz>]
ultat primjen
elacije A tadrelacionih i
žuriranje podosnova za op
duralan jezikadu podataka
a i ma - osnova
itosno vrjednji se naziva p
a torki ima opromjenljiva nima. svih x takav
vezane promkvantifikatora
vezanim pro
aženja promj
prikazuje na ele>
ributa>
14
ne bilo kog
da je projekciizraza koji dataka, definptimizaciju
k, logički eka i zasnovan j
a za QBE.
nosna funkcipredlog koji
pseg iz skupdomena ima
v da je P ta
mjenljive. Ka:
omenljivim su
mjenljivih su
različite nač
relacionog
ija identitet.se koriste zanisanje praviupita.
kvivalent relje na predika
ija sa argumemože da bud
pa navedeniha opseg iz sk
ačno za x oz
Korišćenjem p
u u skladu sa
domeni a ne
čine
Unija
operatora ta
a definisanjeila integritet
acione algebatskom račun
entima, i kadde tačan ili n
h relacija i dokupa naveden
značava sa {
promjenljivih
a pravilima p
e relacije, mo
a
akođe relacij
e prostora zata, definisanj
bre ako se pnu.
da se argumenetačan.
opuštene vrijenih domena
{x | p(x)} i
h torki traže
predikatskog
oguće je def
je se naziva
a dohvatanjeje izvedenih
posmatra dio
enti zamjene
jednosti kojei dopuštene
postoje dva
e se torke za
računa.!
finisati uslov
a
e h
o
e
e e
a
a
v
ili RANGEVA<promenljiv[WHERE<u Uslov je tačA=x tačno Na primjer, ISPIT {INDEKID_PREDMETima vrijednost Algebra i raSQL ima o Jezik je relamože da se SQL je rela(restrikciju,
3VLlogik Zašto nedo’...datum ro Očigledna jnačin vrši oCodd je prenepoznata, Očigledno algebre na N
• DefBod
AR <promenlva>.<imeatriuslovni izraz
čan ako posto
KS INDEKS(20TA ID_PREDMt tačno akko po
ačun su semasobine i alge
aciono komppredstavi i uaciono komp projekciju, p
ka(troval
ostajuće vriođenja nepozn
je potreba dobrada takvedložio korišvrijednost nij
često postojNULL-e: finisanje opedovi su NUL
ljiva> RANGibuta> z>]
oji torka u re
0110456), META(1001)} stoji torka u isp
antički ekvivebre i račun
pletan ako je u jeziku. pletan jer poproizvod, un
lentnalog
ijednosti? nat...’ ; ’...iz
da se indikavih podatakašćenje 4-valije primjenlji
ji PROBLE
eracije selekcLL, što da rad
GES OVER <
elaciji R takv
pitu koja ima vr
valentni. Nekna.
moćan isto k
ostoje SQL iniju, razliku).
gika)
U svakodnez izborne jed
ator o nedoa. Tako se dlentne logikeiva, vrijedno
MI SA NU
cije: ako ispitdimo?
15
<tabela>
va da je za sv
rijednost 20110
ki upitni jezic
kao i algebra
izrazi za sva.
evnoj praksidinice XX ne
ostatku vrijedolazi do višee jer postojeost ne postoji
ULL-ama, i
tujemo neku
vaki konkreta
0456 za atribut i
ci su više zas
a, tj. ako bilo
aki od 5 prim
i se često jadostaju poda
ednosti čuvaevalentnih loe dvije vrste i.
to problemi
u osobinu zap
an par poređ
indeks i 1001 za
snovani na al
o koja relacij
mitivnih ope
avlja problemaci...’
a u bazi, i dogika u relaci
nedostajućih
sa proširenj
pisa, kao Bod
đenje
a atribut id_pre
lgebri, a neki
ja predstavlji
eratora relaci
m nedostatk
da se na odionom modeh vrijednost
njem operaci
dovi > 40, i z
edmeta
i na računu -
iva u algebri
ione algebre
ka podataka:
dgovara-jućielu. ti: vrijednost
ija relacione
za neki zapis
-
i
e
:
i
t
e
s
• Defili n
• Dod• Da
ope Najčešći prumjesto uologiku odno Kada nema će se procjeOvo je idejrezultat provSQL pri prnetačno ili n3VL logika
• tačn• neta• nep
Operatori: • I (A• ILI • NE
Ponekad (rjfalse=0, trNOT(x)=1AND(x,y) OR(x,y) = Bazeire Ako ste propodataka. Bazu podataodređene naFizička reprU logičkomBaza podatorganizacijiusluge, posprogramimaRelacione bRelaciona bstandardnogEntitet (Enrazlikujemo Šta je relacEntitet možizmeđu dvaJedan red taKolona u to
finisanje prene? datni problemli da ih uklj
eracije ponaš
ristup prihvaobičajene bosno 3VL log
NULL-a, usenjivati i kao ja za provjervjere uslova imjeni WHEnedefinisanoa: tri vrijednono, ačno i
poznato.
AND), (OR), i (NOT).
eđe) se korisrue=1, unk-x, = min(x,y)max(x,y)
elacioneb
očitali (i dje
aka je zbirkamjere kao štrezentacija b
m smislu bazataka je skupi , i ona sadrlovni partnea u kojima sebaze podatakbaza podatakg (opšteg) relntity) Svaku na osnovu o
cija? žemo definis
a ili više entitabele predstaoj tabeli ili po
sjeke i razlik
mi za SQL: dučimo u račuaju kada je a
aćen i u prakbinarne-Bulogiku.
slovi se procj treća vrijednru uslova u istina.
ERE klauzulo. Test za nulosti:
sti i notacija:known=1/2
,
baze‐osno
elimično shv
ka informacito je pretraži
baze podatakaa podataka sap povezanih rži podatke keri i sl.). Pode obrađuju, aa su danas n
ka se sastoji lacionog mo
realnu činjosobina: Atrib
sati kao objeteta. avlja jednu n-olje (field) od
ke dviju rela
da li tretirati un (suma, sr
argument NU
ksi je korišćove (dvo-vrij
jenjuju kao inost -‘nedefiWHERE kl
e na tabelu ll: IS [NOT]
,
ovniterm
atili) predho
ija koje se oivanje,sortiraa se sastoji oastoji se od v
podataka kkoji se sastojdaci u bazi pa pristup njimajčešće korišod skupa ra
dela baza pojenicu ili pobuta.
ekat o kome ž
-torku ili jeddgovara jedn
16
acija: jesu li d
NULL-e kaorednja vrijedULL?
enje 'nedostijednosne) lo
istina (true) iinisano’, ili ‘lauzuli SQL
eliminiše svNULL.
iniipojm
odno poglavl
organizovananje i obradaod dviju ili vivećeg broja okoji se nalazje iz različitipodataka slu
ma je kontrolštene baze poazličitih relaodataka. ojavu, bez o
želimo da sa
dnu pojavu renom atributu
dva zapisa <
o duplikate? dnost, ...) i ak
tajuće vrijeogike upotri
ili neistina (fnepoznato’) SELECT-a
ve redove za
movi
lje daćemo j
ne u tabele i a podataka. iše datoteka nobjekata-tabeze u nekom ih objekata nuže za jednuisan. odataka.
acija (tabela)
obzira na su
akupljamo in
elacije, što od(osobini) tip
<Jovan,NULL
ko da, kako?
dnosti' (NUijebiti troval
false), ali ako. : Biće vraće
a koje se izra
oš neke poj
u druge vrs
na disku. ela, indeksa,i
informacionnekog poslov ili više apli
. Tabela odg
uštinu naziv
nformacije, ta
dgovara jednpa entiteta.
L> i <Jovan
? Kako da se
ULL. Za proclentnu (tro-v
o NULL-e po
eni jedino za
az u WHER
jmove za rad
ste objekata
itd. nom sistemuvnog sistemaikacija, i ne
govara pojm
vamo entiteto
ada je relaci
noj pojavi tip
,NULL> isti
e aritmetičke
cjenu uslovavrijednosnu)
ostoje, uslov
apisi gdje je
RE ima izraz
d sa bazama
a zbog tačno
u,tj. u nekoja (npr. raznezavisni su o
mu relacije iz
om. Entitete
ija opis veze
pa entiteta.
i
e
a )
v
e
z
a
o
j e o
z
e
e
Definicija ta(field) okaraKada se deftabelama kopodataka br Baza podatDB se možeTabela (Tapodataka - pSlog (zapis)sa podacimaPolje (FieldPrimjer: u te
RReToADŠeKPr
Primjer koji
Relacija iparelacija ne mtabeli su ure
abele se u krakteriše nizofinišu sve taboje su u vezrine i o integr
taka (Databae sastojati od ble) Grupa s
polja. ) (Record) Jea, u opštem sld) Pojedinačnelefonskom im
Relacioni moelacija orka tribut omen atributema relacije
Kardinalnost rimarni ključ
i ilustruje ek
ak nije isto štmože, redovieđene u redo
rajnjoj liniji om osobina. Nbele na osnovzi. Peciznijeritetu (tačnos
ase DB) Grupsamo jedne taslogova poda
edinstveni zalučaju, različ
ni podatak - stmeniku su četiri
del
ta
č ekviv
kvivalencije i
to i tabela (ni u tabeli su uosljedu slijev
i svodi na toNeke od tih ovu relacione e, naznačavasti) baze pod
pa tabela podabele (najčešataka. Svi sl
apis (vrsta) uitoga tipa. tavka u slogui polja: prezim
Baza podTabela Vrsta (redKolona Tip podatOpis tabebroj torkiatribut (ili
valencija: Re
iz gornje tabe
na kakve smouređeni u red
va udesno, do
17
o da se definiosobina je nešeme, potreb
a se preko kdataka.
dataka koje sće to nije sluč
logovi su isto
u tabeli koji s
u. me, ime, adresa
dataka
d u tabeli)
tka kolone sele i i kombinacijaelacioni mod
ele
o mi navikli) jdosljedu od vok za relaciju
iše lista fieldeophodno odbno je još us
kojih polja s
sadrže srodnečaj). o organizova
se sastoji od
a i telefonski br
skup važećih v
a atributa) kojadel-Baza pod
jer tabela mvrha ka dnu,u to ne važi.
d-ova jedne tadrediti, neke spostaviti i vsu tabele u v
e podatke.
ane grupe
više polja
roj.
vrijednosti (tip
a jedinstveno dataka
ože da sadrž dok za relac
tabele i da sese mogu i „p
veze (relationvezi, da se
pova)
identifikuje ta
ži duplirane rciju to ne važ
e svako poljepreskočiti". nships) među
unutar baze
abelu
redove dok ži, kolone u
e
u e
18
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:IzborrelacijaAko 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 SSL PREZIME MBR DATRODJ POL PLATA ADRESA Ivana S Gocić 123456 15-10-87 Ž 17000 Niška 4 Milan I Savić 234567 01-03-57 M 32000 Humska 2 Ana P Rodić 666777 03-12-50 Ž 27000 Savska 34 Pera K Kostić 555333 31-12-53 M 43000 Čairska 3
SEKTOR
BRSEK NAZIV SEKTORA SBROJ 40 projektovanje 60 proizvodnja 80 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 Domen Značenje Definicija domena LIME Imena Osoba Skup mogućih imena osoba Niz karaktera, dužine do 15. PREZIME Prezime Osoba Skup mogućih prezimena osoba Niz karaktera, dužine do 15. MBR Maticni Broj Skup mogućnih matičnih brojeva
radnika Cijeli brojevi, napr. opsega 111111-999999*
DATRODJ Datum Rodjenja Moguće vrijednosti za datume rođenja zaposlenih u preduzeću
Datum, opseg, od 01-JAN-44 nadalje
POL Pol Pol radnika Karakter (1), vrednost M i Ž PLATA PlataRadnika Moguće vrednosti plata radnika Broj, opseg od minLD do 40000.00, gdje je
minLD minimalni republički lični dohodak ADRESA AdresaRadnika Moguće adrese radnika preduzeća Niz karaktera (30)
19
SQLnaredbe 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čajeno 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;
3. Naredbe za upravljanje bezbjednošću podataka (Data Control Functions) 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)
20
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)
SintaksaSQLnaredbi Upoznavanje sa sintaksom i sematikom2 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! 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: <naziv kataloga>, <naziv šeme>, <naziv objekta> 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
7
Struktur Definisanje
• Dom• Ind• Kat• Šem• Tab
Definisanje model baze što smo oba
Znači prije baze, potom Domen Domeni se prost, korisnUobičajeno -Predefinis-Semantičkdomenima ui nazivaju sSemantički Mada je iz dnešto širi po
SQL podrždefinisane udefinisan (S
1. broj2. nizo3. nizo4. datu
raSQL‐a
strukture SQmena eksa taloga ma bela
strukture znpodataka n
avili prije neg
nego što prm ćemo defini
definišu kanički definisje da se dom
sane domeneke domene, ugrađujući uemantički. Sdomeni su adefinicije vidojam, pojedn
Do
žava osam ugrađene - SRBR, PRBRjevi (numberove karakteraove bitova (bumi (dates),
QL znači def
nači da smoastao je na go smo pristu
ristupimo defisati element
ao skupovi ian imenovan
meni podijelee, domeni kokoje korisn
u definiciju nSemantički dapstraktni tipdljivo da se pnostavljeno
omen = tip po
predefinisansistemski pr
R, ...i neki drrs), a (character bit strings),
finisanje:
o ranije kreirosnovu analupili izradi m
finisanju strte SQL-a. An
iz kojih atribn objekat. e na: oji postoje u jnik definiše eko ograničeomeni se jošovi podatakapod domenomćemo smatra
odataka
nih domenaredefinisane,rugi). Ugrađ
strings),
21
rali model blize problemamodela baze.
rukture baze naliza i izrad
buti relacije
jezicima baznad predefin
enje i dajući š nazivaju i aa, odnosno om podrazumati da je:
a; osam tipo, a po potređeni SQL dom
baze podataka kojeg želim
neophodno da modela su
e uzimaju sv
za podataka.nisanim ili pim na taj nn
apstraktnim ibjekti koje d
mjeva
ova podatakaebi se iz njihmeni su:
ka koji nam mo rješiti up
je uraditi anu temelj SQL
voje vrijedn
prethodno dačin određenili korisnički
definiše koris
a je mogućeh mogu izve
je to omogupotrebom baz
nalizu i napL-a.
nosti. Domen
definisanim sno značenje zi definisanimsnik.
e koristiti kaesti-definisat
ućio. A opetze podataka.
raviti model
n je u SQL-u
semantičkimzbog čega se
m domenima.
ao unaprijedti korisnički
t
l
u
m e .
d i
22
5. vremena (times), 6. kombinacija datuma i vremena (timestamps), 7. intervali godina/mjesec (year/month intervals), 8. intervali dan/vrijeme (day/time intervals).
Num
erički tipovi
Tačni
INTEGER (INT)
SMALLINT
NUMERIC
DECIMAL (DEC)
Približni
REAL
DOUBLE PRECISION
FLOAT
Tekstualni tipovi
CHARACTER (CHAR)
CHARACTER VARYING (CHAR VARING, VARCHAR)
CHARACTER LARGE OBJECT(CHAR LARGE OBJECT, CLOB)
Binarni tipovi
BIT
BIT VARYING
BINARY LARGE OBJECT (BLOB)
Datum
ski tipovi
DATE
TIME
TIMESTAMP
TIME WITH TIMEZONE
TIMESTAMP WITH TIME ZONE
Intervalni tipovi Godina-mesec
INTERVAL YEAR
INTERVAL MOUNTH
INTERVAL YEAR TO MOUNTH
Dan-vreme(neki iz grupe)
INTERVAL DAY
INTERVAL DAY TO HOUR
INTERVAL HOUR TO MINUTE
Kreiranjedomena(definisanjetipovapodataka) Postoje tri osnovne naredbe za definisanje domena:
• CREATE DOMAIN • ALTER DOMAIN • DROP DOMAIN (RESTRICT, CASCADE)
Domen se kreira naredbom: CREATE DOMAIN <naziv domena> [AS] <predefinisani tip> [DEFAULT <Vrijednost>] [[CONSTRAINT <naziv ograničenja>] CHECK (<ograničenje>)] .. Definicija domena se mijenja naredbom ALTER : ALTER DOMAIN <naziv domena> SET DEFAULT <Vrijednost> | DROP DEFAULT | ADD [CONSTRAINT <naziv ograničenja>] CHECK (<ograničenje>) | DROP CONSTRAINT <naziv ograničenja> Domen se uništava naredbom: DROP DOMAIN <naziv domena>
23
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 <naziv indeksa> ON (<naziv tabele> ( <naziv kolone1> [, <naziv kolone2>, ..]) ; Izbacivanje indeksa se vrši naredbom: DROP INDEX <naziv indeksa> Š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 entiteta:
Ali šema se može pretstaviti i u tekstualnom obliku na 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 <naziv šeme> 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 <naziv šeme> 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".
24
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: <naziv kataloga>.<naziv seme>.<naziv tabele>. Objekti šeme se mogu referencirati sa eksplicitnim ili implicitnim nazivom kataloga i šeme: FROM <naziv tabele> -- nekvalifikovan naziv FROM <naziv seme>.<naziv tabele>-- djelimično kvalifikovan naziv FROM <naziv kataloga>.<naziv seme>.<naziv tabele>-- potpuno kvalifikovan naziv model objekti-veze 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. Kreiranjetabela 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: Perzistentna3 tabela CREATE TABLE <naziv tabele> (<naziv kolone1> <tip podatka> NOT NULL], <naziv kolone> <tip podatka> [NOT NULL], ..) Globalna privremena tabela CREATE GLOBAL TEMPORARY TABLE <naziv tabele> (<naziv kolone1> <tip podatka> [ NOT NULL], <naziv kolone> <tip podatka> [ NOT NULL], . .) ; Kreirana lokalna privremena tabela CREATE LOCAL TEMPORARY TABLE <naziv tabele> (<naziv kolone1> <tip podatka> [ NOT NULL], <naziv kolone> <tip podatka> [ NOT NULL], . .) ; Deklarisana lokalna privremena tabela DECLARE LOCAL TEMPORARY TABLE MODULE <naziv tabele> (<naziv kolone1> <tip podatka> [NOT NULL], <naziv kolone> <tip podatka> [ NOT NULL], . .) ;
3 Podaci koji se čuvaju i nakon prestanka rada određenog programa kome pripadaju i nazivaju se perzistentni podaci
25
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 ( maticni broj NVARCHAR(15), ime NVARCHAR(15) NOT NULL, prezime NVARCHAR(15) NOT NULL, ulica NVARCHAR(25), mjesto NVARCHAR(15) DEFAULT ‘Banja Luka’ PRIMARY KEY (maticni broj) );
Primjer2 CREATE TABLE grad ( pbr SMALLINT, naziv VARCHAR(50), CONSTRAINT grad_pk PRIMARY KEY(pbr) );
Izmjenadefinicijetabele
• Dodavanje nove kolone ALTER TABLE <naziv tabele> [ADD COLUMN] <definicija kolone> ;
• Izmena postojeće kolone ALTER TABLE <naziv tabele> [ALTER COLUMN] <naziv kolone> SET DEFAULT <Vrijednost> | DROP DEFAULT;
• Izbacivanje kolone iz tabele ALTER TABLE <naziv tabele> DROP [COLUMN] <naziv kolone> ;
• Dodavanje ili izbacivanje ograničenja na Vrijednosti ALTER TABLE <naziv tabele> ADD [CONSTRAINT <naziv ograničenja> ] <ograničenje tabele> | DROP CONSTRAINT <naziv ograničenja> ; Izbacivanjetabele
• Brisanje sadržaja tabele DELETE TABLE <naziv tabele>;
• Brisanje tabele i njenog sadržaja DROP TABLE <naziv tabele>; 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
AritmetičkKoriste se z
SQL dozvorezultat predetaljno obrPrimjer 1. SQL> seleround(mifrom cijenwhere ka
Primjer 2. SQL> sele5*exp(1+cfrom cijenwhere ka
ke(matemaza realizaciju
oljava korišćetraživanja mraditi Select,
ect proizvon_cijena,0)na taloska_cij
ect proizvocos(min_cijna taloska_cij
atičke)funku standardnih
enje matemamogu prikaz pa zasad sam
d_id, )
ena>5;
d_id, jena/3)) Fu
ena>50;
kcijeh matematičk
atičkih funkczati rezultati mo pogledajt
unkcija
26
kih operacija
cija u SELE izračunavante, a kasnije
IzlazPRO-----100100104104 IzlazPRO-----100100104104
nad numerič
ECT i WHERnja nekog mdetaljno ana
z: OIZVOD_ID ------- -----890 46 890 41 352 38 352 41
z: OIZVOD_ID ------- -----890 5.1469890 24.639352 36.924352 22.672
čkim tipom p
RE klauzulammatematičkogalizirajte prim
ROUND(MI-------------
FUNKCIJA ----- 974 969 4397 2254
podataka.
ma. Na taj ng izraza. K
mjere koji slij
IN_CIJENA-
način se kaoasnije ćemojede:
A,0)
o o
27
Funkcijezaradsatekstualnimpodatacima–znakovnefunkcije Koriste se pri radu sa stringovima -tekstualnim tipom podataka. Funkcija OPIS LEFT(<string>,X) Kao rezultat daje X „najljevijih“ znakova stringa. RIGHT(<string>,X) Kao rezultat daje X „najdesnijih“ znakova stringa. UPPER(<string>) Pretvara sadržaj cijelog stringa u velika slova. LOWER(<string>) Pretvara sadržaj cijelog stringa u mala slova. INITCAP(<string>) Pretvara sadržaj stringa tako da je svaka riječ sa početnim velikim slovom. LENGTH(<string>) Kao rezultat daje broj znakova u stringu. <string>||<string> Spaja dva stringa u jedan string, pri čemu iza prvog odmah slijedi drugi string.
LPAD(<string>,X,'*') Dodaje stringu sa lijeve strane onoliko znakova * (ili znak naveden unutar apostrofa) koliko je potrebno da bi se dobio string dužine X znakova.
RPAD(<string>,X,'*') Dodaje stringu sa desne strane onoliko znakova * (ili znak naveden unutar apostrofa) koliko je potrebno da bi se dobio string dužine X znakova.
SUBSTR(<string>,X,Y) Izdvaja Y znakova iz stringa počevši od pozicije X.
NVL(<kolona>,<vrijednost>) Zamjenjuje sve vrijednosti NULL u koloni <kolona> vrijednostima <vrijednost
Funkcijeagregacije 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) srednja vrijednost SUM(obl) suma svih obeležja MIN(obl) minimalna vrijednost MAX(obl) maksimalna vrijednost COUNT({*|[DISTINCT]obl}) broj pojavljivanja ABS(broj) apsolutna vrijednost MOD(br1, br2) br1 po modulu br2 POWER(br, e) br na e-ti stepen UPPER(str) u velika slova SUBSTRing(str, pos [, d]) podstring od str, sa poz. pos CONCAT(str1, str2, str3, ...) konkatenacija stringova YEAR(obl) 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;
SQLupit Osnova SQL Realizuje se
SELECFROMWHER
Naredba upključnih rij
1. SEL2. FR
Klaosn
3. WH Klauzule SE
KlauzulaS SELECT -operacija PRKlauzula SEopcije:
ALDI* taizrAtab
KlauzulaF FROM - deFROM možzadatih od sKlauzula FRspecificiratiKvalifikacioračunu.
ti–nared
L-a je upit.
e kao blok ob
CT < lista aM < lista relRE < kvalif
pita SELECTječi klauzulaLECT - defiOM - defin
auzula FROMnovu kriterijuHERE - defin
ELECT i FR
SELECT
- definiše lisROJEKCIJEELECT spe
LL - u rezulISTINCT - - rezultujuća
abela.* - rezuraz - ime koS pseudonimbeli
FROM
efiniše tabeleže da uključistrane korisnROM specifi način spajanonim izrazom
beupita
blika:
atributa> lacija> fikacioni izr
T je jedna oda: iniše listu ko
niše tabele izM može da uuma zadatih oniše predikat
ROM su obav
stu kolona kE. ecificira kolo
tujućoj tabeliz rezultujuć
a tabela ukljuultujuća tabeolone ili funkm - novo ime
e iz kojih se pi jednu ili viš
nika ficira tabele inja tabela m zadaju se u
az>
d najkomple
lona koje će z kojih se pruključi jednod strane kort na osnovu k
vezne, a WHE
koje će biti
one koje treb
li prikazuju sće tabele izbaučuje sve kolla uključuje
kcije nad koloe kolone ili fu
pribavljaju pše opcionih J
iz kojih se pr
uslovi selekc
28
eksnijih nared
biti uključenribavljaju po
nu ili više oprisnika. koga se ogra
ERE nije.
uključene u
ba uključiti
se sve vrste kacuju se dupllone tabele ilsve kolone s
onama koja ćfunkcije nad
podaci za potJOIN klauzu
ribavljaju po
cije i spajanja
Pri
dbi SQL pro
ne u rezultujodaci za pot
pcionih JOIN
aničava broj v
u rezultujuću
u rezultujuć
koje zadovoljlikati vrsta li tabela iz kospecificirane će biti uključkolonama ko
trebe generisula za povezi
daci. Ukolik
a, odnosno is
imjer primjen
ogramskog je
uću tabelu trebe generisN klauzula z
vrsta u rezult
u tabelu. Li
u tabelu. M
javaju naved
ojih se pribavtabele čena u rezultuoje im se dod
anja rezultujivanje tabela
ko se navede
skazi slični is
ne Select upi
ezika i sadr
sanja rezultuza povezivan
tujućoj tabel
istom atribut
Mogu se koris
deni predikat
vljaju podaci
ujuću tabeludeljuje u rezu
juće tabele. Ka na osnovu k
više tabela p
skazima u re
ita
rži veći broj
ujuće tabele.nje tabela na
li.
ta zadaje se
stiti sljedeće
t
i
ultujućoj
Klauzula kriterijuma
potrebno je
elacionom
j
. a
e
e
PrimjerSENajjedn
Analiziraćem
Pretpostavim
SELFRO
Rezultat ovo
Da objasnimtražili ste ktabela ne sazarezom (;) Opšti oblik SELECT IFROM ImDa biste dobSELECT *
KlauzulaW WHERE - rezultata eli Klauzula Wuključene sa
ELECT/FROnostavniji upi
mo tabelu ko
mo da hoćemLECT Ime, OM TabelaAog upita u ba
mo sada šta skolone pod nadrže razma.
naredbe SELmeKoloneeTabele; bili sve kolo
* FROM Im
WHERE
definiše preiminiše sve v
WHERE specamo one vrst
OMupitait bez selekcij
oja sadrži jed
mo da vidite Prezime, AAdresaRadnazu podataka
ste upravo unazivom Imeake – ona se
LECT kojome, ImeKolo
ne neke tabemeTabele;
edikat na osnvrste za koje
cificira uslovte-kolone, koRelacioni oLogički opeOperator BEOperator INOperator LIOperator IS
ije izdvaja sa
dinstveni mat
adrese svih zdresa, Gradnika; a je
uradili: tražilie, Prezime, Ae moraju nav
m se dobijaju ne, ...
ele bez navođ
novu koga sespecificirani
v na osnovu koje zadovoljaperatori eratori ETWEEN
N IKE
S NULL
29
amo kolone..
atični broj gra
zaposlenih. Kd, Republik
i ste sve podAdresa, Gradvesti kao jed
svi redovi u
đenja svih im
e ograničavai predikat ne
koga se kreiravaju specifi
.ostavlja one
ađana, imena
Koristimo nka
datke u tabeld, Republikadna riječ, kao
u tabeli je:
mena kolona,
a broj vrsta u vraća vrijed
ra rezultujućicirani uslov.
e koje su nav
a, prezimena
aredbu SELE
i TabelaAdrea. Obratite pao i da se nar
koristite:
u rezultujućojdnost TRUE.
ća tabela. U r U uslovu se
vedene, a izba
a i adrese zap
ECT:
esaRadnika ažnju da imeredba završa
oj tabeli. Ova.
rezultujuću te mogu javiti
acuje ostale.
poslenih:
– preciznije,ena kolona iava tačkom i
a klauzula iz
tabelu će bitii:
, i i
z
i
Relacionio Klauzula W
Primjerije Upite ćemo
Ukoliko želSELECT IDFROM TABWHERE PLObratite pažone zaposleKao rezulta
Isti tip oper
SEL
Ova naredbGeneralno, se pojavljuj Važno! Funrezultat fuodnosno nakPogledajte S
SEL
operatori
WHERE SQL= Je<> N< M
ednostavne
postavljati z
lite da dobijeDRADNIKABELAPRIMALATA >= 50žnju da se koene koji zarađat dobijamo:
racije može sLECT IDRA
FROM T
a prikazuje Iu slučaju teke u naredbi n
nkcije agregunkcija agregkon obrade pSQL upit kojLECT Ime,
FROM RWHER
L podržava šeednako ije jednako (
Manje od
euslovnese
za sljedeću ta
ete ID brojevA
ANJARADN0000; oristi znak (ređuju više od
se primeniti nADNIKA TABELAPRIWHERE PO
ID brojeve svkstualnih kolnavedite unu
gacije nije mgacija izračupredikta kojiji se NE MOPrezime, PlRADNIK
RE Plata > A
est relacionih
(različito)
elekcije(SE
abelu:
ve onih zapos
NIKA
elacione ope50,000, ili je
Opis klauzu(operacija k(netačno)).
na tekstualne
MANJARADOLOŽAJ = 'rvih rukovodiona, koristite
utar apostrofa
moguće koriunava nakon
je zadata u WOŽE IZVRŠITlata
AVG(Plata)
30
h operatora k
ELECT/FRO
slenih koji za
eratore) >= (ednako 50,00
ule WHERE,koja kao rezu
e kolone:
DNIKA rukovodilacilaca. e operatore ja (').
istiti u WHšto se odre
WHERE klaTI i koji će G
koji imaju sle> Ve<= Ma>= Ve
OM/WHERE
arađuju preko
(veće ili jedn00, i to prika
, odnosno deultat daje vre
c';
ednako ili ra
ERE klauzuede vrste kojauzuli. GENERISAT
edeće značenjeće odanje ili jednaeće ili jednak
)
o 50.000, ko
nako), pošto sazano zajedno
o PLATA >=dnost True (t
azličito, i oba
uli. To je poje ulaze u sa
TI GREŠKU
nje:
ako od ko od
oristite sljede
smo željeli do.
= 50000, naztačno) ili Fal
avezno cijeli
osljedica činastav rezultu
U:
ću naredbu:
da izdvojimo
ziva se uslovlse
tekst koji
njenice da seujuće tabele,
v
e ,
31
KlauzulaORDERBY 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;
KlauzulaGROUPBY 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
Postavljanjeuslovanadgrupomzapisa–Havingklauzula 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
WHERE dioGROUP BYkoje imaju jHAVING dkojima je brtaj uslov.
Logičkiop SQL omogBETWEENslučajevimaPrioritet log
1. NO2. AN3. OR
Logički opeNOT se navNa primjer Primjer1 SELECT *FROM RADWHERE PPrimjer3 SELECT *FROM RADWHERE P
o naredbe odY lista odredjednaku šifru
dio naredbe oroj ntorki, tj.
peratori
gućava korišN koji oma. gičkih operat
OT ND R
eratori AND vodi na počer, NOT A =
DNIK rezime = "
DNIK rezime = "
dređuje koje duje strukturuu predmeta uodređuje koje COUNT(*)
šćenje standmogućavaju
tora je sledeć
i OR se korietku logičkogB je validni
Petrović";
Petrović" O
n-torke će fou grupa tj. p
ulaze u jednue od nastalih veci od dva
dardnih logičjednostavnij
ći:
iste na standg izraza, a ne
WHERE u
PSFW
OR Prezime
32
ormirati gruppo kojim atriu grupu).
grupa ce bita). Ispisuje se
čkih operatoje korišćenj
dardni način. e ispred operaslov, ali A N
Primjer2 SELECT * FROM RADWHERE Pr
e = "Jovano
SlGRnaSEFRWGRHA U je nako
pe (samo polibutima se ob
ti prihvacenee po jedan za
ore AND, Oje prethodn
Međutim, koatora poređe
NOT = B nij
DNIK rezime = "P
ović";
ika pokazujeROUP BY i aredbe ELECT sifPrROM ispit
WHERE ispit.ROUP BY siAVING COU
HAVING dkorstiti uslo
ačin kao što oriste u WH
oženi ispiti).bavlja grupis
kao rezultatapis za svaku
OR i NOTno navedeni
od SQL-a, lonja. e.
Petrović" AN
e povezanostHAVING di
red, COUNT
ocjena > 1 ifPred UNT(*) > 2
dijelu naredove sa podu
o se HERE clause
. sanje n-torki
t (samo one gu grupu koja
T, ali i opeih operatora
ogički operat
ND Plata >
t WHERE, ijela SELEC
T(*)
dbe dozvoljeupitima na i
e.
i (sve ntorke
grupe u zadovoljava
eratore IN ia u nekim
tor negacije
= 40000;
T
eno isti
e
i m
33
OperatorIN 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ć");
OperatorBETWEEN 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;
OperatorLIKE 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.
OperatorISNULL 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.
34
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čkefunkcijeuSelectuWhereklauzulama 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.
35
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
36
Osnovneklauzuleograničenjeintegritetakolone 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
PrimjersloAnaliziraćem
Ko je kupDa biste dob
SEL
Obratite pažFROM nareU klauzuli Wograničava Drugo, obrauslova IDKnameštaja jeRezultat ovo Koristeći za
SELE
Međutim, k Napravite s
SELFROWHOR
Ko je poruNapravite use daju samkomada nam
oženogupimo bazu koj
io stolicu? bili imena onLECT PREZI
FROM VWHERE
žnju na sledeedbe SELECWHERE primizbor na oneatite pažnju k
KUPCA = IDVe stolica (zboog upita su d
apis sa tačkaECT VLASN VLASN FROM WH AND
kako su u tab
spisak svih vLECT DISTIOM ANTIKVHERE IDPRODER BY PR
učio nešto šupit koji prikmo one porudmeštaja):
itaa sadrži tri ta
nih koji su kuIMEVLASNIVLASNICIAE IDKUPCA
eće činjeniceCT. mjetite da use koji su kupikako se uspoVLASNIKAog operatora dva imena: S
ama da bisteNICIANTIKNICIANTIKM VLASNICIHERE ANTIKD KOMADNelama imena
vlasnika po INCT IDPROVITETI, VLAODAVCA = EZIMEVLAS
što se nudi?kazuje prezimdžbine koje
abele:
upili stolicu,IKA, IMEVLANTIKVITET = IDVLASN
e o ovom upit
slov KOMADili (a u našemstavlja odno
A. Samo ako AND), prikaimonović, B
e izbjegli dvoKVITETA.PKVITETA.IANTIKVITE
KVITETI.IDKAMEŠTAJA
a kolona razl
abecednomODAVCA, PASNICIANTIIDVLASNIKSNIKA, IME
? mena onih vlse mogu zad
37
koristite ovaLASNIKA TA, ANTIKVNIKA AND
tu: obje tabe
DNAMEŠTAm primjeru, sos između kose podudarajazaće se ime
Boban i Filipo
osmislenost, PREZIMEVMEVLASN
ETA, ANTIKKUPCA = V = 'stolica';ičita, ovo nij
m redu prezimREZIMEVLAIKVITETA KA EVLASNIKA
lasnika koji sdovoljiti (to
aj upit:
VITETI KOMADNAM
ele koje su u r
AJA = 'stolicstoga posedujlona sa ID brju ID brojeviena iz tabele.ović, Sima
ispred imenaLASNIKA, IKA
KVITETI VLASNICIAN; je bilo beoph
mena. ASNIKA, IM
;
su poručili njest, postoji
MEŠTAJA =
relaciji naved
ca' ju) stolicu. rojevima iz di u tabelama
a kolona mož
NTIKVITETA
hodno.
MEVLASNIKA
nešto i njihovprodavac ko
= 'stolica';
edene su u kl
dve tabele upi kupljen ko
žete pisati im
A.IDVLASNI
A
vu porudžbinoji je vlasnik
lauzuli
potrebom omad
mena tabela:
IKA
nu, pri čemuk poručenog
u g
SELECT VLFROM PORWHERE PO
AND
Ovo kao rez
Ima nekoliko s1. "Pre2. VL
prefWHrazli
3. Obraosigpoda
4. Najvza INAntitoj vrealinampripa
5. Obraslučakolospoljjedn
Ko je kupioNa primer, pcijene svih kSELECT ID
FROWH
Podupit izračutog iznosa.
L.PREZIMEVRUDŽBINE OR.IDVLASND POR.ŽELJ
(SELECFROM A
zultat daje:
stvari na koje trezime" i "Poruči POR su pseudfiksi svih imen
HERE jer obe taičite kolone IDVatite pažnju na
gurava da se spatke (prezime). važnije, AND uN). Ono što se ikviteti jer nemvraćenoj listi koizuje kupovinom
meštaja koji se uada tom vraćenatite pažnju takaj. Pored toga,
ona. To znači ljašnjoj klauzulina kolona, a mo
o skup antikprikažimo kukupljenih an
DKUPCA OM ANTIKVHERE CENA
(SELECFROM A
unava prosječnu
VLASNIKA POR, VLASNIKA = VL.JENIKOMAD
CT KOMAD ANTIKVITE
reba obratiti pažen komad" u redonimi; to su n
na kolona u upiabele imaju koVlasnika iz dvea redosljed tabepisak prikazuje
u klauzuli WHEovim postiže je
ma klauzule WHomada nameštajm od drugog vl
upoređuje sa svanom skupu iz tabkođe da se u ovo kada se koristda ne možete i WHERE sa jeguća podudarno
kvitet? upce koji su
ntikviteta):
VITETI > CT AVG(CENANTIKVITE
u cijenu plus 10
Prezime, PONICIANTIK.IDVLASNIKD IN TI);
žnju u ovom upedu koji počinjenova imena za titu. Ovim se ellonu pod naziv
e različite tabeleela (vidi spoje
e prema toj tab
ERE izaziva izve izvršavanje poHERE. Zato, da ja iz tabele Antlasnika . Ovo makim željenim kbele Antikvitetiom slučaju desite ključne riječnavesti više k
ednom od više ost proizilazi iz
kupili skup a
NA) + 100 TI);
00, a zatim se pr
38
OR.ŽELJENKVITETA VL KA
pitu: e sa SELECT prtabele navedeneliminiše dvosmvom IDVlasnike. evi) da je tabebeli, a da se d
vršavanje IN poodupita koji kaoa bi se prikazaotikviteti, čime smože da se shvakomadom iz tabti. ilo da je svaki žči IN, "= ANY"kolona u klauzmogućih vrijed
z više vrijednos
antikvitet (ci
rikazuju ID bro
IKOMAD Po
redstavljaju zage u klauzuli FR
mislenost, naročka, a zapis sa ta
la Porudžbine druga tabela Vl
odupita ("= ANo rezultat da je red iz tabele Pe neki antikviteati na sljedeći nbele Porudžbin
željeni antikvite" ili "= SOMEzuli SELECT ndnosti kolone u ti redovau toj je
ijena antikvit
ojevi kupaca za
oručen kom
glavlja kolona uROM koja se kočito pri spajanjačkama ukazuj
navedena prvalasniciAntikvite
Y" ili "= SOMEsve posjedovan
Porudžbine, Željet prikazuje samnačin: podupit ke; IN uslov je t
et bio raspoloživ", one ukazuju nekog podupitapodupitu. U po
ednoj koloni, a
teta je za 100
svaki komad na
mad
u izveštaju. oriste u zapisu sju izjednačavanje SQL-u da su
a u klauzuli FReta koristi sam
E" su dva ekvivne komade namljeniKomad momo ako porudžbkao rezultat dajtačan samo ako
v, što naravno nu na podudarnoa želeći da upodupitu se možne obrnuto.
0 veća od pro
ameštaja koji je
sa tačkama kaonjem u klauzuliu u pitanju dve
ROM; ovim semo za detaljnije
valentna zapisameštaja iz tabeleora se nalaziti ubina može da see skup komada
o ŽeljeniKomad
neće uvijek bitist redova, a ne
parite kolonu uže navesti samo
osječne
e koštao iznad
o i e
e e
a e u e a d
i e u o
39
Pogledi(View) Postoje samo kao definicije upita nad jednom ili više tabela. Pogledi ne čuvaju podatke u sebi (prividne relacije bez vlastitih podataka). Pogledi su virtuelne tabele koje nemaju odgovarajuću fizičku reprezentaciju, već je njihova definicija, u terminima drugih tabela, zapamćena u sistemskom katalogu. Omogućuju
• prilagodenje logičkog modela podataka specifičnim potrebama korisnika • provođenje zaštite protiv neovlaštenog pristupa podacima
Izvršavaju se u trenutku upita pomoću naredbe CREATE VIEW Pogled se briše naredbom DROP VIEW Kreiranje pogleda
Sintaksa: CREATE VIEW [< owner > . ] view_name [ ( column [ ,...n ] ) ] AS select_statement
Primjer: Da biste formirali pogled u bazi antikviteti) koristite naredbu: CREATE VIEW ANTPOGLED AS SELECT ŽELJENIKOMAD FROM PORUDŽBINE; Sada, napišimo upit koji koristi ovaj pogled kao tabelu, pri čemu je tabela predstavlja samo spisak svih željenih komada nameštaja iz tabele Porudžbine:
SELECT IDPRODAVCA FROM ANTIKVITETI, ANTPOGLED WHERE ŽELJENIKOMAD = KOMADNAMEŠTAJA;
Ovaj upit pokazuje sve ID brojeve prodavaca iz tabele Antikviteti, pri čemu komad namještaja u toj tabeli pripada pogledu AntPogled, a koji predstavlja samo sve željene komade nameštaja u tabeli Porudžbine. Rezultujući spisak se formira prolaskom kroz sve komade nameštaja u tabeli Antikviteti, red po red, dok se ne pronađe isti takav u pogledu AntPogled. Pogledi se mogu koristiti za ograničavanje pristupa bazi podataka, isto kao i za pojednostavljivanje složenih upita, što je ovde slučaj.