Sie sind auf Seite 1von 39

DLI I BZ PDK

Uvod u web okruenje


SQL

Koriteni 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

Uvod: Potrebni programi i programsko okruenje


Prije poetka izrade dinamikih web sajtova, odnosno projektovanja baza u web okruenju potrebno je
obezbjediti programsko okruenje.
Mi emo pokuati 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 poelljno je
bar elementarno poznavanje HTML-a, a mi emo koristiti MS WebExpresion sa kreiranje okruenje u
kome emo ugraditi PHP.
Da bismo mogli da izradjujemo dinamike web sajtove neophodno je da imamo instaliran php, podignut web
server i istaliranu neku od baza podataka (u naem sluaju koristiemo mySQL).
Postoje gotovi web server paketi koji nam omoguavaju da na veoma jednostavan nain instaliramo sve to
nam je potrebno za nesmetan razvoj php aplikacija na lokalnom raunaru.
Mi emo koristiti u XAMPP integrisanoj formi.

Osnovne osobine Web servera


Web server je raunarski program odgovoran za prihvatanje HTTP (Hypertext Transfer Protocol) zahtjeva od
web klijenata, znanih kao web browser-i, i opsluivanje HTTP odgovora sa opcionalnim sadrajem kao to
su HTML dokumenti, vezani objekti, slike, itd...
Web serverom se naziva i raunar na
kojem se vrti program opisan gore, ali
emo u daljnjim razmatranjima pod web
serverom podrazumijevati raunarski
program ili skup programa i usluga.

odnos web servers i database servera

Web serveri razlikuju u detaljima, od programa do programa, ali najvanija karakteristika je da koriste HTTP
protokol.
HTTP: svaki web server program prihvata HTTP zahtjeve od klijenta i daje HTTP odgovore.
HTTP odgovori se sastoje obino od HTML dokumenata, ali to moe biti i bilo koji dokument,
slika, itd... Ako se desi greka prilikom opsluivanja zahtjeva web server mora poslati broj i opis
greke krajnjem korisniku;
U praksi web serveri implementiraju i sljedee funkcije:
- Autorizacija: zahtjev za korisnikim imenom i lozinkom prije nego se dozvoli pristup dijelu ili
cijelom resursu;
-Rukovanje sa statikim ili dinamikim sadrajima podravajui jedno ili vie interfejsa: SSI, CGI,
SCGI, FastCGI, JSP, PHP, ASP, ASP.NET, ServerAPI kao to je NSAPI ili ISAPI, itd...
-HTTPS podrka (SSL ili TLS) za sigurnu ifriranu konekciju na port 443 umjesto uobiajenog
porta 80;
-koriste tzv. princip logiranja (Logging): obino web serveri imaju mogunost prikupljanja detaljnih
informacija o zahtjevima klijenata i odgovorima servera u tzv. log dokumente koji koriste web urednicima za
statistike analize
2

Komprimiranje sadraja (npr. gzip kodiranje) da se smanji veliina odgovora;


Virtualni hosting za opsluivanje mnogo web stranica koritenjem 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 razliitim operativnim sistemima UNIX-Linux, Windows.
Kratka istorija razvoja Apache servera
Projekt Apache nastaje 1995. godine, a distribucija (termin distribucija koristi se u znaenju 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, odrane 2000. u Orlandu, Florida. Velika popularnost
ovog softwarea je dokaz njegove kvalitete iako spada u open-source, prema istraivanjima 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 postojeih web stranica.

XAMPP
Postoje "paketi" softwarea kao sto je Xampp koji se osnivaju na Apache serveru koji objedinjuju aplikacije
potrebne za razvoj dinaminih web stranica razvijenih u PHP programskom jeziku.
XAMPP je programski paket koji slui za imitiranje WEBHOST-servera ali na na lokalnom raunaru
(za podrku PHP programskom jeziku ).
Da biste instalirali XAMPP neophodno je da na mrei pronaete instalacioni fajl (potreite 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 poetak izaberite standardnu procedury (Yes/Next)

Sljedei 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 podeavanja. Tu
nam se nudi opcija da XAMPP
instaliramo kao servis.

Nakon zavrene instalacije


XAMPP paketa program ce vam
ponuditi opciju za otvaranje
XAMPP control panela. Izaberite
opciju YES.

estitamo, uspeno ste instalirali XAMPP. Na sljedeoj slici vidimo da su Apache i MySql instalirani kao
servis, to znai da se aktiviraju odmah nakon paljenja vaseg raunara.

Testiranje XAMPP instalacije


Nakon to ste uspesno instalirali XAMPP moete poeti da razvijate php aplikacije na svom raunaru.
Otvorite web browser (npr. mozzila firefox) i u navigation toolbar unesite adresu http://localhost.
Nakon to ste ovo uradili potrebno je da dobijete sljedei prozor odnosno da pristupite XAMPP web
aplikaciji na svom raunaru.

Ukoliko ste dobili slian rezultat znai da je instalacija uspjeno obavljena.


Uvod u HTML
Da bi nastavili sa radom trebamo znati osnovne HTML-a.
Da bi mogli nastaviti sa radom daemo osakaeni uvid u HTML okruenje.
HTML je programski jezik koji se koristi za kreiranje dokumenata na World Wide Web-u. HTML se koristi
za stvaranje hipertekstualnih datoteka (datoteka koje sadravaju linkove).
HTML (HyperText Markup Language) je veoma jednostavan jezik ije osnove svatko moe savladati za par
dana, a kasnije je sve stvar prakse.
Kad savladamo osnove HTML-a moemo prijei na prouavanje nekog naprednijeg korienja i dizajniranja
u HTML-u.
Kada "surfamo" Internetom i naiemo na neku zanimljivu stranicu , a ne znamo kako je napravljena, njen
izvorni HTML kod moemo pogledati ako u liniji menija odaberemo: View / Source (ili View / Page
Source). Ovo je najbolji nain da nauimo neke nove stvari.
Sve to nam je potrebno da bi napravili jednu Web stranice praktino ve imamo na raunaru. To je prije
svega jedan najobiniji tekst editor kao to je Notepad.
Umjesto Notepada preporuujem Notepad++.
Slijedea stvar koja nam je neophodna je Web Browser (preporuka IE ili Firefox)
Osnovna deklaracija tipa dokumenta
<!DOCTYPE> deklaracija na poetku html dokumenta omoguava web browseru da prikae web stranicu
ispravno, tj da dokument prepozna kao HTML. U dananjim html dokumentima najee 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 preporuuje.
HTML komande
HTML komande se piu u vidu tzv. tag - ova.
Jedan tag je u komanda koja govori naem browseru to i kako napraviti tj. na koji nain prikazati sadraj
naih stranice.
HTML tagovi su "case insensitive" tj. svejedno je da li ih piemo malim ili velikim slovima.
Tagovi se piu unutar oznaka "<" i ">" (bez znakova navoda)
HTML elementi najee dolaze u paru, kao <big> i </big>.
Prvi element nazivamo poetni element, a drugi zavrni element.
Zavrni element ima isti naziv kao i poetni uz razliku to se ispred elementa umee kosa crta (slash)
Tag: <html>.
Ovaj tag se nalazi na poetku svakog HTML dokumenta i on govori naem browseru da je datoteka koju je
upravo poeo uitavati ba HTML dokument i da kao takvog treba i prikazati. Na kraj HTML dokumenta se
stavlja zavrni HTML tag:</html>. Ovaj tag govori browseru da je to kraj naeg HTML dokumenta. Veina
tagova ima i poetni i zavrni tag. Zavrni tag se dobiva dodavanjem znaka "/" i oznaava mjesto na kojem
prestaje djelovanje poetnog taga.
Postoje i tagovi kod kojih ne moramo stavljati zavrni tag kao sto je recimo tag <br> koji slui za prelazak u
novi red (o ovom tagu emo govoriti kasnije u dijelu o formatiranju teksta).

Struktura HTML dokumenta


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 napiemo u zaglavlju dokumenta nee se prikazati u prozoru browsera ve obino slui samo da prui
neke informacije o naoj stranici.
Tako emo u okviru naeg zaglavlja svakako staviti tagove: <title> i </title> izmeu kojih emo staviti
naslov nae stranice. To nije naslov koji e se pojaviti u tijelu nae stranice ve onaj naslov koji se pojavljuje
u naslovnoj liniji browsera. Pogledajmo naslovnu liniju naeg browsera - ispred imena browsera
vidjeemo da pie: "Uvod u HTML". To je zato to smo u zaglavlju ovog dokumenta napisli:
<title>Uvod u HTML</title>
S druge strane sve ono to napiemo izmeu tagova <body> i </body> predstavljat e tijelo naeg dokumenta
i pojavit e se kao sadraj nae web stranice u prozoru browsera (kao to je tekst koji upravo itamo).
Dakle, svaki HTML dokument mora imati slijedeu 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


Kreiranje HTML koda korienjem Notepada
Sad je vrijeme da napravimo prvu web stranicu. Otvorimo novi dokument u Notepad-u i upiimo gornju
strukturu HTML dokumenta u kojem emo staviti naslov po elji (npr. nae osobno ime), a izmeu 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 upiimo ime nae prve stranice, a kao ekstenziju otkucajmo .htm ili
.html (npr. "prva.htm").
U padajuoj listi Save as type odaberimo All Files. Stisnite OK i naa prva html stranica je spremna da je
otvori u na web browser.
Ako smo sve ispravno napravili u naslovnici naeg 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 naeg interesovanja, ali su neto to se
podrazumjeva.
Preporuka je da instaliete i naviknete se na okruenje WebExp. , to e vam bitno olakati rad, ali mogue
7

(
Dreaamweaver), pa
p ak i samo
o Notepad.
je da koristiite i neki druugi program (Adobe
Kreiranje HTML koda
a u MS Web
b Expresion
Gore je objaanjeno kakoo se u Notepaadu kreira HT
TML stranicca.
Sad emo too objasniti kaao to uraditi u MS Web E
Expresion.

Pokrenemo Web
Exp

Izbo
or modov
va

m
File izzaberemo HT
TML
Iz menija
kaoo prvi mod izzaberemo Deesign i dobijeemo praznu stranicu
s
U nju upiem
mo
tekst

Promjenimo mod
i izaberemo Code
da vidimo ta
smo uradili (ta je
za nas uradio
Web Exp

Zapamtimo stranicu i prokrenemo je (pogledamo) u naem browseru.


Klijentski i serverski skript jezici
Jedan od pravaca razvoja bazira se na razvoju specijalizovanih programskih jezika klijentskih skript jezika,
koji omoguavaju da se izvorni programski kod umetne u HTML Veb stranice, i zatim interpretira i izvrava
u okviru Veb pregledaa.
Jezici ovog tipa su JavaScript (kasnije standardizovan kao ECMAScript), JScript, Visual Basic Script, . . .
Klijentski skriptovi mogu da reaguju na akcije korisnika (pokrete mia, unos sa tastature...) i da na osnovu
toga menjaju i prilagodavaju sadraj Veb stranice u koju su umetnuti. Kako bi ovo moglo da se realizuje,
neophodno je da postoji nain da se iz skript jezika pristupi elementima stranice i u ovom cilju razvijen je
objektni model dokumenta (DOM).
DOM omoguava da skriptovi vide
Kombinovanje HTML-a, CSS-a sa JavaScript-om korienjem DOM-a, ponekad se naziva dinamikih
HTML-om (Dynamic HTML - DHTML).
Za razliku od klijentskih skriptova, koji su se u obliku izvrnog ili kompajliranog koda prenosili na klijentsku
mainu i na njoj izvravali, serverski skriptovi predstavljaju programe koji se izvravaju na serverskoj maini
i rezultat njihovog rada (najee u obliku formirane Veb stranice) se alje klijentu gde se prikazuje.
Za razliku od sluaja klijentskih skriptova kada je klijent morao da bude osposobljen da izvrava preneti
program (npr. da pregleda poseduje mogunost izvravanja JavaScript koda, da je na klijentu instaliran JRE
i slino), da bi klijent mogao da koristi serverske skriptove, potrebno je naee samo da ima elementarne
mogunosti komuniciranja HTTP protokolom i prikazivanja HTML stranica.
9

na mora da buude u mogunosti da izvrava skriptoove. U dananje vrijeme,,


Medutim, oovaj put, servverska main
najee koorieni jezicci za pisanje skriptova naa strani serveera su PHP, ASP.NET, JJSP i Python
n. Nekada jee
apsolutnu ddominaciju naa ovom polju
u imao progrramski jezik Perl.
Dva su dom
minantna naiina za izvravanje skriptoova od stranee Veb servera:
CGI i moduuli Veb serveera odnosno Common
C
Gaateway Interfface (CGI) i Apache
A
modduli.

Princip rrada PHPa


a
Korisniki bbrowseri ne razumiju
r
PH
HP (niti ASP,, niti CGI,...)).
Kako to svee skupa ondaa funkcinie?
pozove nekku HTML strranicu tada web
Kada korisnnik u svom pretraivau
p
w server nna kojemu se ta stranicaa
nalazi poallje korisnikuu tu stranicu i ona se uitta u browser (i to prvo HTML kod paa tek onda osstali sadrajii
kao to su slike, zvukovvi itd.)
ta se zapravo dogaa kada neki korisnik
k
u svvom internett browseru pozove
p
nekuu PHP (ili ASP
A ili CGI))
skriptu? Tada web server na kojemu
u se nalazi tta skripta pone izvravaati tu skriptuu, a skripta kreira
k
HTML
L
sadraj koji se alje koriisniku (i kojii njegov brow
wser razumije).
Sama PHP skripta moe imati na razliite
r
naiine ispreplettene PHP i HTML
H
dijellove. Mogue je imati u
osnovi HTM
ML osnovu u koju je ubaaen PHP dioo. Mogue jee isto tako daa je itava skkripta u php--u a u njemuu
definiramo HTML dijeelove. U svaakom sluajuu skripta mo
ora imati naastavak PHPP, a broj izm
mjena PHP i
HTML dijellova treba svvesti na razum
mnu mjeru.
Jedan od ossnovnih princcipa kojim sii moemo olaakati rad u PHP-u i koji se proporuuje je da izg
gled stranicee
(HTML dioo) odredimo u nekom WYSIWYG
W
eeditoru (Macromedia Dreamweaver
D
r, Microsoftt FrontPage-WebExpresss) pa onda taj kod prrekopiramo u PHP. Neeki "pametniji" HTML editori om
moguavaju i
olakavaju ddirektan rad u PHP-u.

Moja prva php straniica


Kada instaliiramo sve too nam je potrrebno kreem
mo s izradom
m stranica.
U Microsofft Expressionn Web iz men
nija File biraamo New i od
daberemo PH
HP.
Za ime doku
umenta preddlaem primjer1.php.
Dokument emo

odmahh snimiti i to u novu mapuu


proba1 u mapi servera zza objavljivan
nje dokumennata
(to je mapa appserv/ww
cs,
ww, ili mapa xampp/htdo
x
zavisno koju instalacijuu ste odabrali).
Ovo treba zapamtiti:
z
maapa www ili htdocs je
mjesto u ko
oje stavljamoo svoje stranice i to je rooot
naeg web servera.
s
Zbogg bolje organ
nizacije, kadd
god radite neki
n novi proojekt naprav
vite za njega
novu mapu unutar te maape.
U Microsofft Expressionn Webu se prrebacite u Coode
View
Primjetite dda je osnovnaa struktura HTML
H
dokum
menta ve tu
u: postoje tag
govi za zaglaavlje i tijelo dokumenta,,
naslov strannice itd.

10

mjesto (u
unutar body strukture) gd
dje se ubacuje PHP kod
Jez
ziak za izbor Code View-a

HP-om je tak
kav da u posttojeu HTML
L strukturu ubacimo
u
PHPP dijelove.
Najei naain rada s PH
Svaki PHP dio zapoinje sa oznakom
m <?php a zaavrava sa ozznakom ?>.
Primjera raddi, unutar body tagova ubacite slijeddeu strukturru:
<?php
p
echo""PHP ispis: moja prva stranica";
?>

Snimite strranicu. Pokrrenite web browser.


b
U adresnu trak
ku napiite:
http://localhhost/proba1/pprimjer1.php
p i vaa prva stranica je pred vama!
ta se zaprravo dogodillo?
Kad god u bbrowseru zattraite straniccu ija adressa poinje saa http://localh
host (primjettite: nema ww
ww!) to
zapravo znaai da pokreete stranicu lokalno sa seervera na vaem raunalu
u. Ta adresa odgovara mapi www
unutar mapee AppServ (iili mapi htdo
ocs unutar maape xampp). Ostatak adreese je putanjaa do stranicee koju smo
napravili (/pproba1/primjjer1.php).
ta se dogodilo na serveeru?
Kad smo m
mi u browseruu zatraili priikaz te straniice, server je prepoznao da
d je rije o pphp stranici, djelove kojii
su isti HTM
ML i nalazee se izvan <??php i ?> taagova poslao
o je odmah browseru,
b
a oono unutar tih
t tagova jee
izvrio, nareedba echo znnai ispii, od
dnosno dodaj
aj HTML dok
kumentu.
Ako u svom
m web brow
wseru pogledate HTML
L kod (desn
ni klik > Vieew Source) vidjet ete da nema nii
traga PHP--u, tu je sam
mo isti HTM
ML.
Gornji prim
mjer nije jediini nain kako se moe koristiti PH
HP. Unutar navodnika
n
naaredbe echo mi moemoo
navesti i razzliite HTML
L tagove i njihove dodatnne argumentee kako bismo
o imali kontrrolu nad izgledom teksta..
Za ilustracijju malo emoo obogatiti na
n prvi primj
mjer i unutar tagova <?ph
hp i ?> dodatiti slijedeu naaredbu:
echo"<br>Ov
vo je link na stranice
s
kole: <a href=\" h
http://www.gimnazijabanja
aluka.org \"> link </a>";

Ovaj put sm
mo unutar naaredbe echo ubacili
u
i linkk. Primjetite znakove \ isspred navodnnika. Oni nam
m trebaju jerr
kau naredbbi echo da tuu nije kraj on
noga ta onaa treba ispisaati ve da on
na treba ispissati navodnike (sjetite see
kako se zaddaje link HTM
ML-om).
Ako bismo bili ekstrem
mni u takvoj upotrebi
u
PHP
P-a, tad bism
mo cijelu straanicu mogli staviti unutaar <?php i ?>
>
tagova i svee elemente sttranice ispisaati naredbom
m echo.
To je mogue, no najee nije ba praktino.
p
Nauili smaao kako naprraviti i kako spremiti
s
phpp stranicu.
Isto tako naauili smo kaako provjeritii ta smo to zzapravo naprravili uz pom
mo lokalno iinstaliranog web servera..
Jo jednnu ilustracijuu 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 korienje.
Uniforman je jer se svi podaci i rezultati operacija prikazuju u vidu tabele i omoguava interaktivno i
klasino programiranje.
Sve do verzije SQL:1999 ovaj jezik je bio neproceduralan1, odnosno njime se specificiralo TA, a ne i
KAKO neto treba uraditi. Novije verzije SQL-a imaju mogunosti proceduralnog jezika, narooto PL/SQL.
Kombinovanjem naredbi jezika tree generacije i SQL-a omoguava, sa jedne strane korienje
proceduralnih karakteristika jezika tree generacije (sekvenca, selekcija, iteracija, procedura, podprograma),
a sa druge strane pristup podacima u bazi podataka pomou SQL-a
Do sada su baze podataka bile koriene iz programskih jezika miksanjem naredbi programskog jezika i
upitnog jezika. I mi emo koristiti ovaj pristup koristei 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 poetku 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 istraivakog projekta pod istim nazivom.
Pojava komercijalnih relacionih sistema uveala je znaaj i ubrzala proces standardizacije relacionog upitnog jezika. Prva etapa tog
procesa zavrila 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.
Meutim, 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
ouvanje integriteta baze podataka i povezivanje sa klasinim programskim jezicima. Ta verzija SQL standarda poznata je pod
nazivom SQL-89.
1992. godine usvojena je sljedea bitna revizija standarda, poznata pod nazivom SQL-92 ili SQL-2, kojom je SQL zaokruen kao
programski jezik, a obim standarda uvean est puta u odnosu na polaznu verziju. Naredna verzija SQL standarda usvojena je 1999.
godine.
Iako su poetne verzije SQL-a bile prilino jednostavne, bliske korisniku i u velikoj mjeri deklarativne za SQL:1999 se moe rei da
je kompleksan, proceduralno/deklarativan jezik i da je oznaio prekretnicu i omoguio masovnu upotrebu SQL-a
Postoje razliite verzije SQL jezika Iako je SQL je ANSI (American National Standards Institute) standard..
SQL:2003
Standard SQL:2003 se popularno naziva standardom ispravljanja greaka standarda SQL:1999 (bugfix release - revizija standarda
SQL:1999), osim u domenu podrke XML-u. Uprkos tome, ovaj standard ima i niz novih rjeenja, a glavna su:

Novi tipovi podataka Uklonjeni su BIT i BIT VARYING tipovi zbog nedostatka podrke u implementacijama, a dodata
su tri nova tipa: BIGINT, MULTISET, XML.

Proirenja 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 auriranja 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 vie
dimenzija (npr.datum, mesto, kategorija) u jednom upitu.

Operator WINDOW omogucuje primenu agregatnih funkcija na "pokretni prozor" kroz kolekciju podataka.

Multimedija SQL Standard je proiren 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 podrku XML-u u bazama podataka. Preciznije, ISO/IEC 907514:2006 definie kako se SQL koristi zajedno sa XML-om.
Definie naine za importovanje i skladitenje XML podataka u SQL bazi podataka, kako se manipulie njima u bazi podataka i kako
se objavljuju (publikuju) XML podaci i konvencionalni SQL podaci u XML obliku.
SQL:2006 obezbjeuje mogunost integracije (u aplikaciji) SQL koda i XQuery, XML upitnog jezika (W3C), kao i

konkurentni pristup "obinim" SQL podacima i XML dokumentima.


Trenutno preivlaujua i vaea 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 utvreni slijed opisuje uzastopne
korake transformacije ulaznih podataka u traene rezultate; i odgovara moginosti formalzaciije i zapis algoritma

12

p
pproirenja. Da bi se povealaa
U SQL su ukkljueni konceppti objektne teehnologije, mehhanizam trigeraa, rekurzija i proceduralna
funkcionalnost jezika, u SQ
QL je uvedenaa proceduralna nadgradnja SQL-a,
S
koju ug
glavnom ine upravljake struktrure slinee
msih jezika. SQL
L-1999 standard
d definie vie naina koriennja SQL-a.
upravljakim sstrukturama klaasinih program
Dva osnovna naina su direektno (interak
ktivno) korieenje SQL-a i povezivanje
p
SQ
QL-a sa klasinim program
mskim jezicimaa
QL).
(ugraeni SQ
SQL jezici su uglavnom
u
u sklaadu s ANSI staandardom, svi imaju
i
slian sett
Bez obzira kojju verziju i disttribuciju SQL-aa koristil,i svi S
glavnih komanndi (kao to su SELECT, UPD
DATE, DELETE
E, INSERT, WH
HERE) i ponaaaju se na sliann nain.

Relacion
n algebra ii relacion
ni raun
Relaciona aalgebra
Relaciona aalgebra je familija
f
algebri sa dobroo zasnovano
om semantik
kom koja see koristi za modeliranjee
relacija (oobjekata) sm
mjetenih u relacionojj bazi pod
dataka i za
z definisannje upita nad njima..
Relacioni ooperatori: Codd je origin
nalno predloio 8 operato
ora: Restrikcciju (selekcijuu), Projekcijju, Proizvod,,
Uniju, Prjessek, Razliku,, (Prirodno) Spajanje,
S
Dijjeljenje;
Kasnije su dodati operratori: Renam
me, Semijoinn, Extend, Su
ummarize.
Dodatni op
peratori: RE
ENAME - pro
omjena nazivva relacije, SEMIJOIN
S
- Spajanje relaacija A i B projektovano
p
o
na atribute rrelacije A, EXTEND
E
- proiruje
p
relaaciju novim atributom,
a
SU
UMMARIZE
E - omoguaava sabiranjee
po kolonam
ma.
Minimalni skup operatora sadri: restrikciju, projekciju, proizvod, uniju,
u
razliku
ku.
Reelacioni opertori

13

Unija
a

Dijeljenje

Osobina daa su i argum


menti i rezu
ultat primjenne bilo kog relacionog operatora taakoe relacijje se nazivaa
relaciono zzatvorenje.
Ako su u lissti navedeni svi atributi relacije A tadda je projekciija identitet.
Svrha relacione algebre: pisanje relacionih iizraza koji se koriste zaa definisanjee prostora zaa dohvatanjee
podataka, ddefinisnje prostora za auriranje poddataka, defin
nisanje praviila integritetta, definisanjje izvedenihh
relacija, deffinisanje pravvila zatite; osnova
o
za op
ptimizaciju upita.
Relacioni rraun
Relacioni raaun je opissan, neproced
duralan jezikk, logiki ek
kvivalent relacione algebbre ako se posmatra
p
dioo
relacionog m
modela podaataka za obraadu podatakaa i zasnovan je
j na predikaatskom raunnu.
Postoje dvijje varijante:
rauun orijentisann ka torkamaa i
rauun orijentisann ka domenima - osnovaa za QBE.
Predikatski raun: Pred
dikat je istiniitosno vrjednnosna funkciija sa argumeentima, i kadda se argumeenti zamjenee
vrijednostim
ma funkcija daje
d izraz kojji se naziva ppredlog koji moe da bud
de taan ili nnetaan.
mjenljivih: promjenljiva
p
a torki ima oppseg iz skup
pa navedenih
h relacija i dooputene vrijjednosti kojee
Opseg prom
pripadaju toorkama iz tihh relacija, prromjenljiva domena imaa opseg iz sk
kupa naveden
enih domena i doputenee
vrijednosti kkoje pripadajju tim domen
nima.
Neka je x ppredikat. Taada se skup svih x takavv da je P taano za x ozznaava sa {{x | p(x)} i postoje dvaa
kvantifikatoora:
: 'zaa svaki',
: 'poostoji'.
mjenljive. Korienjem
K
promjenljivih
p
h torki traee se torke zaa
Relacioni rraun torki:: slobodne i vezane prom
koje je preddikat taan. Postoje
P
dva kvantifikatora
k
a:
FORAL
LL V (p),
EXIST
TS V (p).
Kvantifikaccija i rad sa slobodnim i vezanim
v
proomenljivim su
u u skladu saa pravilima ppredikatskog rauna.!
Relacioni rraun domena: opseg vaaenja promj
mjenljivih su domeni a nee relacije, moogue je deffinisati uslovv
pripadnosti..
Sintaksa ovvog rauna see u literaturi prikazuje
p
na razliite naine
RANGE OF
F <promenljiiva> IS <tabeele>
RETRIEVE
E <promenljiiva>.<imeatrributa>
[WHERE<uuslovni izrazz>]
14

ili
AR <promenlljiva> RANG
GES OVER <
<tabela>
RANGEVA
<promenljivva>.<imeatriibuta>
[WHERE<uuslovni izrazz>]
Uslov je taan ako postooji torka u reelaciji R takvva da je za sv
vaki konkretaan par poreenje
A=x tano
Na primjer,
KS INDEKS(200110456),
ISPIT {INDEK
ID_PREDMET
TA ID_PREDM
META(1001)}
ima vrijednostt tano akko postoji torka u isp
pitu koja ima vrrijednost 20110
0456 za atribut indeks
i
i 1001 zaa atribut id_preedmeta

Algebra i raaun su semaantiki ekviv


valentni. Nekki upitni jezicci su vie zassnovani na allgebri, a nekii na raunu SQL ima osobine i algeebre i raun
na.
Jezik je relaaciono komppletan ako je moan isto kkao i algebraa, tj. ako bilo
o koja relacijja predstavljiiva u algebrii
moe da se predstavi i u jeziku.
SQL je relaaciono komppletan jer po
ostoje SQL iizrazi za svaaki od 5 prim
mitivnih opeeratora relaciione algebree
(restrikciju, projekciju, proizvod,
p
un
niju, razliku)..

3VL logik
ka (trovallentna log
gika)
Zato nedoostajue vriijednosti? U svakodneevnoj praksii se esto jaavlja problem
m nedostatk
ka podataka::
...datum rooenja nepoznnat... ; ...izz izborne jeddinice XX nedostaju podaaci...
Oigledna jje potreba da
d se indika
ator o nedoostatku vrijeednosti uva
a u bazi, i dda se na od
dgovara-juii
nain vri oobrada takvvih podataka
a. Tako se ddolazi do vieevalentnih lo
ogika u relaciionom modeelu.
Codd je preedloio korienje 4-vallentne logikee jer postojee dvije vrste nedostajuihh vrijednostti: vrijednostt
nepoznata, vrijednost nij
ije primjenljiiva, vrijednoost ne postojii.
Oigledno esto postojji PROBLEMI SA NU
ULL-ama, i to problemi sa proirenj
njem operaciija relacionee
algebre na N
NULL-e:
Deffinisanje opeeracije selekccije: ako ispittujemo neku
u osobinu zap
pisa, kao Boddovi > 40, i za
z neki zapiss
Boddovi su NUL
LL, to da rad
dimo?

15

Deffinisanje presjeke i razlik


ke dviju relaacija: jesu li dva
d zapisa <Jovan,NULL
<
L> i <Jovan,NULL> istii
ili nne?
Doddatni problem
mi za SQL: da
d li tretirati NULL-e kao
o duplikate?
Da li da ih ukljuimo u rau
un (suma, srrednja vrijed
dnost, ...) i ak
ko da, kako?? Kako da see aritmetikee
opeeracije ponaaju kada je argument
a
NU
ULL?

Najei prristup prihvaaen i u prak


ksi je kori enje 'nedosttajue vrijednosti' (NU
ULL. Za proccjenu uslovaa
umjesto uoobiajene binarne-Bulo
b
ove (dvo-vrij
ijednosne) lo
ogike upotriijebiti trovallentnu (tro-v
vrijednosnu))
logiku odnoosno 3VL loggiku.
Kada nema NULL-a, usslovi se procjjenjuju kao iistina (true) ili
i neistina (ffalse), ali akoo NULL-e po
ostoje, uslovv
e se procjeenjivati i kao trea vrijedn
nost -nedefiinisano, ili nepoznato).
Ovo je idejja za provjerru uslova u WHERE kllauzuli SQL SELECT-a: Bie vraeeni jedino zaapisi gdje jee
rezultat provvjere uslova istina.
SQL pri primjeni WHE
ERE klauzule na tabelu eliminie sv
ve redove zaa koje se izraaz u WHER
RE ima izrazz
netano ili nnedefinisanoo. Test za nulll: IS [NOT] NULL.
3VL logikaa: tri vrijednoosti:
tanno,
netaano i
neppoznato.
Operatori:
I (A
AND),
ILI (OR), i
NE (NOT).
Ponekad (rjee) se korissti i notacija:
false=0, trrue=1, unk
known=1/2,
NOT(x)=1-x,
AND(x,y) = min(x,y),
OR(x,y) =max(x,y)

Baze i re
elacione b
baze osno
ovni term ini i pojm
movi
Ako ste prooitali (i djeelimino shvatili) predhoodno poglavllje daemo jo neke pojjmove za rad
d sa bazamaa
podataka.
Bazu podataaka je zbirk
ka informaciija koje se oorganizovan
ne u tabele i u druge vrsste objekata
a zbog tanoo
odreene naamjere kao tto je pretraiivanje,sortiraanje i obradaa podataka.
Fizika reprrezentacija baze
b
podatakaa se sastoji ood dviju ili viie datoteka na
n disku.
U logikom
m smislu bazaa podataka saastoji se od vveeg broja objekata-tabe
o
ela, indeksa,iitd.
Baza podattaka je skupp povezanih podataka kkoji se nalazze u nekom informacionnom sistemu
u,tj. u nekojj
organizacijii , i ona sadrri podatke koji
k se sastojje iz razliitiih objekata nekog
n
poslovvnog sistemaa (npr. raznee
usluge, poslovni partneeri i sl.). Pod
daci u bazi ppodataka slu
ue za jednu ili vie apliikacija, i nezavisni su o
programimaa u kojima see obrauju, a pristup njim
ma je kontrolisan.
Relacione bbaze podataka su danas najee koritene baze po
odataka.
Relaciona bbaza podatakka se sastoji od skupa raazliitih relaacija (tabela). Tabela odggovara pojm
mu relacije izz
standardnogg (opteg) rellacionog modela baza poodataka.
Entitet (Enntity) Svaku realnu injjenicu ili poojavu, bez obzira
o
na su
utinu nazivvamo entiteto
om. Entitetee
razlikujemo na osnovu osobina:
o
Atrib
buta.
ta je relaccija?
Entitet moemo definissati kao objeekat o kome elimo da saakupljamo in
nformacije, taada je relaciija opis vezee
izmeu dvaa ili vie entitteta.
Jedan red taabele predstaavlja jednu n--torku ili jeddnu pojavu reelacije, to od
dgovara jednnoj pojavi tip
pa entiteta.
Kolona u tooj tabeli ili poolje (field) od
dgovara jednnom atributu (osobini) tip
pa entiteta.
16

d-ova jedne ta
tabele i da see svako poljee
Definicija taabele se u krrajnjoj liniji i svodi na too da se definiie lista field
(field) okaraakterie nizoom osobina. Neke
N
od tih oosobina je neeophodno od
drediti, neke se mogu i p
preskoiti".
Kada se deffiniu sve tabbele na osnov
vu relacione eme, potreb
bno je jo usspostaviti i vveze (relation
nships) meuu
tabelama kooje su u vezzi. Peciznijee, naznaavaa se preko kojih
k
polja su
s tabele u vvezi, da se unutar bazee
podataka brrine i o integrritetu (tanossti) baze poddataka.
Baza podattaka (Databaase DB) Grup
pa tabela poddataka koje sadre
s
srodnee podatke.
DB se moee sastojati od samo jedne taabele (najee to nije sluaj).
Tabela (Table) Grupa slogova
s
podaataka. Svi sllogovi su isto
o organizovaane grupe
podataka - ppolja.
Slog (zapis)) (Record) Jeedinstveni zaapis (vrsta) u tabeli koji se
s sastoji od vie polja
sa podacimaa, u optem slluaju, razliitoga tipa.
Polje (Fieldd) Pojedinanni podatak - sttavka u sloguu.
Primjer: u teelefonskom im
meniku su etirii polja: prezim
me, ime, adresaa i telefonski brroj.

R
Relacioni model
Reelacija
Toorka
Atribut
Domen atributta
eema relacije
K
Kardinalnost
Prrimarni klju

Baza pod
dataka
Tabela
Vrsta (redd u tabeli)
Kolona
Tip podattka kolone skup
s
vaeih vrijednosti
v
(tippova)
Opis tabeele
broj torkii
atribut (ilii kombinacijaa atributa) kojaa jedinstveno identifikuje taabelu
ekvivvalencija: Reelacioni mod
del-Baza pod
dataka

Primjer kojii ilustruje ekkvivalencije iz


i gornje tabeele

Relacija ipaak nije isto tto i tabela (n


na kakve smoo mi navikli) jer
j tabela moe da sadri duplirane redove
r
dok
relacija ne m
moe, redovii u tabeli su ureeni
u
u reddosljedu od vrha
v
ka dnu, dok za relacciju to ne vai, kolone u
tabeli su ureeene u redoosljedu slijevva udesno, dook za relaciju
u to ne vai.

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 moe identfiikovati svaki red se naziva primarni klju.
Referencijali integritet je odnos izmeu primarnog kljua (npr. kupca) i vanjskog ili stranog kljua (npr.
ifra dobavljaa).

Praktini primjeri
Zadatak1: Izbor relacija

Ako je neophodno projektovati bazu podataka koja se odnosi na preduzee, prepoznati entitete
i njihova svojstva, koje ete predstaviti relacijama u relacionom modelu, odnosno tabelama u
bazi podataka.
Rjeenje:
Pretpostavimo da preduzee ima vie radnika, i za svakog od njih treba uvati informacije: ime,
matini broj, struna sprema, datum roenja, pol, plata, adresa. Neka je preduzee organizovano u
sektore (sektor ima naziv, broj).
Podaci o radnicima preduzea se mogu predstavljaju relacijom/tabelom RADNIK sa atributima
LIME (lino ime), SSL (srednje slovo), PREZIME, MBR (matini broj), DATRODJ (datum
roenja), POL, PLATA i ADRESA. Nie 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

PLATA
17000
32000
27000
43000

ADRESA
Nika 4
Humska 2
Savska 34
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.
Rjeenje : Domeni nekih atributa relacije RADNIK su prikazani u sljedeoj tabeli:
Atribut
LIME
PREZIME
MBR

Domen
Imena Osoba
Prezime Osoba
Maticni Broj

DATRODJ

Datum Rodjenja

POL
PLATA

Pol
PlataRadnika

Znaenje
Skup moguih imena osoba
Skup moguih prezimena osoba
Skup mogunih matinih brojeva
radnika
Mogue vrijednosti za datume roenja
zaposlenih u preduzeu
Pol radnika
Mogue vrednosti plata radnika

ADRESA

AdresaRadnika

Mogue adrese radnika preduzea


18

Definicija domena
Niz karaktera, duine do 15.
Niz karaktera, duine 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 republiki lini 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 uobiajeno ne nalazi
If...Then...Else konstrukcija za ispitivanje uslova, a nema ni konstrukciju za logiku strukturu petlje
Do...While ili For...Next.
SQL je uglavnom zasnovan na relacionom raunu, s time da je matematika notacija zamijenjena
naredbama (kljunim-rezervisanim rijeima) nalik na govorni engleski jezik.
Upit se postavlja fleksibilnom naredbom SELECT. Rezultat upita se shvata kao nova privremena relacija,
izvedena iz stalnih.
Najee se SQL razvrstava na tri kategorije naredbi:
1. Naredbe za definisanje podataka (Data Definition Statements) omoguavaju
definisanje resursa i logikog modela relacione baze podataka:
CREATE TABLE kreiranje fizike tabele baze podataka,
CREATE VIEW kreiranje virtuelne imenovane tabele, pogled,
CREATE INDEX kreiranje indeksa nad jednom ili vie 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) omoguavaju
auriranje podataka u irem smislu (izmjenu, dodavanje i brisanje) i izvjetavanje
(pribavljanje novih informacija) iz baze podataka:
SELECT pristup podacima i prikaz sadraja baze podataka,
INSERT unoenje 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 inae svi podaci biti izbrisani!
Primjer:
DELETE FROM artikli WHERE id=20;

UPDATE auriranje, 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 bezbjednou podataka (Data Control Functions)


omoguavaju oporavak, konkurentnost, sigurnost i integritet relacione baze podataka:
GRANT dodjela prava korienja tabele drugim korisnicima od strane vlasnika tabele, (sva
prava ALL, svim korisnicima PUBLIC)
REVOKE oduzimanje prava korienja tabele drugim korisnicima,
BEGIN TRANSACTION poetak transakcije koji se moe zavriti jednom od dvije naredne
naredbe:
COMMIT WORK prenos dejstva transakcije na bazu podataka,
ROLLBACK WORK ponitavanje dejstva transakcije na bazu podataka.
SQL po standardu 1999 razvrstava SQL naredbe u sljedeih 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 auriranje podataka baze (SELECT, INSERT, UPDATE,
DELETE)

19

3.
4.
5.
6.
7.

Naredbe za transakcije (SQL-transaction statements) - za startovanje, zavravanje i postavljanje parametara za transakcije


(COMMIT, ROLLBACK)
Naredbe za kontrolu (SQL-contol statements), koje se koriste za kontrolu izvravanja sekvence SQL naredbi (CALL,
RETURN)
Naredbe za konekcije (SQL-connection statements) - za uspostavljanje i prekidanje SQL konekcije (CONNECT,
DISCONNECT)
Naredbe za sesije (SQL-session statements) - za postavljanje default vrijednosti i drugih parametara SQL sesije (SET)
Naredbe za dijagnostiku (SQL-diagnostic statements) - signalizuju izuzetke u SQL rutinama (GET DIAGNOSTIC)

Sintaksa SQL naredbi


Upoznavanje sa sintaksom i sematikom2 pojedinog programskog jezika znai ustvari uenje pisanja
programskog koda-programiranja. Ovdje emo dati samo uvodne napomene kako da piete programske
naredbe i promjenjive.
SQL spada u takozvane no-case-sensitive programske pakete, to znai da se naredbe, kljune rijei, imena
objekata i varijabli mogu pisati i malim i velikim slovima, a da sistem pri tome ne pravi razliku meu njima.
Meutim, i pored toga, zbog preglednosti napisanog programa, preporuljivo je dosljedno koristiti mala i
velika slova.
SQL naredbe po pravilu se zavravaju interpunkcijskim znakom (;)
Izmeu bilo koje rijei se moe prei u novi red.
SQL nije case sensitive, ali imena tabela jesu!

Ako neka tabela sadri ime neke kljune rijei, potrebno ju je oznaiti sa
specijalnim navodnikom: ` . (AltGr+7 na tastaturi) . Jednostavnosti radi,
te navodnike, odnosno takav sadraj 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
omoguavaju definisanje, korienje i zatitu podataka.
Formalno SQL jezik je podijeljen na nekoliko jezikih elemenata odnosno kategorija naredbi:
1. Upiti (Queries), koji vraaju podatke na osnovu odreenih kriterijuma. Ovo je najvaniji element
SQL.
2. Klauzule (Clauses), koje su sastavni dijelovi izjava i upita. (U nekim sluajevima 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 ograniavanje efekata izjava i upita, ili za promene toka
programa.
5. Izjave (Statements), koje mogu da kontroliu transakcije, protok programa, veza, ili dijagnostiku.
Sve ove kategorije emo analizirati u poglavlju SQL upiti, jer korienje klauzula, izjava i predikata
omoguava kreiranje i realizaciju upita.

semantikaskuppravilakojadajuodgovornapitanjetoznainekanaredba
sintaksapravilakojaodreujupripadaliskupsimbolajezikuiline

20

Strukturra SQLa
Definisanje strukture SQ
QL znai deffinisanje:
Dom
mena
Indeksa
Kattaloga
em
ma
Tabbela
Definisanje strukture znnai da smo
o ranije kreirrali model baze
b
podatakka koji nam je to omogu
uio. A opett
model baze podataka nastao je na osnovu anallize problema
a kojeg elim
mo rjeiti uppotrebom bazze podataka.
to smo obaavili prije neggo smo pristu
upili izradi m
modela baze.

Znai prije nego to prristupimo deffinisanju strrukture baze neophodno je uraditi annalizu i napraviti modell
baze, potom
m emo definiisati elementte SQL-a. An
naliza i izrad
da modela su
u temelj SQL
L-a.

Domen
Domeni se definiu kaao skupovi iz
i kojih atrib
buti relacijee uzimaju sv
voje vrijednnosti. Domen
n je u SQL-uu
prost, korisnniki definisan imenovan
n objekat.
Uobiajeno je da se dom
meni podijelee na:
-Predefinissane domenee, domeni ko
oji postoje u jjezicima bazza podataka.
-Semantik
ke domene, koje korisn
nik definie nad predefin
nisanim ili prethodno
p
ddefinisanim semantikim
s
m
domenima uugraujui u definiciju neko ogranieenje i dajui im na taj nnain odreenno znaenje zbog
z
ega see
i nazivaju semantiki. Semantiki
S
domeni se jo nazivaju i apstraktnim
a
ili
i korisnikii definisanim
m domenima..
Semantiki domeni su apstraktni
a
tipovi podatakaa, odnosno objekti koje definie
d
korissnik.
Mada je iz ddefinicije viddljivo da se pod
p domenom
m podrazum
mjeva
neto iri poojam, pojedn
nostavljeno emo smatraati da je:
Doomen = tip po
odataka

SQL podrava osam predefinisan


nih domenaa; osam tipo
ova podatakaa je moguee koristiti kaao unaprijedd
definisane u
ugraene - sistemski prredefinisane,, a po potreebi se iz njih
h mogu izveesti-definisatti korisnikii
definisan (S
SRBR, PRBR
R, ...i neki drrugi). Ugraeni SQL dom
meni su:
1. brojjevi (numberrs),
2. nizoove karakteraa (character strings),
3. nizoove bitova (bbit strings),
4. datuumi (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

BIT

Tani

BINARY
LARGE
OBJECT
(BLOB)

TIMESTAMP
TIME WITH
TIMEZONE
TIMESTAMP
WITH TIME
ZONE

INTERVAL
MOUNTH
INTERVAL
YEAR TO
MOUNTH
INTERVAL
DAY

INTERVAL
DanDAY TO
vreme(neki
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 <naziv domena> [AS] <predefinisani tip>
[DEFAULT <Vrijednost>]
[[CONSTRAINT <naziv ogranienja>] CHECK (<ogranienje>)] ..

Definicija domena se mijenja naredbom ALTER :


ALTER DOMAIN <naziv domena>
SET DEFAULT <Vrijednost> |
DROP DEFAULT |
ADD [CONSTRAINT <naziv ogranienja>] CHECK (<ogranienje>) |
DROP CONSTRAINT <naziv ogranienja>

Domen se unitava naredbom:


DROP DOMAIN <naziv domena>

22

Intervalni tipovi

DOUBLE
Priblini
PRECISION

CHARACTER
LARGE
OBJECT(CHAR
LARGE OBJECT,
CLOB)

BIT
VARYING

TIME
Datumski tipovi

REAL

Binarni tipovi

DECIMAL
(DEC)

Tekstualni tipovi

Numeriki tipovi

NUMERIC

CHARACTER
VARYING
(CHAR VARING,
VARCHAR)

Godinamesec

DATE

Indeksi
Indeksi su strukture podataka koje olakavaju 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 vri 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 moe sadrati jednu ili vie tabela, a svaka tabela moe pripadati logiki
tano jednoj emi.
Svaki objekat (tabela, pogled, itd.) pripada tano jednoj emi. Pod pripadnou se ne podrazumjeva fizika
pripadnost, ve hijerarhijska veza u kojoj, na primjer, ema sadri nula ili vie tabela, a svaka tabela logiki
pripada tano jednoj emi.
ema se moe pretstaviti dijagramima relacija Ali ema se moe pretstaviti i u tekstualnom obliku na
entiteta:
sledei nain:
Kupci (BrojKupaca, Ime, Adresa, Grad)
Porudbine (BrojPorudbine, BrojKupca, Iznos, Datum)

Primarni kljuevi su na primjer boldovani a spoljni kljuevi


na primjer podvueni.

ema se kreira naredbom:


CREATE SHEMA <naziv eme>

Izbacivanje eme moe 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, sadri i metapodatke, odnosno tzv Rjecnik podataka (Data
Dictionary, Data Directory, Catalog). Katalog baze podataka opisuje posmatranu bazu podataka
(strukturu baze, pravila ouvanja integriteta podataka, prava korienja i slino i moemo ga
shvatiti da je "baza podataka o bazi podataka".
23

Katalog je kolekcija ema. U katalogu postoji i informaciona ema (INFORMATION_SCHEME), katalog u


uem smislu rijei, u kojoj se daju informacije o svim emama u katalogu.
Svaki katalog sadri emu sa nazivom INFORMATION_SCHEMA, koja predstavlja rjenik podataka. Nju
ini skup pogleda, odnosno sistemskih tabela, koje sadre sve bitne informacije o SQL okruenju.
Sadraj sistemskih tabela se automatski odrava.
U SQL standardu ne postoje naredbe za kreiranje i unitavanje kataloga. Nain njihovog kreiranja i
unitavanja je implementaciono-definisan (implementation-defined), odnosno preputen je vlasnicima
softverskih proizvoda koji implementiraju SQL okruenje.
Pun naziv objekata eme ima tri komponente, razdvojene takama: naziv kataloga, naziv eme i naziv
objekta. Ako je posmatrani objekat tabela, tada se njen pun naziv specificira na sledei nain:
<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>-- djelimino kvalifikovan naziv
FROM <naziv kataloga>.<naziv seme>.<naziv tabele>-- potpuno kvalifikovan naziv model objektiveze za relacioni katalog:
Klaster je kolekcija kataloga.

Tabele
Tabele predstavljaju dvodimenzionalne matrice iji redovi predstavljaju naziv i svojstvo objekata smjetenog
u tabelu, a kolone objekata izraena odgovarajuim 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 moe uneti u tabelu ili izbrisati iz nje.
U SQL-u koriste se:
1. Bazna tabela - vrsta tabele za uvanje svih SQL podaka. moe 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], . .) ;

Podacikojiseuvajuinakonprestankaradaodreenogprogramakomepripadajuinazivajuseperzistentnipodaci

24

2.

Izvedena tabela - predstavlja rezultat izvravanja upita.

3.

Tabela pogleda - predstavlja rezultat poziva imenovanog upita (pogleda).

Kasnije u sklopu MySQL vie 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),
ime NVARCHAR(15) NOT NULL,
prezime NVARCHAR(15) NOT NULL,
ulica NVARCHAR(25),
mjesto NVARCHAR(15) DEFAULT Banja Luka
PRIMARY KEY (maticni broj)
);

CREATE TABLE grad


(
pbr SMALLINT,
naziv VARCHAR(50),
CONSTRAINT grad_pk PRIMARY KEY(pbr)
);

Izmjena definicije tabele


Dodavanje nove kolone
ALTER TABLE <naziv tabele>
[ADD COLUMN] <definicija kolone> ;
Izmena postojee 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 ogranienja na Vrijednosti
ALTER TABLE <naziv tabele>
ADD [CONSTRAINT <naziv ogranienja> ] <ogranienje tabele> |
DROP CONSTRAINT <naziv ogranienja> ;

Izbacivanje tabele
Brisanje sadraja tabele
DELETE TABLE <naziv tabele>;
Brisanje tabele i njenog sadraja
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 vie ne postoji.





Funkcije
SQL podrava rad sa funkcijama. Daemo najeu podjelu SQLfunkcija po kategorijama funkcija:
1. Aritmetike funkcije,
2. Znakovne funkcije,
3. Agregatne funkcije

25

Aritmetik
ke (matema
atike) funk
kcije
Koriste se zza realizacijuu standardnih
h matematikkih operacija nad numerikim tipom ppodataka.

ECT i WHER
RE klauzulam
ma. Na taj nain
n
se kaoo
SQL dozvooljava korienje matemaatikih funkccija u SELE
rezultat preetraivanja mogu
m
prikazzati rezultati izraunavan
nja nekog matematikog
m
g izraza. Kasnije emoo
detaljno obrraditi Select, pa zasad sam
mo pogledajtte, a kasnije detaljno anaalizirajte prim
mjere koji slijjede:
Primjer 1.
Izlazz:
SQL> sele
ect proizvod_id,
round(min_cijena,0))
na
from cijen
where kataloska_cijena>5;

PRO
OIZVOD_ID ROUND(MIIN_CIJENA
A,0)
------------ -----------------100890 46
100890 41
104352 38
104352 41

Primjer 2.
SQL> sele
ect proizvod_id,
5*exp(1+c
cos(min_cijjena/3)) Fu
unkcija
from cijen
na
where kataloska_cijena>50;

Izlazz:
PRO
OIZVOD_ID FUNKCIJA
------------ --------100890 5.1469
974
969
100890 24.639
4397
104352 36.924
2254
104352 22.672

26

Funkcije za rad sa tekstualnim podatacima znakovne funkcije


Koriste se pri radu sa stringovima -tekstualnim tipom podataka.
OPIS

Funkcija

LEFT(<string>,X)
RIGHT(<string>,X)
UPPER(<string>)
LOWER(<string>)
INITCAP(<string>)
LENGTH(<string>)
<string>||<string>
LPAD(<string>,X,'*')
RPAD(<string>,X,'*')
SUBSTR(<string>,X,Y)
NVL(<kolona>,<vrijednost>)

Kao rezultat daje X najljevijih znakova stringa.


Kao rezultat daje X najdesnijih znakova stringa.
Pretvara sadraj cijelog stringa u velika slova.
Pretvara sadraj cijelog stringa u mala slova.
Pretvara sadraj stringa tako da je svaka rije sa poetnim 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 duine X znakova.
Dodaje stringu sa desne strane onoliko znakova * (ili znak naveden unutar
apostrofa) koliko je potrebno da bi se dobio string duine X znakova.
Izdvaja Y znakova iz stringa poevi od pozicije X.
Zamjenjuje sve vrijednosti NULL u koloni <kolona> vrijednostima
<vrijednost

Funkcije agregacije
Kao posebnu kategoriju obino se izdvajaju funkcije koje obavljaju agregaciju, mada se one mogu shvatiti i
kao kombinacija znakovnih i matematikih funkcija. Funkcije agregacije su dobile naziv po tome to vre
agregaciju rezultata upita. Korienje ovih funkcija je jednostavno, poto se navode u listi kolona SELECT
klauzule koje se prikazuju.
U najosnovnijem obliku agregatne funkcije vraati e skalarnu vrijednost, a sintaksa je sljedea:
SELECT AgregatnaFunkcija(atribut) FROM tabela

Korienje ovih funkcija je jednostavno, poto se navode u listi kolona SELECT klauzule koje se prikazuju.
Daemo tabelarni pregled najee korienih:
Funkcija
Opis-znaenje
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 obeleja
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
vraa godinu iz datuma

Daemo dva primjera za ilustraciju funkcija agregacije (sa istom primjedbom uz mat. f-je; postae jasnije
nakon analize Select upita)
Pr. 1. Napii upit koji odreuje maksimalnu, minimalnu, prosenu 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. Pomou funkcije COUNT odredi broj vrsta u rezultujuoj tabeli.


SELECT COUNT(*) AS PlataSaBonusom
FROM RADNIK;

27

SQL upitti naredbe upita


Osnova SQL
L-a je upit.
Realizuje see kao blok obblika:
CT < lista atributa>
a
SELEC
FROM
M < lista rellacija>
WHER
RE < kvaliffikacioni izraz>

Priimjer primjenne Select upiita


Naredba uppita SELECT
T je jedna od
d najkompleeksnijih nared
dbi SQL pro
ogramskog jeezika i sadrri vei brojj
kljunih rijjei klauzulaa:
1. SEL
LECT - defiinie listu kolona koje e biti ukljuen
ne u rezultujuu tabelu
2. FROM - definnie tabele izz kojih se prribavljaju po
odaci za pottrebe generissanja rezultu
ujue tabele..
Klaauzula FROM
M moe da ukljui
u
jedn
nu ili vie op
pcionih JOIN
N klauzula zza povezivan
nje tabela naa
osnnovu kriterijuuma zadatih od
o strane korrisnika.
3. WH
HERE - definnie predikatt na osnovu kkoga se ograaniava broj vrsta
v
u rezulttujuoj tabelli.
Klauzule SE
ELECT i FR
ROM su obav
vezne, a WHE
ERE nije.
Klauzula S
SELECT
k
e biti ukljuene u rezultujuu
u tabelu. Liistom atributta zadaje see
SELECT - definie lisstu kolona koje
operacija PR
ROJEKCIJE
E.
Klauzula SE
ELECT speecificira kolo
one koje trebba ukljuiti u rezultujuu tabelu. M
Mogu se korisstiti sljedeee
opcije:
AL
LL - u rezultujuoj tabelli prikazuju sse sve vrste koje
k zadovoljjavaju naveddeni predikatt
DIISTINCT - iz rezultujue tabele izbaacuju se dupllikati vrsta
* - rezultujuaa tabela uklju
uuje sve kollone tabele illi tabela iz ko
ojih se pribavvljaju podacii
taabela.* - rezuultujua tabela ukljuuje sve kolone specificirane
s
tabele
izrraz - ime koolone ili funk
kcije nad koloonama koja e
biti ukljuena u rezultuujuu tabelu
AS pseudonim
m - novo imee kolone ili fu
funkcije nad kolonama ko
oje im se doddeljuje u rezu
ultujuoj
tabbeli

Klauzula F
FROM
FROM - deefinie tabelee iz kojih se pribavljaju
p
ppodaci za pottrebe generisanja rezultujjue tabele. Klauzula
K
FROM moe da ukljuii jednu ili vie opcionih JJOIN klauzu
ula za poveziivanje tabelaa na osnovu kriterijuma
k
zadatih od sstrane korisnnika
Klauzula FR
ROM specifficira tabele iz
i kojih se prribavljaju podaci. Ukolik
ko se navede vie tabela potrebno
p
je
specificiratii nain spajannja tabela
Kvalifikacioonim izrazom
m zadaju se uslovi
u
selekccije i spajanjaa, odnosno isskazi slini isskazima u reelacionom
raunu.

28

Primjer SE
ELECT / FRO
OM upita
Najjednnostavniji upiit bez selekcij
ije izdvaja saamo kolone...ostavlja onee koje su navvedene, a izba
acuje ostale.
Analiziraem
mo tabelu kooja sadri jed
dinstveni mat
atini broj graaana, imenaa, prezimenaa i adrese zap
poslenih:

mo da hoem
mo da vidite adrese svih zzaposlenih. Koristimo
K
naredbu SELE
ECT:
Pretpostavim
SEL
LECT Ime, Prezime, Adresa, Grad
d, Republik
ka
FRO
OM TabelaA
AdresaRadn
nika;

Rezultat ovoog upita u baazu podatakaa je

Da objasnim
mo sada ta ste
s upravo uradili:
u
trailii ste sve pod
datke u tabeli TabelaAdreesaRadnika preciznije,,
traili ste kkolone pod nazivom
n
Imee, Prezime, A
Adresa, Grad
d, Republikaa. Obratite paanju da imeena kolona i
tabela ne saadre razmaake ona see moraju navvesti kao jed
dna rije, kao
o i da se narredba zavraava takom i
zarezom (;).
Opti oblik naredbe SEL
LECT kojom
m se dobijaju svi redovi u tabeli je:
e, ImeKolone, ...
SELECT ImeKolone
FROM ImeTabele;
mena kolona, koristite:
Da biste dobbili sve kolone neke tabeele bez navoenja svih im
SELECT * FROM Im
meTabele;

Klauzula W
WHERE
WHERE - definie preedikat na osn
novu koga see ograniavaa broj vrsta u rezultujuoj
oj tabeli. Ovaa klauzula izz
rezultata eliiminie sve vrste
v
za koje specificiranii predikat ne vraa vrijed
dnost TRUE..
Klauzula W
WHERE speccificira uslov
v na osnovu kkoga se kreirra rezultujua tabela. U rrezultujuu tabelu
t
e bitii
ukljuene saamo one vrstte-kolone, ko
oje zadovoljaavaju specifiicirani uslov. U uslovu see mogu javitii:
x Relacioni operatori
x Logiki opeeratori
x Operator BE
ETWEEN
x Operator IN
N
x Operator LIIKE
x Operator IS
S NULL

29

Relacioni o
operatori
Klauzula W
WHERE SQL
L podrava eest relacionihh operatora koji
k imaju sleedee znaenj
nje:
Veee od
Jeednako
=
>
Maanje ili jednaako od
(
<> Nije jednako (razliito)
<=
Veee ili jednakko od
M
Manje
od
<
>=

Primjeri je
ednostavne
e uslovne se
elekcije (SE
ELECT/FRO
OM/WHERE)
Upite emo postavljati za
z sljedeu taabelu:

Ukoliko ellite da dobijeete ID brojev


ve onih zaposslenih koji zaarauju preko
o 50.000, kooristite sljedeu naredbu:
SELECT ID
DRADNIKA
A
FROM TAB
BELAPRIMA
ANJARADN
NIKA
WHERE PL
LATA >= 500000;
Obratite panju da se kooristi znak (reelacione opeeratore) >= (vee
(
ili jedn
nako), poto ssmo eljeli da
d izdvojimo
one zaposleene koji zarauju vie od 50,000, ili jeednako 50,00
00, i to prikaazano zajednoo.
Kao rezultaat dobijamo:
Opis klauzuule WHERE,, odnosno deo PLATA >== 50000, nazziva se uslovv
(operacija kkoja kao rezu
ultat daje vrednost True (ttano) ili Fallse
(netano)).

Isti tip operracije moe se


s primeniti na
n tekstualnee kolone:
SEL
LECT IDRA
ADNIKA
FROM TABELAPRI
T
MANJARAD
DNIKA
WHERE PO
OLOAJ = 'rrukovodilac
c';

Ova naredba prikazuje ID


I brojeve sv
vih rukovodiilaca.
Generalno, u sluaju tekkstualnih kolona, koristitee operatore jednako ili raazliito, i obaavezno cijeli tekst koji
se pojavljuje u naredbi navedite
n
unu
utar apostrofaa (').
Vano! Funnkcije agreggacije nije mogue
m
koriistiti u WHERE klauzu
uli. To je poosljedica in
njenice da see
rezultat fuunkcija agreggacija izrau
unava nakon to se odreede vrste kojje ulaze u saastav rezultu
ujue tabele,,
odnosno nakkon obrade predikta
p
koji je zadata u W
WHERE klaauzuli.
Pogledajte S
SQL upit kojji se NE MO
OE IZVRIT
TI i koji e GENERISAT
G
TI GREKU
U:
SEL
LECT Ime, Prezime, Pllata
R
FROM RADNIK
WHER
RE Plata > AVG(Plata
A
)

30

Klauzula ORDER BY
ORDER BY - koristi se za sortiranje rezultujue tabele. Korisnici specificiraju kolone po kojima se vri
sortiranje kao i smjer sortiranja.
Klauzula ORDER BY specificira redosljed prikazivanja vrste rezultujue tabele, sortiranjem po vrijednosti
nekih kolona u rastui (ASC) (predefinisana vrijednost) ili opadajui redosljed (DESC).
Ukoliko klauzula ODER BY nije navedena vrste u rezultujuoj tabeli su poreane po sluajnom principu i
ne postoji nikakva garancija da e isti upit uvijek generisati rezultujuu tabelu ije su vrste poreane na isti
nain.
Primjer pokazuje SQL upit koji prikazuje podatke o radnicima i sortira ih prema prezimenu u opadajuem i
rastuem redosljedu.
SELECT *
FROM RADNIK
ORDER BY Prezime;

Klauzula GROUP BY
Grupisanje se obavlja prema jednom ili vie atributa iz relacije (ili vie relacija ukoliko su navedene u
FROM clause). GROUP BY clause sadri popis atributa ili izraza prema kojima se obavlja grupisanje.
GROUP BY - grupie vrste koje u odreenim kolonama imaju identine 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 - definie predikat na osnovu koga se elimiu vrste nakon to je klauzula GROUP BY
primjenjena na rezultujuu tabelu.
Dok se uz pomo WHERE clause izdvajaju one n-torke koje e formirati grupe definisane u GROUP BY
clause, HAVING clause slui 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 poloenih ispita, ali samo onih predmeta za koje je poloeno vie od dva
ispita.
SELECT sifPred, COUNT(*) FROM ispit
WHERE ispit.ocjena > 1
GROUP BY sifPred
HAVING COUNT(*) > 2

31

Slika pokazujee povezanostt WHERE,


GR
ROUP BY i HAVING diijela SELECT
naaredbe
SE
ELECT sifPrred, COUNT
T(*)
FR
ROM ispit
WHERE
W
ispit. ocjena > 1
GR
ROUP BY siifPred
HA
AVING COU
UNT(*) > 2

U HAVING ddijelu nared


dbe dozvoljeeno
je korstiti usloove sa podu
upitima na isti
i
naain kao too se
ko
oriste u WH
HERE clausee.

WHERE dioo naredbe oddreuje koje n-torke e foormirati grup


pe (samo poloeni ispiti)..
GROUP BY
Y lista odredduje strukturu
u grupa tj. ppo kojim atriibutima se ob
bavlja grupissanje n-torkii (sve ntorkee
koje imaju jjednaku ifruu predmeta ulaze
u
u jednuu grupu).
HAVING ddio naredbe odreuje
o
kojee od nastalih grupa ce bitti prihvacene kao rezultatt (samo one grupe
g
u
kojima je brroj ntorki, tj. COUNT(*) veci od dvaa). Ispisuje see po jedan zaapis za svakuu grupu koja zadovoljava
taj uslov.

peratori
Logiki op
SQL omogguava korienje stand
dardnih logikih operato
ore AND, OR
O i NOT
T, ali i opeeratore IN i
BETWEEN
N koji om
moguavaju jednostavnijje korienjje prethodn
no navedeniih operatoraa u nekim
m
sluajevimaa.
Prioritet loggikih operattora je sledei:
1. NO
OT
2. AN
ND
3. OR
R
Logiki opeeratori AND i OR se koriiste na standdardni nain. Meutim, ko
od SQL-a, loogiki operattor negacije
NOT se navvodi na poeetku logikog
g izraza, a nee ispred operaatora poreenja.
Na primjerr, NOT A = B je validni WHERE u slov, ali A NOT
N
= B nije.
Primjer1

P
Primjer2

SELECT *
FROM RAD
DNIK
WHERE Prezime = "Petrovi";

S
SELECT *
F
FROM RAD
DNIK
W
WHERE Prrezime = "P
Petrovi" AN
ND Plata >= 40000;

Primjer3
SELECT *
DNIK
FROM RAD
WHERE Prezime = "Petrovi" OR
O Prezime
e = "Jovano
ovi";

32

Operator IN
Operator IN zamenjuje viestruku upotrebu operatora OR i = . Operator NOT IN prikazuje sve vrste osim
onih odreenih IN listom.
Primjer: Korienjem 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 viestruku upotrebu operatora AND i =.
Ovaj operator omoguava 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 (ukljuujui i
granice opsega) moemo iskoristiti operator BETWEEN
SELECT *
FROM RADNIK
WHERE Plata BETWEEN 30000 AND 40000;

ili bez korienja BETWEEN


SELECT *
FROM RADNIK
WHERE Plata>=30000 AND Plata<=40000;

Operator LIKE
Operator LIKE omoguava poreenje vrijednosti kolone sa zadatim ablonom.
Kod definisanja ablona koristi se procenat (%) i znak pitanja (?). Procenat (%) predstavlja bilo koji mogui
znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?) zamenjuje samo jedan znak.
Primjer:
SELECT *
FROM RADNIK
WHERE Prezime LIKE "J*";

Za nalaenje svih radnika koji sadre slovo "J" negdje u prezimenu mogao bi se koristiti ablon "*J*".
Obratite panju da se ne pravi razlika izmeu malih i velikih slova.
Operator NOT LIKE prikazuje sve vrste koje ne odgovaraju prethodno datom opisu, tj. za prethodni sluaj,
sve radnike koji nemaju slovo "J" u svom prezimenu.

Operator IS NULL
Operator IS NULL se koristi za poreenje sa NULL vrijednostima. Treba voditi rauna da se na NULL
vrijednosti ne moe primjeniti ni jedan relacioni operator.
Moe 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 roenja
odnosno datum roenja ima NULL vrijednost.
SELECT *
FROM RADNIK
WHERE DatRodj IS NULL;

Aritmetike funkcije u Select u Where klauzulama


SQL dozvoljava korienje matematikih funkcija u SELECT i WHERE klauzulama. Na taj nain se kao
rezultat pretraivanja mogu prikazati rezultati izraunavanja nekog matematikog izraza.
Aritmetike 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 omoguuje spajanje dva znakovna niza.
Primjer
SELECT Ime & " " & SSlovo & " " & Prezime AS [Ime i prezime radnika]
FROM RADNIK;
U ovom primjeru izvrili smo spajenje imena i prezimena zaposlenih. Da ne bi dolo do spajanja rijei
ubacili smo jedan prazan znak - blanko ('' '') izmeu rijei.

34

Spojevi (Joins)
Jedna od najveih prednosti jezika SQL je njegova mogunost da spaja i manipulie podacima koji se nalaze
u vie razliitih izvornih tabela. U velikoj veini sluajeva upiti se ne izvravaju samo nad jednom tabelom,
ve nad vie njih koje je potrebno na neki od naina, spojiti.
Da nema ove mogunosti, trebali bi smo da sve mogue podatke stavimo u jednu jedinu tabelu. i tako bismo
ostali bez relacionog modela.
Pri objanjenju upita sreli smo se sa potrebom spajanje dve ili vie tabela. SQL to realizuje sa naredbom
JOIN. Najee se koristi kao podupit u izrazu FROM.
Spajanje tabela se obino vri na osnovu kolona koje sadre isti tip podataka. Najee spajanje je izmeu
primarnog kljua jedne tabeli i stranog kljua druge tabele tj. tzv. "foreign relationship" izmeu tabla.

Postoje etiri tipa JOIN operacije, ali je tzv. unutranje spajanje ili "INNER JOIN" najee korieno.
INNER JOIN - spajanje dvije tabele koje imaju zajednike vrijednosti u nekim od svojih kolona.
Primjera radi, moemo 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 sledei primjer:
SELECT Korisnici. ImeKompanije, Korisnici. BrojTelefona, Narudzbe. DatumNarudzbe
FROM Korisnici LEFT JOIN Narudzbe
ON Customers. KorisnikID = Narudzbe. KorisnikID
U ovom primjeru rezultat pretraivanja e sadrati sve korisnike, bez obzira da li imaju nula, jednu ili vise
narudbi. Korisnici sa vise narudbi bie prikazani u rezultujuoj tabeli onoliko puta koliko narudbi imaju.
CROSS JOIN je takoe poznato kao Kartazijanski-Dekartov proizvod. Rezultat koji dobijemo je
kombinacija svih vrsta jedne tabele sa svim vrstama druge tabele.
Primjera radi, moemo 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 sluaj kada spajamo kolonu samu sa sobom. Recimo da imamo tabelu "Radnici" koja ima
klju "RadnikID". elimo da napravimo listu svih radnika, sa imenima njihovih menadera. Naravno,
menader je takoe 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 ogranienje integriteta kolone


Unutar SQL-a postoje mnogobrojna ogranienja za ogranienje integriteta a za poetak emo navesti pet
osnovnih koja omoguavaju ogranienje vrijednosti kolone koje sprjeava naruavanje integriteta podataka
tako da onemoguuje unos podataka koji ne zadovoljavaju pretopstavljene vrijednosti.
Najjednostavnije je vriti ouvanje integriteta definiui 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 logikim izrazom
Predikat. U izrazu se ne mogu navoditi druge kolone
5. DEFAULT=Konstanta ako se prilikom unoenja jednog reda podataka u tabelu za kolonu ne
zada vrijednost, podrazumjeva se Konstanta

36

Primjer slo
oenog upiita
Analiziraem
mo bazu koja sadri tri taabele:

Ko je kupio stolicu?
Da biste dobbili imena onnih koji su ku
upili stolicu, koristite ovaaj upit:
SEL
LECT PREZIIMEVLASNIIKA, IMEVL
LASNIKA
FROM VLASNICIA
V
ANTIKVITET
TA, ANTIKV
VITETI
WHERE
E IDKUPCA = IDVLASN
NIKA AND KOMADNAM
METAJA = 'stolica';

Obratite panju na sledeee injenicee o ovom upittu: obje tabeele koje su u relaciji
r
naved
edene su u kllauzuli
FROM nareedbe SELEC
CT.
U klauzuli W
WHERE prim
mjetite da usslov KOMAD
DNAMETA
AJA = 'stolicca'
ograniava izbor na onee koji su kupiili (a u naem
m primjeru, stoga
s
posedujju) stolicu.
Drugo, obraatite panju kako
k
se uspostavlja odnoos izmeu kolona sa ID brrojevima iz ddve tabele up
potrebom
uslova IDK
KUPCA = IDV
VLASNIKA
A. Samo ako se podudarajju ID brojevii u tabelama i kupljen ko
omad
nametaja jee stolica (zboog operatora AND), prikaazae se imeena iz tabele.
Rezultat ovoog upita su dva
d imena: Simonovi, B
Boban i Filipo
ovi, Sima
Koristei zaapis sa takaama da bistee izbjegli dvoosmislenost, ispred imenaa kolona moete pisati im
mena tabela:
SELE
ECT VLASN
NICIANTIK
KVITETA.P
PREZIMEVLASNIKA,
VLASN
NICIANTIK
KVITETA.I MEVLASNIKA
FROM
M VLASNICIANTIKVITE
ETA, ANTIK
KVITETI
WH
HERE ANTIK
KVITETI.IDK
KUPCA = VLASNICIAN
V
NTIKVITETA
A.IDVLASNIIKA
AND
D KOMADNAMETAJA = 'stolica';;

Meutim, kkako su u tabelama imenaa kolona razl iita, ovo nijje bilo beoph
hodno.
Napravite sspisak svih vlasnika
v
po abecednom
m redu prezim
mena.
SEL
LECT DISTIINCT IDPRO
ODAVCA, P REZIMEVLA
ASNIKA, IM
MEVLASNIKA
A
FRO
OM ANTIKV
VITETI, VLA
ASNICIANTIIKVITETA
WH
HERE IDPRO
ODAVCA = IDVLASNIK
KA
ORDER BY PREZIMEVLAS
SNIKA, IME
EVLASNIKA;

Ko je poru
uio neto to
se nudi?
?
Napravite uupit koji prikkazuje prezim
mena onih vllasnika koji su
s poruili neto
n
i njihovvu porudbin
nu, pri emuu
se daju sam
mo one poruddbine koje se mogu zaddovoljiti (to jest, postoji prodavac kooji je vlasnik
k poruenogg
komada nam
metaja):
37

SELECT VL
L.PREZIMEV
VLASNIKA Prezime, PO
OR.ELJENIKOMAD Po
oruen kom
mad
FROM POR
RUDBINE POR, VLASNICIANTIK
KVITETA VL
WHERE PO
OR.IDVLASN
NIKA = VL..IDVLASNIK
KA
AND
D POR.ELJJENIKOMAD
D IN
(SELEC
CT KOMAD
FROM ANTIKVITE
A
TI);

Ovo kao rezzultat daje:

Ima nekoliko sstvari na koje trreba obratiti panju u ovom uppitu:


1. "Preezime" i "Poruen komad" u reedu koji poinjee sa SELECT prredstavljaju zag
glavlja kolona u izvetaju.
2. VL i POR su pseuddonimi; to su nova
n
imena za ttabele navedenee u klauzuli FR
ROM koja se kooriste u zapisu sa
s takama kaoo
mislenost, naroito pri spajanjju izjednaavan
njem u klauzulii
preffiksi svih imenna kolona u upiitu. Ovim se elliminie dvosm
WH
HERE jer obe taabele imaju kolonu pod nazivvom IDVlasnik
ka, a zapis sa taakama ukazujje SQL-u da su
u u pitanju dvee
Vlasnika iz dvee razliite tabelee.
razliiite kolone IDV
3. Obraatite panju naa redosljed tabeela (vidi spojeevi) da je tabela Porudbine navedena prvaa u klauzuli FR
ROM; ovim see
osiggurava da se sppisak prikazujee prema toj tabbeli, a da se druga
d
tabela VllasniciAntikviteeta koristi sam
mo za detaljnijee
podaatke (prezime).
4. Najvvanije, AND u klauzuli WHE
ERE izaziva izvvravanje IN po
odupita ("= ANY" ili "= SOME
E" su dva ekviv
valentna zapisaa
za IN
N). Ono to se ovim postie jee izvravanje poodupita koji kao
o rezultat da je sve posjedovanne komade nam
metaja iz tabelee
Antiikviteti jer nem
ma klauzule WH
HERE. Zato, daa bi se prikazao red iz tabele Porudbine,
P
eljljeniKomad mo
ora se nalaziti u
toj vvraenoj listi koomada nametajja iz tabele Anttikviteti, ime se neki antikviteet prikazuje sam
mo ako porudb
bina moe da see
realiizuje kupovinom
m od drugog vllasnika . Ovo m
moe da se shvaati na sljedei nain:
n
podupit kkao rezultat daje skup komadaa
nam
metaja koji se uporeuje
u
sa svaakim eljenim kkomadom iz tab
bele Porudbine; IN uslov je ttaan samo ako
o eljeniKomadd
pripaada tom vraennom skupu iz tab
bele Antikviteti
ti.
5. Obraatite panju takkoe da se u ovo
om sluaju desiilo da je svaki eljeni

antikviteet bio raspoloivv, to naravno nee


n
uvijek bitii
sluaaj. Pored toga, kada se koristte kljune rijei IN, "= ANY"" ili "= SOME", one ukazujuu na podudarnost redova, a nee
koloona. To znai da ne moete navesti vie kkolona u klauzzuli SELECT nekog
n
podupitaa elei da up
parite kolonu u
spolj
ljanjoj klauzulii WHERE sa jeednom od vie moguih vrijed
dnosti kolone u podupitu. U poodupitu se moe navesti samoo
jednna kolona, a mogua podudarno
ost proizilazi izz vie vrijednosti redovau toj jeednoj koloni, a ne obrnuto.

Ko je kupioo skup antik


kvitet?
Na primer, pprikaimo kuupce koji su kupili skup aantikvitet (ciijena antikvitteta je za 1000 vea od pro
osjene
cijene svih kkupljenih anntikviteta):
SELECT ID
DKUPCA
FRO
OM ANTIKV
VITETI
WH
HERE CENA >
(SELEC
CT AVG(CEN
NA) + 100
FROM ANTIKVITE
A
TI);
Podupit izrauunava prosjenuu cijenu plus 10
00, a zatim se prrikazuju ID bro
ojevi kupaca za svaki komad naametaja koji jee kotao iznad
tog iznosa.

38

Pogledi (View)
Postoje samo kao definicije upita nad jednom ili vie tabela. Pogledi ne uvaju podatke u sebi (prividne
relacije bez vlastitih podataka). Pogledi su virtuelne tabele koje nemaju odgovarajuu fiziku
reprezentaciju, ve je njihova definicija, u terminima drugih tabela, zapamena u sistemskom katalogu.
Omoguuju
prilagodenje logikog modela podataka specifinim potrebama korisnika
provoenje zatite protiv neovlatenog pristupa podacima
Izvravaju se u trenutku upita pomou naredbe CREATE VIEW
Pogled se brie 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 PORUDBINE;
Sada, napiimo upit koji koristi ovaj pogled kao tabelu, pri emu je tabela predstavlja samo spisak svih
eljenih komada nametaja iz tabele Porudbine:
SELECT IDPRODAVCA
FROM ANTIKVITETI, ANTPOGLED
WHERE ELJENIKOMAD = KOMADNAMETAJA;
Ovaj upit pokazuje sve ID brojeve prodavaca iz tabele Antikviteti, pri emu komad namjetaja u toj tabeli
pripada pogledu AntPogled, a koji predstavlja samo sve eljene komade nametaja u tabeli Porudbine.
Rezultujui spisak se formira prolaskom kroz sve komade nametaja u tabeli Antikviteti, red po red, dok se
ne pronae isti takav u pogledu AntPogled. Pogledi se mogu koristiti za ograniavanje pristupa bazi
podataka, isto kao i za pojednostavljivanje sloenih upita, to je ovde sluaj.

39

Das könnte Ihnen auch gefallen