1|

SADRŽAJ
1 MODUL 1: MODEL OBJEKTI-VEZE I RELACIONI MODEL

4

1.1 OSNOVNI POJMOVI O BAZAMA PODATAKA: BAZA PODATAKA, DBMS, MODEL PODATAKA
1.2 CILJEVI KOJI SE NASTOJE POSTIDI KORIŠTENJEM BAZA PODATAKA
1.3 ARHITEKTURA BAZE PODATAKA
1.4 JEZICI ZA RAD S BAZAMA PODATAKA
1.5 POZNATI SOFTVERSKI PAKETI ZA RAD S BAZAMA PODATAKA
1.6 CIKLUS RAZVOJA BAZE PODATAKA
1.3.2 ANALIZA POTREBA
1.3.3 MODELIRANJE PODATAKA
1.3.4 IMPLEMENTACIJA
1.3.5 TESTIRANJE
1.3.6 ODRŽAVANJE
1.7 MODEL OBJEKTI-VEZE
1.3.7 ENTITETI I ATRIBUTI
1.3.8 VEZE
1.3.9 PRIKAZ ER-SHEME POMODU DIJAGRAMA (ER DIJAGRAM)
1.8 RELACIONI MODEL
1.9 PRESLIKAVANJE MODELA OBJEKTI-VEZE U RELACIONI MODEL

4
4
5
6
6
7
7
8
8
8
8
8
8
9
9
11
13

MODUL 2: ANALIZA I PRIMJENA DBMS

15

2.1 PROGRAMSKI ALATI ZA MODELIRANJE PODATAKA
2.2 MYSQL WORKBENCH
4.3.2 KREIRANJE KONEKCIJE
4.3.3 DATA MODELING
2.3 ZAŠTITA PODATAKA U BAZI
4.3.4 KORISNICI (DATABASE USERS)
KREIRANJE NOVOG KORISNIKA
4.3.5 DODJELA PRAVA KORISNICIMA
4.3.6 NAREDBA GRANT, OSNOVNI OBLIK
4.3.7 NAREDBA REVOKE

15
15
16
17
21
22
22
23
23
24

MODUL 3: ANALIZA I PRIMJENA SQL-A

27

3.1 UVOD U PROGRAMSKI JEZIK SQL
3.2 DDL NAREDBE
4.3.8 CREATE TABLE
3.2.2. IZMJENA I BRISANJE TABELA I KOLONA
3.3 DML NAREDBE
3.3.1 INSERT - UNOS PODATAKA U BAZU PODATAKA
3.3.2 IZMJENA PODATAKA U TABELI
3.3.3 BRISANJE PODATAKA IZ TABELE:

27
29
29
33
40
40
42
43
2|

3.4 KREIRANJE UPITA NAD BAZOM PODATAKA
3.5 SPAJANJE TABELA (JOIN)
3.6 MYSQL FUNKCIJE

43
47
48

3|

1 Modul 1: Model objekti-veze i relacioni model
Osnovni pojmovi o bazama podataka: Baza podataka, DBMS,
model podataka

1.1

Baza podataka je skup međusobno povezanih podataka, pohranjenih u vanjskoj memoriji računara. Podaci
su istovremeno dostupni raznim korisnicima i aplikacijskim programima. Unos, izmjena, brisanje i čitanje
podataka obavlja se posredstvom zajedničkog softvera. Korisnici i aplikacije pritom ne moraju poznavati
detalje fizičke organizacije podataka, ved se upuduju na logičku organizaciju podataka.
Sistem za upravljanje bazom podataka (Data Base Management System - DBMS) je poslužitelj (server)
baze podataka. On oblikuje fizički prikaz baze u skladu s traženom logičkom strukturom. Također, on obavlja
u ime klijenata sve operacije s podacima. Dalje, on je u stanju podržati razne baze, od kojih svaka može imati
svoju logičku strukturu, no u skladu s istim modelom. Isto tako, brine se za sigurnost podataka, te
automatizira administrativne poslove s bazom.
Podaci u bazi su logički organizovani u skladu s nekim modelom podataka. Model podataka je skup
pravila koja određuju kako može izgledati logička struktura baze. Model čini osnovu za koncipiranje,
projektovanje i implementiranje baze.
Od 80-tih godina pa sve do današnjih dana preovladava relacioni model. Očekivani prelaz na objektni model
za sada se nije desio, tako da današnje baze podataka uglavnom još uvijek možemo poistovjetiti s relacionim
bazama.

1.2 Ciljevi koji se nastoje postići korištenjem baza podataka
Baze podataka predstavljaju viši nivo rada s podacima u odnosu na klasične programske jezike. Taj viši nivo
rada očituje se u tome što tehnologija baza podataka nastoji (i u velikoj mjeri uspijeva) ispuniti sljedede
ciljeve.


Fizička nezavisnost podataka 
Razdvaja se logička definicija baze od njene stvarne fizičke implementacije. Znači, ako se fizička
struktura promijeni (na primjer, podaci se prepišu u druge datoteke na drugim diskovima), to nede
zahtijevati promjene u postojedim aplikacijama.
 Logička nezavisnost podataka 
Razdvaja se globalna logička definicija cijele baze podataka od lokalne logičke definicije za jednu
aplikaciju. Znači, ako se logička definicija promijeni (na primjer uvede se novi zapis ili veza), to nede
zahtijevati promjene u postojedim aplikacijama. Lokalna logička definicija obično se svodi na
izdvajanje samo nekih elemenata iz globalne definicije, uz neke jednostavne transformacije tih
elemenata. 


Fleksibilnost pristupa podacima 
U starijim mrežnim i hijerarhijskim bazama, metode pristupa podacima bile su unaprijed definisane,
dakle korisnik je mogao pristupati podacima jedino onim redoslijedom koji je bio predviđen u
vrijeme projektovanja i implementiranja baze. Danas se zahtijeva da korisnik može slobodno
postupati podacima, te po svom nahođenju uspostavljati veze među podacima. Ovom zahtjevu
zaista zadovoljavaju jedino relacione baze. 
Istovremeni pristup podacima 

Baza mora omoguditi da vedi broj korisnika istovremeno koristi iste podatke. Pritom ti korisnici ne
smiju ometati jedan drugoga, te svaki od njih treba imati utisak da sam radi s bazom. 
Čuvanje integriteta 
Nastoji se automatski sačuvati korektnost i konzistentnost podataka, i to u situaciji kad postoje
greške u aplikacijama, te konfliktne (istrovremene) aktivnosti korisnika. 
Mogudnost oporavka nakon kvara 
Mora postojati pouzdana zaštita baze u slučaju kvara hardvera ili grešaka u radu sistemskog
softvera. 

Zaštita od neovlaštenog korištenja 

4|

Mora postojati mogudnost da se korisnicima ograniče prava korištenja baze, dakle da se svakom
korisniku regulišu ovlaštenja tj. precizira šta smije a šta ne raditi s podacima.





Zadovoljavajuda brzina pristupa 
Operacije s podacima moraju se odvijati dovoljno brzo, u skladu s potrebama određene aplikacije. 
Na brzinu pristupa može se uticati odabirom pogodnih fizičkih struktura podataka, te izborom
pogodnih algoritama za pretraživanje. 

Mogudnost podešavanja i kontrole 
Velika baza zahtijeva stalnu brigu: pradenje performansi, mijenjanje parametara u fizičkoj građi,
rutinsko pohranjivanje rezervnih kopija podataka, regulisanje prava pristupa korisnika. Također,
svrha baze se vremenom mijenja, pa povremeno treba promijeniti i logičku strukturu. Ovakvi poslovi
moraju se obavljati centralizirano. Odgovorna osoba zove se administrator baze podataka (DBA
Database Administrator). 

1.3 Arhitektura baze podataka
Arhitektura baze podataka sastoji se od tri sloja i interface-a među slojevima, kao što je prikazano na slici

Lokalni logički nivo

Globalni logički nivo

Fizički nivo

1. Fizički nivo odnosi se na fizički prikaz i raspored podataka na jedinicama vanjske memorije. To je
aspekt kojeg vide samo sistemski programeri (oni koji su razvili DBMS). Sama fizički nivo može se
dalje podijeliti na više podnivoa apstrakcije, od sasvim konkretnih staza i cilindara na disku, do ved
donekle apstraktnih pojmova datoteke i zapisa kakve susredemo u klasičnim programskim jezicima.

2. Raspored pohranjivanja opisuje kako se elementi logičke definicije baze preslikavaju na fizičke
uređaje.

3. Globalni logički nivo odnosi se na logičku strukturu cijele baze. To je aspekt kojeg vidi projektant
baze odnosno njen administrator. Zapis logičke definicije naziva se šema (engleski takoder schema).
Šema baze podataka je tekst ili dijagram koji definiše logičku strukturu baze, i u skladu je sa zadanim
modelom. Dakle imenuju se i definišu svi tipovi podataka i veze među tim tipovima, u skladu s
pravilima korištenog modela. Takoder, šema uvodi i ograničenja kojim se čuva integritet podataka.

4. Lokalni logički nivo odnosi se na logičku predodžbu o dijelu baze koji koristi pojedina aplikacija. To
je aspekt kojeg vidi korisnik ili aplikacijski programer. Zapis jedne lokalne logičke definicije zove se
pogled (engleski view) ili podšema. To je tekst ili dijagram kojim se imenuju i definišu svi lokalni
tipovi podataka i veze medu tim tipovima, opet u skladu s pravilima korištenog modela. Također,
pogled zadaje preslikavanje kojim se iz globalnih podataka i veza izvode lokalni.
Za kreiranje baze podataka potrebno je zadati samo šemu i poglede. DBMS tada automatski generiše
potrebni raspored pohranjivanja i fizičku bazu. Administrator može samo donekle utjecati na fizičku građu
baze, podešavanjem njemu dostupnih parametara.
Programi i korisnici ne pristupaju direktno fizičkoj bazi, ved dobivaju ili pohranjuju podatke posredstvom

5|

Naime.4 Jezici za rad s bazama podataka Komunikacija korisnika odnosno aplikacijskog programa i DBMS-a odvija se pomodu posebnih jezika. MVS.5 Poznati softverski paketi za rad s bazama podataka Baze podataka se u pravilu realizuju korištenjem nekog od provjerenih softverskih paketa. ) s ugniježdenim DML-naredbama. Dakle ti jezici su nam nužni da bi se povezali s bazom. Naredbe su neproceduralne. To je jezik koji podsijeda na govorni (engleski) jezik. U drugim paketima zaista se radi o posebnom jeziku: programer tada piše program u kojem su izmiješane naredbe dvaju jezika. vijeka bili su dosta popularni i tzv.  Ovakva podjela na tri jezika danas je ved prilično zastarjela. jezici 4. U 80-tim godinama 20. Naredbe DML omogudavaju “manevrisanje” po bazi.4GL): riječ je o jezicima koji su bili namijenjeni isključivo za rad s bazama. Primjer takvog integrisanog jezika za relacione baze je SQL (Structured Query Language): on služi za definisanje podataka. pa takav program treba prevoditi s dva prevodioca (DML-precompiler. 1. Koji puta postoji posebna varijanta jezika za šemu. . promjena. MS Windows NT/2000/XP. OS/400 MS Windows (razni). Linux. VM.DML)  Služi programeru za uspostavljanje veze izmedu aplikacijskog programa i baze. aplikacije se najčešde razvijaju u standardnim objektno orijentiranim programskim jezicima (Java. . te imaju značajan udio na svjetskom tržištu. dakle takve da samo specificiraju rezultat kojeg želimo dobiti. COBOL. . Tradicionalni način razvoja aplikacija koje rade s bazom je korištenje klasičnih programskih jezika (COBOL. Java. generacije (4-th Generation Languages . no oni nam nisu dovoljni za razvoj aplikacija koje de nešto raditi s podacima iz baze. Integrisani jezik se može koristiti interaktivno (preko on-line interpretera) ili se integriše u aplikacijske programe. a posebna za poglede. Za interakcije s bazom koriste se unaprijed pripremljene klase objekata. a ne i postupak za dobivanje rezultata. Pascal. C++. Linux i drugi UNIX (razni).   Jezik za manipuliranje podacima (Data Manipulation Language . MS Windows NT/2000/XP Jezici SQL. Ovakva tehnika je dovoljno produktivna zbog korištenja gotovih klasa. . Naglasimo da gore spomenute vrste jezika nisu programski jezici. Java i drugi SQL. 1. UNIX (razni). Komunikacija programa odnosno korisnika s DBMS-om obavlja se na lokalnom logičkom nivou. a rezultujudi program se lako dotjeruje. Dakle tim jezikom definišemo podatke i veze medu podacima. UNIX (razni). Naredbe DDL obično podsjedaju na naredbe za definisanje složenih tipova podataka u jezicima poput COBOL. te su zato u tom kontekstu bili produktivniji od klasičnih programskih jezika opšte namjene.DBMS-a. te se nije mogao koristiti izvan tog paketa (baze). PL/I. generacije je bio u njihovoj nestandardnosti: svaki od njih je u pravilu bio dio nekog odredenog softverskog paketa za baze podataka.QL)  Služi neposrednom korisniku za interaktivno pretraživanje baze. kod relacionih baza postoji tendencija da se sva tri jezika objedine u jedan sveobuhvatni. Proizvođač IBM Corporation Proizvod DB2 Oracle Corporation Oracle IBM Corporation (prije : Informix Informix Operativni sistem Linux. Java i 6| . Problem s jezicima 4. Tabelarni prikaz koji slijedi daje pregled nekih softverskih paketa koji u predstavljaju tehnološki vrh. Mac OS. U nekim softverskim paketima. Pascal . SQL. te jednostavne operacije kao što su upis. U današnje vrijeme. Ti jezici tradicionalno se dijele na sljedede kategorije. i to na logičkoj razini.   Jezik za postavljanje upita (Query Language . .DDL)  Služi projektantu baze ili administratoru u svrhu zapisivanja šeme ili pogleda. ). C. DML je zapravo biblioteka potprograma: “naredba” u DML svodi se na poziv potprograma. obični compiler). . .       Jezik za opis podataka (Data Description Language . VMS. . brisanje ili čitanje zapisa. PL/I. manipulisanje i pretraživanje. integriše u vede sisteme ili prenosi s jedne baze na drugu. C.

SQL Gotovo svi današnji softverski paketi podržavaju relacioni model i SQL. . . 1. 4. uobičajene klijente (na primjer interaktivni interpreter SQL). UNIXWare SQL. racionalno korištenje resursa sistema (procesora.3. VMS. UNIX (razni). upotrebljivost i integritet povezanih podataka. C++. Važno je procijeniti frekvenciju i opseg pojedinih transakcija. C. . Microsoft Corporation MS Access MS Windows (razni) Access Basic. 4GL. . Postoje formalne metode analize zahtijeva (analize potreba). MVS. Svaki od njih sadrži svoj DBMS. MySQL AB MySQL Sybase Inc. Hewlett Packard Co. . analiza potreba. Konkurencija medu proizvodđačima softvera za baze podataka je izuzetno velika. spajanja ili preuzimanja. Lista relevantnih softverskih paketa zato je svake godine sve krada. 7| . testiranje i 5.) Microsoft MS SQL Server MS Windows NT/2000/XP drugi SQL. Konzistentnost podataka obuhvata validnost. na kojima radi više ljudi organizovanih u projektne timove. ali se one koriste uglavnom na velikim projektima. kao što je brzina izvršavanja operacija obrade podataka. MS Windows (razni). Linux. te zahtjeve u vezi sa performansama. Svaki paket isporučuje se u verzijama za razne računarske platforme (operativne sisteme). ili da se mogu dobiti iz drugih podataka. Uočavaju se podaci koje treba pohranjivati i veze među njima. COBOL. OS/2.6 Ciklus razvoja baze podataka Uvođenje baze podataka u neko preduzede ili ustanovu predstavlja složeni zadatak koji zahtijeva timski rad stručnjaka raznih profila. COBOL. C. Analiza potreba također treba obuhvatiti analizu transakcija (operacija) koje de se obavljati nad bazom podataka. dostupnost podataka. Performanse baze podataka obuhvataju skup osobina koje utječu na osobine baze.2 Analiza potreba Proučavaju se tokovi informacija u preduzedu. Supra MS Windows NT/2000. SQL. Cincom Systems Inc. tačnost. U velikim preduzedima. . . Mac OS MS Windows NT/2000. . održavanje. . UNIX (razni). PHP. gdje postoje razne grupe korisnika. . VM SQL. . . 2. Te poglede treba uskladiti tako da se eliminiše redundancija i nekonzistentnost. Allbase/SQL UNIX (HP-UX) SQL. implementacija. pojavit de se razni “pogledi” na podatke. . Sybase SQL Server Linux.Software Inc. Mac. UNIX (razni). 3. modeliranje podataka. tako da je posljednjih godina često dolazilo do njihovog nestanka. 1. To je projekt koji se može podijeliti u pet faza: 1. Redudantnost podataka podrazumijeva da se u neki podaci memorisani dva (ili više) puta. . bududi da to može imati uticaja na sadržaj i konačni oblik baze. . te biblioteke i alate za razvoj aplikacija. memorije) itd… Rezultat analize je dokument (pisan neformalno u prirodnom jeziku) koji se zove specifikacija potreba.

Dobro bi bilo kad bi takve propuste otkrili prije implementacije. Baza se inicijalno puni podacima 1.4 Implementacija Na osnovu sheme i podshema. Također.5 Testiranje Korisnici testiraju bazu i provjeravaju da li ona zadovoljava svim zahtjevima. greška u analizi potreba uzrokuje da transakcije možda korektno rade. sintetiziraju se u jednu cjelinu . Zato se služimo pomodnom fazom koja se zove modeliranje entiteta i veza (Entity-Relationship Modelling). praznik.3. servisiranje auta).3. fizički se realizuje baza podataka na računaru. 1. višemanje automatski. Modeliranje entiteta i veza zahtijeva da se svijet promatra preko tri kategorije:    Entiteti (entity): objekti ili događaji koji su nam od interesa. ER-shema se dalje.3. 1. tada ga radije treba smatrati novim entitetom (na primjer model auta).3 Modeliranje podataka Različiti pogledi na podatke. boja fasade.  1. ). Entitet je opisan atributima (na primjer atributi kude su: adresa. odnosno događaj ili pojava (na primjer nogometna utakmica. i to tako da to pradenje ne ometa korisnike.1.    uvođenje promjena zbog novih zahtjeva korisnika. konceptualne sheme. generacije i objektno-orijentisani jezici. student. shema se prilagođava ograničenjima koje postavlja zadani model podataka. koja predstavlja apstrakciju realnog svijeta. te uz pomod dostupnog DBMS-a. Jeftinu izradu prototipova omogudavaju jezici 4.3.7 Model objekti-veze Bavimo se pitanjem: kako oblikovati shemu za bazu podataka. Na kraju se iz sheme izvode pogledi (podsheme) za pojedine aplikacije (grupe korisnika). otkriveni u fazi analize. razvijaju prototipovi baze podataka. Nastoje se otkriti greške koje su se mogle potkrasti u svakoj od faza razvoja: dakle u analizi potreba.6 Održavanje Odvija se u vrijeme kad je baza ved ušla u redovnu upotrebu (produktivna baza). implementaciji. pretvara u relacionu. Precizno se utvrđuju tipovi podataka. . . auto). U stvarnim situacijama dosta je teško direktno dizajnirati relacionu shemu. Entitet može biti objekt ili bide (na primjer kuda. Shema se dalje dotjeruje (“normalizira”) tako da zadovolji neke zahtjeve kvalitete. broj katova. Zato se u novije vrijeme.   atributi: svojstva entiteta i veza koja su nam od interesa. usklađenu s pravilima relacionog modela. Greške u ranijim fazama imaju teže posljedice.3. Na primjer. te se oni pokazuju korisnicima. Sastoji se od sljededeg:  popravak grešaka koje nisu bile otkrivene u fazi testiranja. nešto što je u stanju postojati ili ne postojati.  Održavanje zahtijeva da se stalno prati rad s bazom.   Veze (Relationship): odnosi među entitetima koji su nam od interesa. te se može identifikovati.    podešavanje parametara u DBMS u svrhu poboljšavanja performansi. Parametri se podešavaju tako da se osigura efikasan rad najvažnijih transakcija. Ukoliko neki atribut i sam zahtijeva svoje atribute.globalnu shemu. Isto pravilo vrijedi i ako atribut može istovremeno imati više vrijedenosti (na primjer kvar koji je popravljen 8| . U DBMS-u obično postoje parametri kojima se može utjecati na fizičku organizaciju baze. Administratoru baze podataka trebaju stajati na raspolaganju odgovarajudi alati (utility programi). Ta tzv. Riječ je o oblikovanju jedne manje precizne. prije prave implementacije.7 Entiteti i atributi Entitet je nešto o čemu želimo memorisati podatke. 1. no ne ono što korisnicima treba ved nešto drugo. te se dodatno modificira da bi bolje mogla udovoljiti zahtjevima na performanse. . Razvija se skup programa koji realiziraju pojedine transakcije te pokrivaju potrebe raznih aplikacija. modeliranju podataka.

Ukoliko jedan tip entiteta ima više kandidata za ključ. Dakle. zapravo određuje tip entiteta. Inače tip entiteta ima neobavezno članstvo (slaba veza). U toj listi možemo specificirati obaveznost članstva u vezama. Kažemo da je veza jaka. Jedan primjerak prvog tipa entiteta može biti u vezi s 0.pri servisiranju auta). tada biramo jednog od njih i proglašavamo ga primarnim ključem. te također jedan primjerak drugog tipa može biti u vezi s 0. Imena tipova entiteta i veza.     Veza može imati i svoje atribute koje ne možemo pripisati ni jednom od tipova entiteta (na primjer veza ucenik_odjeljenje može imati atribut DATUM UPISA). koja ima funkcionalnost (N : 1. one-to-many ). Primjer ER dijagrama UCENIK n Ucenik_odjeljen 9| . a rombovi veze. Markovid Marko. Veze su povezane linijama s odgovarajudim tipovima entiteta. Kandidat za ključ je atribut.   Više-naprema-više (M : N. te također jedan primjerak drugog tipa može biti u vezi s najviše jednim primjerkom prvog tipa. Na primjer veza predmet_odjeljenje izmedu tipova entiteta  PREDMET i ODJELJENJE . Na primjer veza ucenik_odjeljenje između tipova entiteta  UCENIK i ODJELJENJE .   Jedan-naprema-više (1 : N. To je jaka veza. no jedan primjerak drugog tipa može biti u vezi s najviše jednim primjerkog prvog tipa. Jedan primjerak prvog tipa entiteta može biti u vezi s 0. (Na primjer primarni ključ za tip entiteta STUDENT mogao bi biti atribut BROJ INDEKSA. Može postojati mnogo primjeraka (pojava) entiteta zadanog tipa (na primjer UCENIK je tip čiji primjerci su Petrovid Petar. .3. uneseni su u dijagram. . (Na primjer za tip entiteta AUTO. many-to-many ). Funkcionalnost veze može biti:   Jedan-naprema-jedan (1 : 1. Na primjer veza JE RAZREDNIK izmedu tipova entiteta NASTAVNIK i ODJELJENJE. 1 ili više primjeraka drugog tipa entiteta. Ako svaki primjerak entiteta nekog tipa mora učestvovati u zadanoj vezi. Za sada demo se ograničiti na veze izmedu tačno dva tipa entiteta. te funkcionalnost veza. jer učenik mora biti u nekom odjeljenju).3. kandidat za ključ je atribut REG BROJ ). 1 ili više primjeraka drugog tipa entiteta. 1.8 Veze Veze se uspostavljaju između dva ili više tipova entiteta (na primjer veza IGRA ZA između tipova entiteta IGRAC i TIM ). tada kažemo da tip entiteta ima obavezno članstvo u toj vezi. ili skup atributa. 1. Jedan primjerak prvog tipa entiteta može biti u vezi s najviše jednim primjerkom drugog tipa entiteta. one-to-many). Zapravo je riječ o imenovanoj binarnoj ili k-narnoj relaciji između primjeraka entiteta zadanih tipova. ne mogu postojati dva različita primjerka entiteta istog tipa s istim vrijednostima kandidata za ključ. čije vrijednosti jednoznačno određuju primjerak entiteta zadanog tipa. (Na primjer izmedu tipova entiteta UCENIK i ODJELJENJE zadana je veza. 1 ili više primjeraka prvog tipa. Ime entiteta.9 Prikaz ER-sheme pomoću dijagrama (ER dijagram) Uobičajeno je da se ER-shema nacrta kao dijagram u kojem pravougaonici predstavljaju tipove entiteta. Posebno se prilaže lista atributa za svaki entitet odnosno vezu. zajedno sa pripadajučim atributima. . ).

(1 : 1 : N ) ili ˇcak (1 : 1 : 1). projektima (PROJECT) i zaposlenim (EMPLOYEE) angažovanim na projektima. vještina) potrebno je mnogo zaposlenih. Primjer ternarne veze sa prethodne slike odnosi se na podatke o vještinama (SKILL). E1 nasljeduje sve atribute od E2. dakle (N : M : P ). na primjer (N : M : P ). itd. CarType je nadređeni objekat. Znači riječ je o ternarnoj relaciji izmedu primjeraka triju tipova entiteta. Postoje brojne mogudnosti za funkcionalnost ternarne veze. no E1 može imati i dodatne atribute. PassangerCarType i TruckType naslijeđuju sve osobine objekta CarType. (1 : N : M ). Na slici je prikazan primjer podtipova. Tip entiteta E1 je podtip tipa entiteta E2 ako je svaki primjerak od E1 takoder i primjerak od E2. jer na primjer za zadani par (projekat. Ternarne veze uspostavljaju se izmedu tri tipa entiteta. ali imaju i svoje vlastite atribute. Funkcionalnost ove veze je mnogo-naprema-mnogonaprema-mnogo.1 ODJELJENJE n Odjeljenj razrednik 1 1 NASTAVNIK m PREDMET Složenije veze U stvarnim situacijama pojavljuju se i složenije veze od onih koje smo do sada promatrali. 10 | . Pod-tipovi. Navest demo neke od njih. a PassangerCarType i TruckType su podređeni objekti.

(1. drugi iz D2..“Franjo“. dakle. adresa) Primjerak relacije je konkretizacija relacije. Zato ER shema služi za komunikaciju projektanta baze podataka i korisnika. Primjerak relacije naziva se i slog (record). #ucenik 1 2 3 Prezime Jahid Mujid Tomid Ime Adnan Damir Franjo Adresa Armije BiH 18 Albina Herljevida 9 Bizovac 45 Relaciona tabela naziva se i tabela (table). i to u najranijoj fazi razvoja baze. relacija je dvodimenzionalna tabela. s tim što su relacije u relacionom modelu vremenski promjenjljive.atribut n) Npr. Atributi tabele nazivaju se i polja (fields). Npr. Codd-ova definicija relacije glasi: Neka su dati skupovi D1..“Bizovac 45“) S aspekta korisnika. skup svih prezimena učenika. 1. skup svih vrijednosti iz kojeg neki element n-torke relacije može uzeti vrijednost. ime. te modificira u skladu s pravilima relacijskog modela. 11 | .“Tomid“. R je relacija nad ovih n skupova (n vede od 0) ako je to skup n-torki takav da za svaku n-torku vrijedi da je prvi element n-torke iz D1. Relacioni model podataka teorijski je razradio britanski matematičar Codd E.“Jahid“.. D3.“Albina Herljevida 9“) (3..“Mujid“. D2.F. Domen je.ER model dovoljno je jednostavan da ga ljudi različitih struka mogu razumjeti. Skup D1 naziva se domena relacije R. Skup svih tabela koje čine relacionu bazu podataka naziva se šema baze podataka (schema). Relacija u relacionom modelu podataka isto je što i relacija u matematici. Uobičajen zapis relacije je: Naziv_relacije (atribut1. prezime. relacija učenik zapisana je kao: Ucenik(#ucenik.. Npr.“Damir“. koju nazivamo relacionom tabelom.. atribut2.. Postojedi DBMS ne mogu direktno implementirati ER shemu. n-ti element iz Dn... Domen je skup sličnoga tipa. npr.“Armije BiH 18“) (2.. ved zahtijevaju da se ona detaljnije razradi.“Adnan“.Dn (ne obavezno različiti).8 RELACIONI MODEL Objekte i veze u relacionom modelu podataka predstavljamo relacijama.

čija vrijednost jedinistveno identifikuje svaki red relacione tabele. o Npr.  Svaka kolona mora imati jedinstveno ime. Redoslijed kolona je nevažan. Svaki red tabele je jedinstven  o Ovo svojstvo obezbjeđuje da u relacionoj tabeli ne postoje dva identična reda. O stranom ključu možemo razmišljati kao o kopiji primarnog ključa neke druge tabele. Svaki red relacione tabele predstavlja jednu n-torku relacije ili primjerak relacije.Kolone relacione tabele su atributi relacije. U relacionoj tabeli Ucenik atribut rezred_id je strani ključ. Primarni ključ je jedna ili više kolona tabele čija vrijednost jedinistveno identifikuje svaki red tabele. u relacionoj tabeli Predmet dozvoljeno je postojanje dva reda sa identičnim vrijednostima atributa: naziv_predmeta. o npr. Ova kolona (kolone) nazivamo primarnim ključem. "laboratorijska".  U relacionom modelu postoje samo relacije ili relacione tabele. Relaciona tabela ima slijededa svojstva:          Vrijednosti su atomične  o kolone (atributi) su nedjeljive informacije. "kombinovano"). Veza između tabela Razred i Ucenik uspostavljena je na taj način što se identifikuje iste vrijednosti primarnog ključa tabele Razred (razred_id) i stranog ključa "razred_id" u tabeli Ucenik. za sve primjerke relacione tabele Predmet kolona „oblik nastave“ može poprimiti samo vrijednosti iz skupa ("teroretska". ne mogu biti složeni iz više podataka. Odnos između dvije ili više tabela izražen je pomodu vrijednosti kolona koje predstavljaju primarni i strani ključ. tj. tabela razred ne može imati u jednoj koloni atribute razred i odjeljenje. Veza između dvije relacione tabele uspostavlja se preko identikovanja primjeraka čija je vrijednosti stranog ključa u jednoj tabeli jednaka vrijednosti primarnog ključa druge tabele. ali ako atribut predmet_id ima različite vrijednosti.  Redoslijed redova je nevažan. Posmatrajmo relacije Razred i Ucenik. razred i odjeljenje moraju biti odvojene kolone Sve vrijednosti jedne kolone su istog tipa  o ovo znači da je domen podataka u jednoj koloni isti (domen je skup vrijednosti koje atribut može poprimiti) o npr. 12 | . Strani ključ je jedna ili više kolona čije vrijednosti su iste kao i vrijednosti primarnog ključa druge tabele. postoji najmanje jedna kolona. ili skup kolona. U ovoj koloni ne može biti upisana neka druga vrijednost. razred. oblik i sedmicni_fond. "prakticna".

i to tako da atributi objekta postaju atributi relacione tabele.prevođenje veze N:M Svaka N:M tip veze postaje nova relaciona tabela. pokazati na primjeru njihovu primjenu i generisati relacionu šemu koja i jeste cilj ovog koraka razvoja baze podataka. primarni ključ objekta postaje primarni ključ relacione tabele. jednostavno se prevodi u relacioni model na osnovu skupa pravila. atributi tipa veze postaju atributi nove relacione tabele. Pravilo 2. Pravilo 3 . Ovaj atribut postaje strani ključ relacione tabele na strani N. . nego se primarni ključ objekta sa strane 1 umede kao atribut u relacionu tabelu na strani N.9 Preslikavanje modela objekti-veze u relacioni model (Pravila za prevođenje modela objekti-veze u relacioni model) Model objekti-veze koji je napravljen u prethodnoj fazi razvoja baze podataka. To pravilo glasi: Pravilo 1 . Najprije se primjenjuje jednostavno pravilo za prevođenje objekata u relacione tabele. primarni ključ nove relacione tabele je složen od primarnih ključeva objekata 13 | .Prevođenje objekata Svaki objekat modela objekti veze postaje relaciona tabela.prevođenje veze 1:N Svaki 1:N tip veze gdje je strana N totalna (svaki primjerak objekta na strani n je povezan sa jednim objektom na strani 1) ne prevodi se u novu relaciju. Nabrojademo pravila. Nakon prevođenja objekata u relacione tabele. Svi eventualni artibuti veze postaju atributi relacije na strani N. prevodimo veze primjenom pravila za prevođenje veza.1.

14 | .koji učestvuju u vezi. Pravilo 4 . uvodi se nova relaciona tabela. pri čemu je kardinalnost veze M. oni postaju kolone nove relacione tabele.prevođenje veze koja obuhavata više od dva objekta Ako su vezom obuhvadena više od dva objekta. Ukoliko veza ima atributa. čiji ključ je složen od primarnih ključeva svih objekata obuhvadenih vezom.

2 MySQL Workbench MySQL Workbench je skup alata namjenjenih administratorima baze podataka i developerima. a kojeg čine slijededi alati za:      Dizajniranje i modeliranje baze podataka (Database Design & Modeling)  Kreiranje i izvršavanje SQL naredbi (SQL Development)  Adminstracija baze (Database Administration)  15 | . packages. Prednosti ovih alata su što omgučavaju identifikovanje objekata. koji omogučava da se postojeda struktura baze (iz nekog DBMS) učita u alat. Ovi alati nude i generatore baze. interaktivnu i brzu izmejnu dijagrama kako bi smo napravili model koji je vjerna slika dijela realnosti za koji pravimo bazu. ovakvi alati nude i mogučnost reverzibilnog modeliranja (reverse engineering). functions. te izmjene se opet putem skripti mogu izvršiti na odredišnoj bazi kako bi se napravile modifikacije i/ili dodali novi objekti u bazu (ili obrisali postojedi)... bilo direktnim izvršavanjem koda nakon konektovanja na bazu. Vedina alata za modeliranje nudi i mogudnost kreiranja i drugih objekata baze podataka (views.1 PROGRAMSKI ALATI ZA MODELIRANJE PODATAKA Postoji čitav niz alata koji se koriste u svrhu razvoja baza podataka . Korištenje alata je veoma jednostavno i zahtijeva samo osnovna znanja o modelima objekti veze i relacionom modelu.Modul 2: Analiza i primjena DBMS 2.). U fazi modeliranja podataka možemo koristiti gotove programske pakete koji omogučavaju grafički interface za kreiranje modela objekti veze i njegovo prevođenje u relacioni model. sequences. atribut i veza među njima. Također.. 2. a u konačnici. procedures. od faze analize potreba pa do faze testiranja (data base design). kako bi se šema mogla modifikovati. bilo pitem DDL koda u formi skripti koje se mogu izvršavati na odredišnoj bazi. kako i SQL query editor za definisanje i izvršavanje upita nad bazom.

U polja “Hostname”. 3. Godine 2009 izabran je za Database Tool godine.3. Osnovne osobine alata iz ovog paketa su: 2. modifikovanje postojede šeme kao i kreiranje nove šeme baze podataka. Nakon izbora ikone sa slike. Server Administration – Omogudava kreiranje i administriranje instance baze podataka. MySQL Workbench postao je veoma popularan alat umeđu korisnicima MySQL-a. Kada se kreira konekcija i uspostavi veza sa bazom podataka. 4. Stoga je najprije potrebno kreirati konekciju na bazu. Pored podešavanja parametara konekcije. otvori se dijalog za kreiranje konekcije. SQL Development – Omogudava kreiranje i održavanje konekcije na server baze podataka. “Username” i “Default Schema” treba upisati podatke koje dobijete od administratora baze podataka. Zauzima drugo mjesto na listi najčešde download-ovanog softvera sa MySQL web stranice sa više od 250.Od kada se pojavio. 4. Data Modeling – Omogudava kreiranje modela šeme baze podataka pomodu grafičkih alata. 16 | .2 Kreiranje konekcije MySQL Workbench omogudava rad direktno nad bazom podataka. u okviru kojeg treba upisati TCP/IP adresu računara koji služi kao server baze podataka. konekciju treba testirati. Konekciju treba imenovati (Connection Name) kako bismo je mogli pohraniti i ponovljeno koristiti. Prije zatvaranja ovog dijaloga.000 download-a mjesečno. mogude je direktno izvršavanje SQL naredbi kao i administriranje baze. omogudava izvršavanje SQL upita nad bazom.

3 Data Modeling 1.4. Sada možete dodavati tabele.3. Na toolbar-u “Physical Schemata” odaberite dugme + da biste dodali novu šemu (“skr”). 17 | . Pojavit de se nova tab stranica sa istim imenom. Kreiranje modela podataka počinje izborom “Create new EER Model” 2.

Modelkoristimo. tab str Columns definisanje kolona. Tab stranica Table omogučava upisivanje imena tabela.CreateDiagramkomandefromCatalogiz menija Objects. Zatim dodajemo tabele . Kreiranje tabela možemo izvršiti i pomoću grafičkog alata Ako iz već postojeće šeme želimo napraviti dijagram. 18 | .pomoćuAdd Table.3.

uspos komande iz menija Database. Pošto ne postoje tabele u šemi. 5. Upišite ime modelu. a zatim na tabelu na strain 1. ForwardpomočuEngineerkomande 7. Ako nismo konektovani. Manage Connections. 19 | .Sada koristimo ikonu Table da bismo dodali još jednu tabelu 4. Snimimo model pomoću ikone na standardnoj traci sa alatima. Dodajemo relaciju 1:n pomoću ikone Primjetitesatrakedase sanajprijealatimakliknen. 6.tabelu na strain n. Dobijemo povezanetabela učeniktabele.dobilapričemustranije ključ. Sada ćemo sinhronizovati model sa bazom podataka. kreiramoDatabasenove.

but the MySQL Command Line Client has been used here as you have probably used this previously. displays the script that will be run on the live server to create your schema. The Options page of the wizard shows various advanced options. and then click Close to exit the wizard.Review Script Select the connection you BigcreatedIronServer”earlier. The next screen.The first page of the wizard is the Catalog Validation page. For this tutorial you can ignore these and simply click Next. Enter USE dvd_collection. Enter SELECT * FROM movies.6 Getting Started Tutorial .. Click Next. and identify your schema. so no other objects need to be selected. Figure 4. In this case we only have a table. Review the script to make sure that you understand the operations that will be carried out. Click Save Model to Current File on the main toolbar. Enter SHOW DATABASES. Click Next. Now enter SHOW TABLES. and you will see how to do this later. If everything is in order the wizard will report that validaton finished successfully. Ensure that the script ran without error on the server and then click Close. Click Next to continue.ClickExecute“. 20 | . On the next page you can select the object you want to export to the live server.Check the messages for any erros.. As a simple test that the script worked launch the MySQL Command Line Client. Ensure that your model is saved. to select your schema.. Note that it is possible to use MySQL Workbench to carry out such checks. Review SQL Script. this will return the empty set as you have not yet entered any data into your database.. Click the Run Validations button to validate the Catalog.

3 Zaštita podataka u bazi Baza podataka sadrži dragocjene informacije koje sakupljamo i obrađujemo sa mnogo truda i pažnje. jeste da učenicima omogući samo selektovanje podataka iz tabele baze u kojoj su najavljeni događaji u školi (SELECT). Učenik odabira razred (4t1). Roditelja zanima gdje se odrţava roditeljski sastanak. Kako onemogučiti greške u bazi? Deţurni učenik i nastavnik sada samo mogu konstatovati sabotaţu podataka i moraju riješiti ovaj problem bez podrške baze podataka.. Bilo kakvo neovlašteno ili neadekvatno pristupanje podacima je nedopušteno. Pedagog škole Iako je 16.03. Napišite sa lijeve strane šta učenik može uraditi nad podacima u tabeli ocjene i izostanci. Bijedić B. VJEŢBA 1 Ako dizajnirate bazu podataka za školu (i pri tome ste dovoljo odgovorni). ni u tablema gdje se čuvaju podaci o ocjenama i izostancima.03. Između ostalih.03.2. S druge strane. Učenik evidentira podatke o roditelju i koristi modul „Aktivnosti u školi“ gdje razredni starješina evidentira i podatke o terminima informacija. 18 h Kabinet 15 Kabinet 15 Kabinet 25 Soba za roditelje 4t1 4t1 4t1 4t1 Bijedić B. Naučit demo kontrolisati ko i šta može uraditi nad podacima. a aplikacija ispisuje na ekranu: Najavljena aktivnost Termin Mjesto održavanja Razred Nastavnik Roditeljski sastanak Roditeljski sastanak Roditeljski sastanak Informacije 15. Ono što treba poduzeti kako bi se ovakve situacije uistinu izbjegle. Učenik može: Učenik ne može: 21 | . podaci imaju upotrebnu vrijednost samo ako se koriste. a na desnoj šta ne može. Jednoga dana. 16. ni u nekim drugim tabelama… ).2012... U ovom poglavlju naučit demo kako možemo obezbijediti sigurnost podataka u bazi i kako možemo obezbijediti punu kontrolu nad podacima.2012. kao i kontrolu nad korisnicima. Stoga. Bijedić B. ova aplikacije je na raspolaganju i deţurnim učenicima.2012. kao i zakazanim roditeljskim sastancima. 17 h 16.. 18 h Srijeda. deţurni učenik prima roditelja koji je došao na roditeljiski sastanak 4t1 razreda. u fazi analize zahtjeva ispitali ste ko šta može uraditi u školskoj bazi. mart. Učenici ne smiju izvršavati INSERT ili DELETE ( uostalom. učenik je zbunjen i traţi pomoć deţurnog nastavnika. korisnicima moramo omogučiti pristup podacima. Problemi korisnika U IQ školi koja obrazuje učenike smjera „tehnilčar računarstva“ učenici su napravili aplikaciju i bazu podataka koja sluţi kao podrška svim aktivnostima u školi. Navedite odgovarajude DML i DDL naredbe. Deţurni nastavnik traţi ko je bio deţurni učenik u prijepodnevnoj smjeni.

najprije demo mu dodijeliti lozinku (password).4. prvi zadatak mu je da kreira druge korisnike. morate znati „Hostname“ računara na kome je baza instalirana. Tada morate znati IP adresu računara na kome je instalirana baza.0. čime demo onemogučiti neovlašteno konektovanje korištenjem root korisničkog računa.3. Bududi da je u početku on jedini korisnik u bazi.0. Tokom instalacije baze podataka (npr. Npr. Tabela u kojoj se čuvaju podaci o korisnicima baze podataka sadrži id. Npr. Piitate administratora baze podataka koja je IP adresa računara na kome je baza. MySQL) automatski se kreira jedan korisnik. naredba bi bila: ALTER USER root IDENTIFY BY ‘new_password’. DBMS sve podatke čuva u tabalema.root. S obzirom da ovaj korisnik može uraditi „sve“ što poželi. u tabeli.4 Korisnici (database users) Osnovni nivo zaštite podataka u bazi realizuje se preko koncepta korisnika baze podataka (database users). ili IP adresa računara na kome je baza U Oracle DBMS. uključujuči i podatke o samoj sebi (bazi). Korisnik može pristupiti bazi samo ukoliko ima kreiran korisnički račun (user account).1. Minimum informacija koje moramo odrediti prilikom kreiranja korisnika jeste ime korisnika i lozinka. U MySQL bazi podataka naredba za postavljanje lozinke je slijededa: SET PASSWORD FOR ‚root‘@’localhost’ = PASSWORD(‘b45tw4324’) Username korisnika za kojeg definišemo lozinku Localhost ako je baza na istom računaru gdje zadajemo naredbu. čije korisničko ime ne možemo promijeniti . kao i informacije o tome šta korsinik može uraditi. ime. MySQL Workbench omogudava promjenu lozinke u okviru alata “Server Administration”: Nema glupih pitanja Q: Još uvijek mi nije jasno šta je “localhost”?!!? A: Kada se konektujete na bazu. Kreiranje novog korisnika Šta mislite gdje SQL pohranjuje informacije o korisnicima? Naravno. CREATE USER elsie IDENTIFY BY ‚lozinka_u_apostrofima‘. Ako zadajete SQL naredbe sa istog računara na kome je instalirana baza (DBMS kao što je MySQL) onda je „Hostname“= „localhost“ ili 127. To dete najvjerovatnije koristi kod kude Q: A šta ako se konektujem sa računara na kome nije instalirana baza? A: Takav pristup naziva se „remote access“. lozinku korisnika. ne moramo znati sinatksu naredbe. Ukoliko koristimo grafički korisnički interface. Ovaj korisnik ima svu kontrolu nad bazom podataka. 22 | username password .

Pogledajmo ilustraciju: Određeni korisnici mogu mijenjati određene tabele Samo određeni korisnici mogu dodavati/mijenjati podatke u tabeli poslovi (chores). On moţe mijenjati i strukturu te tabele. neki mogu vidjeti samo određene kolone tabela Svi osim duey-a mogu vidjeti kolonu „instructions“ u tabeli chores (zbunjuje ga).. Samo root moţe koristi naredbe INSERT. UPDATE i DELETE nad tabelom chores.Kada kreiramo korisnika na ovaj način.tabele OCJENE GRANT SELECT ON ocjene TO ucenik. osnovni oblik Naredba GRANT omogudava dodjelu prava (permission) korisnicima baze podataka. korisnik kojem bismo dali ove podatke ne bi mogao uraditi ništa nad bazom! 4. koji može uraditi „sve“. korisnik „Elsie“ kreiran ranije ne dobiva nikakva prava nad bazom.. Pomodu ove naredbe možemo potpuno kontrolisati šta korisnik radi nad podacima u tabelama i kolonama tabele. Korisnik happy je odgovoran za tabelu talking_animals. 4.6 Naredba GRANT. Pogleadajmo primjer: Korisnik UCENIK dobiva pravo da čita podatke (SELECT) iz … . Pristup podacima odrežene tabela je omogućen samo odabranim korisnicima Svi osim grumpy moţe zadavati SELECT nad tabelom talking_animals. Potrebna je kontrola pristupa i unutar tabele. Dodjela prava korisniku realizuje se pomodu naredbe GRANT. 23 | .5 Dodjela prava korisnicima Za razliku od korisnika root.3.3.

Npr. Umjesto GRANT navodimo REVOKE. Isprobajte Manage Security alat na kudnoj bazi! 4..tabele OCJENE REVOKE SELECT FROM ocjene TO ucenik. Ovom opcijom dodjeljujemo pravo dodjele odabranog prava drugim korisnicima. Npr. GRANT SELECT ON activities TO elsie.7 Naredba REVOKE Privilegiju koju korisnik posjeduje možemo “opozvati”. NAPOMENA U školskoj bazi nemate prava kreirati nove/ mijenjati korisnike.3. Možemo ukinuti i GRANT OPTION. Za svaku pojedinačnu tabelu trebamo posebnu GRANT naredbu. ali ostaviti privilegiju. umjesto TO navodimo FROM – ostalo je isto. GRANT SELECT ON city TO elsie. posmatrajmo naredbu: GRANT SELECT ON activities TO elsie WITH GRANT OPTION. Korisnik UCENIK dobiva pravo da čita podatke (SELECT) iz … . ako zadamo naredbu… 24 | . Korisnik UCENIK ukidamo pravo da čita podatke (SELECT) iz … .. happy i sleepy zadržavaju pravo brisanje iz tabele chores. ved ima pravo da ovo isto pravo dodjeli i drugim korisnicima (ali samo nad tabelom activities!!!). GRANT SELECT ON location TO elsie. ali vise nemaju pravo da je dodjele drugim korisnicima. Sintaksa ove naredbe je jako slična naredbi GRANT. To radimo pomodu naredbe REVOKE.tabele OCJENE GRANT SELECT ON ocjene TO ucenik.Korisnik treba pristup i ostalim tabelama u bazi.. Npr.. Uz naredbu GRANT možemo koristiti i opciju “WITH GRANT OPTION”. Ovom naredbom elsie ne samo da dobiva pravo da pristupa podacima u tabeli activities.

Ako ne želite da ukidanje privilegija ima uticaja na druge korisnike. Korisnik root dodjelio je korisniku sleepy privilegiju DELETE sa GRANT OPTION nad tabelom chores. Pretpostavimo da root promijeni mišljenje i uskrati pravo brisanja korisniku sleepy. Postoje dva načina kako ovaj problem (ukoliko to uistinu jeste problem) riješiti. Zatim sleepy dodjeljuje privilegiju brisanja korisniku sneezy. koristimo službene riječi CASCADE i RESTRICT. kako slijedi.Posmatrjmo slijededi scenarij. REVOKE DELETE ON chores FROM sleepy. 25 | . Ovim de automatskibiti ukinuto pravo brisanja korisniku sneezy.

prethodnom naredbom oduzimamo pravo DELETE korisniku sleepy.Ako koristimo CASCADE. ukoliko je korisnik kojem ukidamo pravo to isto pravo dodijelio nekome drugom. Ako koristimo RESTRICT. Oba korisnika (sleepy i sneezy) zadržali bi prava koja sui mala prije zadavanja ove naredbe. pri izvršavanju naredbe dobit demo poruku o grešci. onda se ukidanje privilegije automatski odražava na one korisnike koji su privilegiju dobili od korisnika kojima naredbom REVOKE ukidamo neko pravo. Ako bi korisnik root zadao prethodnu naredbu dobio bi poruku o grešci. Npr. a to se odražava in a korisnika sneezy. 26 | .

Stoga u različitim DBMS sistemima možemo sresti dodatne komande i osobine koje nisu dio ovog standarda.1 Uvod u programski jezik SQL SQL je programski jezik 4. Sistemi za upravljanje bazama podataka (Data Baze Management System. Kod-a (E. itd. može sadržati i naredbe za kontrolu toka (if.. Pomodu komandi SQL-a korisniku je omogudeno:          kreiranje objekata baze podataka.  Za razliku od programskog jezika C++.F. naredbe SQL-a se interpretiraju: prevode se i izvršavaju jedna po jedna. ali i ugražuju dodatke. Prevođenje se izvršava pri svakom pokretanju programa.  pravljenje sigurnosnih kopija podataka. koje opmogudava pisanje proceduralnih programskih blokova koji. ANSI) priznaje programski jezik SQL i objavljuje standarde za ovaj progrmski jezik. DBMS) uvažavaju ovaj standard. Naredbe napisane u programskom jeziku SQL mogu se grupisati u takozvane skripte. pristup podacima u bazi. Američki nacionalni institut za standardizaciju (American National Standards Institute. Komande programskog jezika SQL možemo zadavati na različite načine:      sa komandne linije kroz korisnički interface   iz programa napisanih u drugim programskim jezicima  Pored SQL-a. promjenljive i slično.).Modul 3: Analiza i primjena SQL-a 3. SQL naredbe Vedina aktivnosti nad bazom podataka realizuje se pomodu SQL naredbi (SQL statements). kod koga se prije izvršavanja programa sve naredbe programa prevedu. else. vedina DBMS sistema podržava prošireni SQL jezik: PL/SQL (Procedural Language SQL ).F. Sintaksa ovog programskog jezika utemeljena je na radu doktora E. Karakteristike koje slijede iz ovog načina rada su nešto sporije izvođenje.  uvoz/izvoz podataka u/iz baze. Komunikacija korisnika sa bazom podataka odvija se tako što korisnik zadaje komande nad bazom podataka. To je proceduralno proširenje programskog jezika SQL. a potom generiše izvršni kod. FOR). zbog simultanog prevođenja..   kreiranje korisnika i njihovih prava.Codd) i IBM u ranim 1970-im godinama. pored osnovnih SQL naredbi. naredbe ponavljanja (WHILE. ali i jednostavnost jer je mogude trenutno otkriti eventualne pogreške (debugiranjem) tokom izvođenja programa. Npr. generacije. npr. slijededom naredbom pristupili bismo podacima u tabeli “Persons” i zadali da se upisani podaci ispišu na monitoru: SELECT * FROM Persons 27 | . Osnovne osobine jesu da se lako uči i jednostavno koristi.

Data Definition Language (DDL). Znak poslije SQL naredbe? Pojedini sistemi za upravljanje bazama podataka zahtijevaju korištenje znaka .Data Manipulation Language (DML) i naredbe za definisanje podataka . kreiranje indeksa pomodu kojih se ubrzava pristup podacima i slično. na kraju naredbe.brisanje indeksa  28 | . Slijedi pregled nekih naredbi iz ove skupine:                CREATE DATABASE – kreiranje baze podataka (šeme baze podataka) CREATE USER – kreiranje korisnika   ALTER DATABASE – izmjena baze podataka  CREATE TABLE – kreiranje tabele  ALTER TABLE . Ovo je standardni način odvajanja naredbi. Za manipulisanje podacima koriste se naredbe:      SELECT . možemo kreirati takozvane skripte. Na ovaj način. DML i DDL SQL naredbe možemo podijeliti u dvije skupine: naredbe za manipulisanje . koje čini vise SQL naredbi razdvojenih znakom . Skripte omogudavaju izvršavanje vise SQL naredbi jednim pokretanjem. tako da bi “naredba select * from persons” imala isti efekat kao i prethodna .omogudava pristup podacima u bazi DELETE – omogudava brisanje podataka   INSERT INTO – omogudava upisivanje podataka u bazu  DDL naredbe omogudavaju kreiranje objekata baze podataka. kao i u programskom jeziku C++.ॢ SQL ne razlikuje mala i velika slova. prije svega tabela u kojima su podaci. mehanizam kontrole NULL i jedinistvenih vrijednosti.). Pored toga omogudavaju definisanje pravila integriteta (kao što je mehanizam primarnog i stranog ključa. itd.brisanje tabele  CREATE INDEX – kreiranje indeksa  DROP INDEX .izmjena tabele  DROP TABLE ..

customer_name CHAR(30) NOT NULL.) ) ENGINE = InnoDB. customer_name. PRIMARY KEY (customer_id) ) ENGINE= InnoDB. NULL vrijednost: Ako odredimo da je kolona „not null“ onda kolona mora imati dodjeljenu vrijednost prije dodavanja reda u tabelu. Prije kreiranja tabele najprije selektujemo SCHEMU (bazu podataka) tako da MySQL zna gdje da kreira tabelu.. da li se vrijednosti kolone automatski uvedavaju ili koja je to podrazumijevana vrijednost kolone.3. procedure)..  column_name3 definition(s). . Ovo postižemo naredbom „use“  USE MySample DB. DDL naredbe su naredbe pomodu kojih kreiramo i uređujemo objekte baze podataka (tabele. 29 | . poglede.  customer_address CHAR(40). customer_address). column_name2 definition(s)..8 CREATE TABLE Nova tabela dodaje se u bazu pomoci „Create table“ naredbe. 4.  CRATE TABLE table_name (column_name1 definition(s). Primarni ključ je customer_id. PRIMARY KEY (column1.. .   CREATE TABLE customer  ( customer_id INT NOT NULL AUTO_INCREMENT. U nastavku demo pojasniti naredbe koje se odnose na rad sa tabelama.3. Kolone customer_id i customer_name moraju sadržati vrijednost (not null). Customer_id čuva cjelobrojne vrijednosti koje de se automatski uvedavati pri unosu novog reda u tabelu.2 DDL naredbe Kao što je ved pojašnjeno.  Nakon selektovanja baze (scheme) možemo zadavati naredbe nad tom bazom. Ako navedeno samo „null“ ili ne navedemo ništa možemo dodati red u tabelu i bez dodjeljene vrijednosti za tu kolonu. U primjeru koji slijedi kreiramo tabelu „customer“ sa tri kolone (customer_id. column2. iza nje navodimo ime tabele a zatim unutar zagrada specifikaciju kolona tabele. Definitions: Obavezno navodimo tip podataka i opciono definišemo da li kolona može biti NULL.

U osnovi ako kolonu definišemo korištenjem „auto increment“ opcije vrijednost kolone automatski se uvedava svaki puta kada dodamo novi red u tabelu. kolona sa auto increment opcijom mora imati pripadajudi index. Postoje dva ograničenja u vezi sa „auto increment“ opcijom: - samo jedna kolona jedne tabele može imati auto increment. Ovo osigurava da se nad bazom nikada nede izvršiti parcijalna izmjena podataka. Definisanje podrazumijevanje vrijednosti kolone (Default Value): Pomodu „default value“ opcije možemo odrediti vrijednost koja de biti dodijeljena koloni ukoliko korisnik ne upiše vrijednost za tu kolonu. Default value je definiše se pomodu „Default“ ključne riječi u okviru „Create table“ naredbe. 30 | . MyISAM – ovaj tip engine-a je koncipiran specijalno za podršku radu sa tekstualnim podacima bududi da ima veoma dobre performanse kod pretraživanja istih. bududi da to SQL radi automatski . Database Engine („Mašina baze podataka): U okviru „create table“ naredbe definišemo tip Database Engine pomodu „engine“ opcije. Ako nije specificirana „quantity“ prilikom unosa novog reda SQL. Vrijednost(i) primarnog ključa mora biti jedinstvena za svaki red tabele.).Primarni ključ (PK) je jedna ili više kolona koja se koristi za identifikovanje jednog reda tabele. Pri unosu podataka u tabelu ipak možemo specificirati vrijednost za kolonu sa auto increment opcijom. Ako je ključ složen iz više kolona u listi ih odvajamo zarezom. U tom slučaju nije potrebno pisati SQL naredbu za računanje nove jedinstvene vrijednosti kolone koja je primarni ključ. Izbor Database Engine-a vrši se na nivou tabele. PRIMARY KEY (sales_number) ) ENGINE= InnoDB. InnoDB engine osigurava da je svaka transakcija nad bazom 100% kompletirana i omogudava povrat u prethodno stanje. MySQL nudi više različitih tipova Database Engine-apri čemu svaka ima određene prednosti . Ova vrijednost bit de prihvadena sve dok je ona jedinstvena. MySQL de unijeti podrazumijevanu vrijednost 1. Auto_increment je jedna od najjednostavnijih ali veoma korisnih opcija SQL jezika. u slučaju neke nepredviđene situacija (nestanak el. energije i sl. Ovo je posebno korisno ako je kolona primarni ključ. Npr. Transaackija je skup SQL naredbi koji čini jednu logičku cjelinu sa aspekta obrade podataka unutar baze. PK definiše se korištenjem „primary key“ opcije u okviru „crate table“ naredbe. sales_description CHAR (20). sales_quantity INT NOT NULL DEFAULT 1. slijedede SQL naredba definiše podrazumijevanu vrijednost za kolonu za kolonu „Sales quatitiy“: CREATE TABLE sales ( sales_number INT NOT NULL. Neke od Database Engine-a slijede: InnoDB – spada u kategoriju „transaction_safe“ baza podataka.

Ako tabela ima više stranih ključeva. 31 | .MEMORY – Ima iste osobine kao MyISAM kad je u pitanju funkcionalnost s tim što se podaci čuvaju u radnoj memoriji umjesto na hard disku kao prethodna dva. Pogledajmo primjer koji slijedi koji ilustruje najednostavniji način definisanja stranog ključa: Iza ključnih riječi FOREIGN KEY navodimo naziv kolone tabele u kojoj je strani ključ (sid). Primjeri Ako tabela koju kreiramo ima strani ključ. a zatim ključnu riječ REFERENCES iza koje najprije navodimo ime tabele u kojoj je ovaj ključ primarni (student). a zatim naziv primarnog ključa te tabele (BrIndeksa). Kao takav pogodan je za čuvanje privremenih (temporary) pomodnih tabela. navodimo ih u okviru naredbe create table odvojene zarezom. onda to definišemo unutar naredbe CREATE TABLE.

Data je naredba za kreiranje tabale my_contacts. Popunite tabelu sa desne strane upisivanjem šta svaka od linija koda znači.Vjež ba 1. U redovima naredbe gdje se definišu kolone tabele dopišiti i po jedan primjer podataka koji de se u tu kolonu modi upisati 2. Dopunite tabelu: 32 | .

2.3. briše orginalnu tabelu i preimenuje privremenu tabelu. Ponekad. zadajemo naredbu: ALER TABLE product ADD product_descritption CHAR FIRST. Napisati DDL naredbe za kreiranje tabela prema ER dijagramu na slici 3. vrši izmjene privremene tabele. Izmjena i brisanje tabela i kolona Nakon kreiranja tabele ne preporučuje se njena izmjena ukoliko sadrži podatke. Promjena imena tabele i kolone: Za promjenu imena tabele koristimo naredbu „rename table“. Izmjena tabele Izmjena postojede tabele vrši se pomodu „alter table“ naredbe. Izmjena i birsanje kolona Slijededa naredbe dodaje kolone „product_description“ u tabelu „products“ ALER TABLE product ADD product_descritption CHAR Ako treba dodati kolonu i odrediti da bude na poziciji 1. MySQL mijenja tabelu na slijededi način: najprije kopira u privremenu tabelu. Npr: RENAME TABLE products TO proizvodi 33 | .2. neophodne su izmjene i mogu se izvršiti pomodu SQL naredbu. Ako želimo dodati kolonu iza određene kolone koristimo naredbu: ALER TABLE product ADD product_descritption CHAR AFTER product_id Kolona se može izbrisati iz tabele pomodu opcije „drop column“: ALTER TABLE products DROP COLUMN product_desc . međutim. izmjena tipa podataka kolone i promjena imena kolone ili tabele.Dozvoljene izmjene su: - dodavanje ili brisanje kolona.

postiže se pomodu opcije „change“ u okviru „alter table“ naredbe. možemo koristiti i slededu naredbu : ALTER TABLE products RENAME proizvodi Izmjena imena kolone. Brisanje tabele Tabelu brišemo pomodu „drop table“ naredbe. Na prethodnoj slici sa desne strane vidimo opcije On Update i On Delete gdje je kao default vrijednost postavljeno „RESTRICT“. Izmjena tipa podataka kolone Izmjena tipa podatka kolone realizuje se pomodu „modify“ opcije. Npr: ALTER TABLE products MODIFY product_desc INT. Npr: DROP TABLE products Dodavanje i izmjena stranog ključa Dodavanje stranog ključa možemo naknadno uraditi pomodu naredbe ALTER TABLE. Ovakav izbor označava da se ne 34 | . možemo dodati i pravila referencijalnog integriteta tabela kojima demo odrediti kako de se reflektovati izmjene nad parent tabelom t_offices na child tabelu t_employees. SQL Development alatu vidimo slijedede: Pored ovog minimalnog skupa opcija za strani ključ.Opciono. Pri čemu pored novog imena kolone moramo navesti i tip. Iza službenih riječi ADD CONSTRAINT dodajemo naziv ograničenja (FK_employees_1). Ako sada pogeldamo tabelu t_employees u MySQL Workbench. Npr: ALTER TABLE products CHANGE product_desc product_description CHAR (40). Pogledajmo primjer koji slijedi: ALTER TABLE t_employees ADD CONSTRAINT FK_employees_1 FOREIGN KEY (officeCode) REFERENCES t_offices(officeCode) Ovom naredbom tabeli t_employees dodajemo strani ključ kojim je povezujemo preko stranog ključa (polje officeCode) sa tabelom t_offices u kojoj je polje officeCode primarni ključ.

Pokušajmo sada obrisati slog 4 iz tabele t_offices. Pogledajmo primjer. ALTER TABLE t_employees ADD CONSTRAINT FK_employees_1 FOREIGN KEY (officeCode) REFERENCES t_offices(officeCode) ON DELETE CASCADE ON UPDATE CASCADE.dozvoljava izmjena primarnog ključa i brisanje podataka u parent tabeli t_offices sve dok u tabelu t_emloyees ima povezanih slogova. 35 | . Najprije obrišemo ranije postavljeno ograničenje (DROP FOREIGN KEY). jer nije dozvoljeno brisanje reda iz tabele ako postoji child tabela u kojoj je strani ključ sa „RESTRICT“ opcijom. a nakon toga imademo slijedede podatke u tabelama. Izvršavanje naredbe brisanja bide uspješno. Promjenimo sada opciju za strani ključ u tabeli t_employees sa „RESTRICT“ na „CASCADE“. Trenutno se u tabeli t_employees nalaze slijededi slogovi: Pokušajmo obrisati slog sa vrijednošdu 4 u tabeli t_offices: Dobili smo poruku o grešci. ALTER TABLE t_employees DROP FOREIGN KEY FK_employees_1 . a zatim dodamo novo gdje ekcplicitno određujemo ponašanje povezanih tabela kada se nad ovom vrši brisanje ili izmjena.

To je posljedica postavke ON DELETE = CASCADE. Šta de se desiti ako promjenimo vrijednost nekog ključa u tabeli t_offices? Promjenimo kod u redu 1 u kod 11. Nakon ove izmjene imamo slijedede podatke: 36 | .U tabeli t_employees automatski su obrisani svi podaci gdje je u koloni officeCode bila vrijednost 4.

37 | .Primjedujemo da su se automatski izmjenili svi povezani redovi tabele t_employee tako da se umjesto officeCode 1 sada pojavljuje kod 11. Posmatrajmo šta de se desiti ako odaberemo opciju „SET NULL“ u ON DELETE i ON UPDATE izbornicima. Opcija „NO ACTION“ ima isti efekat kao i „RESTRICT“. Izvršavanje druge naredbe nede biti mogude. Nakon ovoga postavljanje stranog ključa sa SET NULL opcijom je uspješno. onda najprije moramo promijeniti kolonu officeCode kako slijedi: ALTER TABLE t_employees CHANGE COLUMN officeCode officeCode VARCHAR(10) NULL. ALTER TABLE t_employees ADD CONSTRAINT FK_employees_1 FOREIGN KEY (officeCode) REFERENCES t_offices(officeCode) ON DELETE SET NULL ON UPDATE SET NULL. Obrišimo sada slog sa kodom 11 iz tabele t_offices i pogledajmo tabelu t_customers: Primjedujemo da u tabelu t_employees redovi u kojima je ranije bilia vrijednost 11 u koloni officeCode imaju vrijednost NULL. Ako ipak želimo da se ova naredba uspješno izvrši. jer je u tabelu t_employees postavljeno NOT NULL u koloni officeCode. Ponovno brišemo postojede ograničenje i dodajemo novo: ALTER TABLE t_employees DROP FOREIGN KEY FK_employees_1 .

 Razred. sa opcijom za automatsko popunjavanje)..Izabrati Export - Odrediti gdje snimiti podatke.. cio broj sa maksimalno 2 cifre i podrazumijevanom vrijednošdu 1  Odjeljenje. sa atributima:      ID.razred_id i povezuje sa tabelom razred. Uraditi slijedede za svaku tabelu: . VARCHAR2(2)  Primarni ključ tabele je kolona ID Zadati DDL naredbu kojom se tabela učenik mijenja tako da joj se dodaje strani ključ Razred. ZADATAK 1: Kreirati tabelu učenik sa kolonama:        ID (cio broj. objasniti je. snimiti screenshoot.. obavezno polje. Za svaki od tih slogova upisati po 3 sloga u tabelu Ucenik.. Upisati 5 slogova u tabelu Razred. Obratiti pažnju na izbor Save as type! 38 | . a zatim iza kolone „adresa“ dodati kolonu „poštanski broj“ (char 5)  promijeniti ime kolone „adresa“ u „ulica_broj“  obrisati kolonu „redni broj“  promijeniti tip podataka kolone „poštanski broj“ u INT tip     ZADATAK 2: Kreirati tabelu razred. auto increment)  prezime (char 30)  Ime (char 20)  Adresa (char 50)  Korištenjem odgovarajude DDL naredbe uraditi sledede:      u tabelu učenik dodati kolonu „telefon“ (char 20)   na prvu poziciju dodati kolonu „redni broj“.Edit table data . Kopirati zadatu naredbu.Vjež ba Svaku od radnji dokumentovati u Word dokument. Napraviti sigurnosnu kopiju upisanih podataka u tekstualni file gdje de se sačuvati INSERT naredbe. cio broj.

39 | . RESTRICT. Isprobati sve četiri opcije (CASCADE. Svaku od opcija dokumentovati – sačuvati screenshot i pojasniti. NO ACTION). ZADATAK 3: Napisati naredbe za podešavanje Foreign Key Options stranog ključa tabele Ucenik.Dobit dete file koji sadrži insert naredbe pomodu kojih možete ponovo dodati podatke u slučaju da ih izgubite tokom rada. SET NULL.

Pomodu ove naredbe možemo ubaciti jedan ili više redova u tabelu ili jedan ili više redova koje selektujemo iz neke druge tabele baze podataka. navođenjem NULL u insert naredbi prepuštamo bazi podataka da automatski generiše jedinstvenu vrijednost za ovu kolonu U naredbi INSERT treba voditi računa o redoslijedu navođenja vrijednosti. description. name. description. 'HP Proliant SG4'. 'server'. Umjesto navođenja obje liste INSERT možemo zadati i bez liste naziva kolona naprimjer. 'HP Proliant SG4'. Npr: INSERT INTO products ( id. 40 | . slijededa naredba imala bi isti efekat kao i prethodna INSERT INTO products VALUES ( NULL. Naime on mora odgovarati redoslijedu navođenja imena kolona u prethodnoj listi.3 DML naredbe 3. name. U prethodnoj naredbi za „id“ određujemo vrijednost NULL pod pretpostavkom da je pri kreiranju tabele kolona „id“ definisana sa AUTO_INCREMENT opcijom. 100). Dodavanje više redova u tabelu: Umjesto zadavanja više INSERT naredbi za umetanje u istu tabelu možemo jednom INSERT naredbom umetnuti više redova na slijededi način: INSERT INTO products ( id. 'HP Proliant SG4'. 100). U prethodnoj naredbi moramo imati na umu da lista vrijednosti redoslijedom navođenja odgovara redoslijedu navođenja imena kolona pri kreiranju tabele. quantity) VALUES ( NULL.Unos podataka u bazu podataka Unos podataka u tabelu realizujemo pomodu naredbe INSERT.3. quantity) VALUES ( NULL. 'server'.1 INSERT . Unos jednog reda: Da bi smo umetnuli jedan red iza službenih riječi „INSERT INTO“ navodimo ime tabele a zatim listu naziva kolona unutar „( )“ iza čega slijede službena riječ „VALUES“ i lista vrijednosti koje ubacujemo.3.

'Printer'. (NULL. (NULL. 3). 100) . quantity) FROM old_products. description. 'HP Probook'. name. 'laptop'.'server'. To možemo pomodu „INSERT SELECT“ naredbe. name. Primjeri 41 | . Npr: slijededom naredbom u tabelu „new_products“ upisujemo podatke iz postojede tabele „old_products“ : INSERT INTO new_products ( id. quantity) SELECT (id. description. 'HP Deskjet'. 200). Umetanje redova pmodu SELECT naredbe: Ponekad je potrebno umetnuti u tabelu podatke iz neke druge postojede tabele iste baze podataka.

jednu ili više kolona tabele. ime_kolonen=vrijednostn Ako želimo izmjeniti samo odabrane redove koristimo WHERE...2 Izmjena podataka u tabeli Izmjenu podataka realizujemo pomodu naredbe UPDATE. . Pomodu ove naredbe možemo izmjeniti sve ili samo odabrane redove. . U opštem slučaju zadajemo naredbu: UPDATE ime_tabele SET ime_kolone1=vrijednost1.3. Ako želimo izmjeniti sve podatke tabele navodimo: UPDATE ime_tabele SET ime_kolone1=vrijednost1.3. Zadajemo naredbu: UPDATE products SET description='velicina38crvene_cipele. 42 | . name='velika crvena cipela'.. ime_kolonen=vrijednostn WHERE kriterij Npr: Ako želimo u tabeli products izmjeniti podatke o proizvodu „id=12134“ te postaviti „description=veličina38crvene cipele“ a „name=velika crvena cipela“..

15 Ovom naredbom bit de prikazani slogovi od 11 do 25 Eliminisanje istih vrijednosti u SELECT upitu možemo postidi pomodu ključne riječi DISTINCT. ona omogudava pristup podacima pohranjenim u tabeli baze podataka. 43 | . Npr.WHERE id=12134. Npr: * SELECT * FROM products LIMIT 10 Pored ovoga LIMIT možemo koristiti s dva parametra. Za brisanje tabele treba koristiti naredbu DROP TABLE 3. Npr: * SELECT DISTINCH city FROM customers Prethodnom naredbom ispisat demo jedinstvene vrijednosti kolone „city“ u tabeli „customers“.3 Brisanje podataka iz tabele: Da li svi redovi ili samo odabrani red mogu biti obrisani pomodu naredbe DELETE.4 Kreiranje upita nad bazom podataka Jedna od najčešde korištenih naredbi je upravo naredba SELECT.3. SELECT * FROM products LIMIT 10. 3. Najjednostavniji oblik naredbe SELECT je listanje podataka upisanih u jednu kolonu tabele: SELECT product_name FROM products Prikazuje se lista svih naziva proizvoda upisanih u tabelu „products“ U opštem slučaju iza SELECT navodimo listu imena kolona odvojenih zarezom npr: SELECT productName. Treba imati na umu da naredba DELETE briše samo podatke a ne i samu tabelu. Ako želimo svim slogovima u tabeli odrediti količinu 13 zadajemo naredbu: UPDATE products SET quantity=13. productDescription FROM products Pri listanju podataka iz tabele možemo ograničiti broj slogova koji de biti zahvadeni. pri čemu prvi određuje koliko slogova de biti preskočeno a drugi koliko narednih de biti obuhvadeno upitom. To realizujemo pomodu opcije LIMIT iza koje navodimo broj koji označava koliko slogova treba selektovati.Preporučljivo je korištenje naredbe DELETE isključivo u kombinaciji sa WHERE jer bez te klauzule brišemo sve podatke iz tabele. Slijededa SQL naredba briše onaj red iz tabele products u kojem je „id“ 12134: DELETE FROM products WHERE id=12134.

<>(!=). <=. Umjesto =(!=). Kao relacioni operator možemo navesti: =. Npr: SELECT * FROM customers WHERE state IS NULL Prethodnom naredbom ispisuju se podaci o kupcima kod kojim nije upisana vrijednost u kolonu „state“ Vježbe: 1. Za kolonu koja nema vrijednost kažemo da sadrži NULL vrijednost. U opštem slučaju WHERE koristimo na slijededi način: SELECT column(s) FROM table WHERE column=value Iza WHERE navodimo ime kolone koja je osnova upita a zatim relacioni operator u kojem definišemo poređenje i konačno vrijednost sa kojom poredimo: SELECT productName. Kada vršimo poređenje sa NULL vrijednošdu koristimo operator poređenja „IS (NOT)“. <. customerName Ovom naredbom određujemo da se najprije izvrši sortiranje po koloni city. Npr: SELECT * FROM customers ORDER BY city. Npr. Iza „order by“ navodimo ime jedne ili više kolona po kojima lista treba da bude sortirana. Napisati naredbu kojom ispisujemo jedinstvene vrijednosti iz kolone ciy tabele customers. Modifikovati prethodnu naredbu tako da se ispisuju podaci o korisnicima kod kojih u polju „country“ pise USA SELECT DISTINCT city FROM customers WHERE country='USA' ORDER BY city DESC. Ako želimo sortiranje u opadajudem redoslijedu moramo navesti službenu riječ „desc“ (descending). 44 | . SELECT * FROM customers ORDER BY customerName Prethodna naredba ispisuje spisak kupaca u rastudem redoslijedu (ascending-„asc“). Npr: SELECT * FROM customers ORDER BY customerName DESC Ukoliko želimo sortiranje po više kolona navodimo ih u listi iza klauzule „ORDER BY“. >=. 2. sortirane u opadajucem redoslijedu po istoj toj koloni SELECT DISTINCT city FROM customers ORDER BY city DESC.U opštem slučaju SELECT ispisuje podatke iz tabele u redoslijedu kako su oni upisani. buyPrice FROM products WHERE buyPrice <50 Prethodnom naredbom ispisujemo one proizvode koji u koloni „buyPrice“ imaju vrijednost manju od 50. U praksi najčešde pristupamo samo odabranim redovima što postižemo pomodu klauzule WHERE. >. Korsinik može definisati redoslijed prikaza podataka pomodu ključnih riječi „order by“. a unutar toga po koloni „customerName“ Definisanje kriterija pretraživanja (WHERE): Dosadašnje SELECT naredbe pristupale su svim podacima (svim redovima) tabele.

Zadajemo slijededu naredbu: SELECT * FROM products WHERE buyPrice >=100 AND buyPrice <=200 Prethodna naredba ispisat de samo proizvode koji zadovoljavaju oba uslova. Ukoliko želimo drugačiji redoslijed testiranja izraza. Napisati naredbu kojom iz tabele „customers“ brišemo sve redove kod kojih je vrijednost polja „creditLImit“ manja od 100. OR.3. Npr: 45 | . Neovisno o redoslijedu navođenja. 4. IN. OR. IN. Ako želimo ispisati proizvode čija vrijednost „buyPrice“ nije u zadatom opsegu možemo: a) koristiti operator NOT: SELECT * FROM products WHERE NOT (buyPrice >=100 AND buyPrice <=200) b) koristenjem operatora OR SELECT * FROM products WHERE buyPrice <100 OR buyPrice >200 Ukoliko u istoj SELECT naredbi imamo više uslova povezanih logičkim operatorima redoslijed testiranja uslova je tačno definisan pravilom. Napisati naredbu koja lista sve podatke iz tabele „customers“ za koje je upisana vrijednost u kolonu „state“ SELECT * FROM customers WHERE state IS NOT NULL. NOT. LIKE: U okviru WHERE opcije možemo navesti više uslova korištenjem operatora AND. MySql najprije provjerava AND izraz a zatim OR izraze. Operatori AND. Želimo ispisati samo one proizvode čija cijena pada u opseg od 100 do 200. Npr. NOT. koristimo zagrade. DELETE FROM customers WHERE creditLimit<100.

Vijeku koji sadrže string „Dodge“ SELECT * FROM product WHERE productName LIKE '19__' AND '%Dodge%' Primjer 46 | . Zajmenski karakteri mogu se navesti na početku. 'Cars' OR productLine='Motorcycle'. Operator IN omogudava provjeru da li se vrijednost nekog polja poklapa sa nekom od vrijednosti koje navodimo iza operatora IN. Godine nekog vijeka. 'Cars'. unutar ili na kraju stringa sa kojim se vrši poređenje. Npr: ako imamo kolonu „godina“ u tabeli „događaji“i želimo ispisati sve redove o događajima koji su se desili 13. Ako želimo izlistati proizvode koji ne pripadaju ni jednoj navedenoj proizvodnoj liniji onda koristimo operator NOT IN SELECT * FROM product WHERE productLine NOT IN ('Truck'.SELECT * FROM product WHERE (productCode=x1 OR productCode=x2) AND buyPrice>100. počevši od pozicije na kojoj je naveden. Znak „%“ zamjenjuje bilo koji skup karaktera. SELECT * FROM događaj WHERE godina LIKE '__13' Ako želimo ispisati sve slogove kod kojih productName počinje karakterima „BMW“ zadajemo naredbu: SELECT * FROM products WHERE productName LIKE 'BMW%' Ako želimo ispisati sve slogove kod kojih productName završava karakterima „BMW“ zadajemo naredbu: SELECT * FROM products WHERE productName LIKE '%BMW' Ako želimo ispisati sve proizvode koji bilo gdje u koloni producName sadrži karaktere „BMW“zadajemo naredbu: SELECT * FROM products WHERE productName LIKE '%BMW%' Zamjenske karaktere „_“ i „%“ možemo kombinovati u istom LIKE uslovu. 'Motorcycle') Korištenje operatora LIKE: Operator LIKE koristimo za poređenje stringova u kombinaciji sa zamjenskim karakterima _ ili %. Slijedeca naredba ispisuje proizvode koji u „productName“ sadrži samo proizvode proizvedene u 20. 'Cars'. 'Motorcycle') Ova naredba ima isto značenje kao: SELECT * FROM product WHERE productLIne='Truck' OR productLine=. Npr: SELECT * FROM product WHERE productLine IN ('Truck'. Zamjenski karakter „_“ zamjenjuje jedan karakter na mjestu na kome se navede.

officeCode.phone FROM employees.column2 FROM table1. offices.city. Spajanje tabela vrši se korištenjem stranih ključeva pomodu kojih se i uspostavljaju tabele između tabela. table2 WHERE table1. o. offices WHERE employees.t2.officeCode.officeCode=o.FirstName.city. Rezultat prethodnog upita bili bi samo oni redovi tabele 1za koje vrijednost kolone 1 ima odgovarajudi red u kome u tabeli 2 u kome kolona 2 ima istu vrijednost kao i kolona 1 iz tabele 1.lastName.lastName. e.5 Spajanje tabela (join) Pomodu SELECT naredbe možemo pristupati podacima iz više od jedne tabele. o. table2. Prethodnom naredbom iz tabele employees čitamo vrijednosti kolona LastName i FirstName a iz tabele Offices vrijednosti City i Phone do kojih dolazimo putem stranog ključa OfficeCode u tabeli Employees.employees. Isti efekat postižemo i korištenjem sledede naredbe: SELECT e. SELECT t1.phone FROM e. U opštem slučaju spajanje tabela realizuje se na slededi način: SELECT tabel1. Najprostiji oblik spajanja tabela jeste „Kartezijev proizvod“ gdje se svaki redu jedne tabele povezuje sa svim redovima druge tabele. Slijedi primjer spajanja SELECT employees.column1=table2.FirstName.offices WHERE e. employees.* FROM t1.3.column2. o.officeCode=Offices. t2.column1. U praksi „Kartezijev proizvod“ se rijetko koristi.*. 47 | . tako da ako prva tabela ima „n“ redova a druga „m“ spajanjem dobijemo „n*m“ redova. offices.

MySql omogucava definisanje izraza i koristenje ugradjenih funkcija.Umjesto koristenja punog naziva „tabela.*. o. tada mozemo zadati naredbu: SELECT kolicina*cijena AS iznos FROM stavke_narudzbe Prethodnom naredbom određujemo da se izracuna vrijednost izraza (cijena*kolicina) te da se toj koloni pridruzi naziv „iznos“. kao u prethodnom primjeru.customerNumber = o.productName. novu vrijednost možemo dobiti pomodu funkcije „Concat“ koja omogucava nadovezivanje stringova (konkatenencija). onda pravimo vanjsko (alter) spajanje: SELECT c. SELEECT o. p.SELECT omogudava povezivanje više od dvije tabele.ProductCode=p. Npr predpostavimo da u tabeli „stavke_narudzbe“ imamo kolone: koli. ime) AS ime FROM ucenik 48 | . Mogude je napraviti upite u kojima određujemo selektovanja svih podataka jedne tabele.OrderNUmber=od. Alias određujemo u FROM dijelu SELECT naredbe.ina i cijena.od.ProductCode Prethodnom naredbom povezujemo tri tabele u okviru WHERE klauzule moramo obezbijediti uslov njihovog međusobnog povezivanja kako ne bi smo dobili „Kartezijev proizvod“ tabela. pa i u slučaju da u drugoj tabeli nemamo vrijednsosti po kojima vršimo selektovanje. products.priceEach FROM orders.kolona“ mozemo koristiti alias (drugo ime) tabele. od. Tako spajanje nazivamo „vanjsko spajanje“ (alter join).6 MySql funkcije U praksi se cesto namece potreba za generisanje novih vrijednosti na bazi postojecih vrijednosti upisanih u tabele baze podataka.: SELECT Concat (prezime.* FROM customers LEFT JOIN (orders) ON c.OrderNumber AND od. Ako želim ispisati podatke o korisnicima i narudžbama a da pri tome želimo vidjeti i korisnike koji nemaju narudžbe. od.customerNumber 3. orderDetails. Npr.orderNumber. Do sada koristene SELECT naredbe prikazuju samo one redove gdje postoji odgovarajuda vrijednost u obje tabele.o.orderDate. Npr ako u tabeli ucenik imamo kolone: prezime i ime. Izraze možemo navesti i iza „WHERE“: SELECT kolicina*cijena AS iznos FROM stavke_narudzbe WHERE (kolicina*cijena)>50 Pored matematičkih operatora i naziva kolona u izrazima možemo koristiti MySql funkcije.quantityOrdered.p WHERE o. o.

Funkcija Concat moze sadrzati vise argumenata kao npr: SELECT Concat (prezime. POWER() Returns the argument raised to the specified power RADIANS() Returns argument converted to radians RAND() Returns a random floating-point value ROUND() Rounds the argument SIGN() Returns the sign of the argument SIN() Returns the sine of the argument SQRT() Returns the square root of the argument TAN() Returns the tangent of the argument * Times operator TRUNCATE() Truncates to specified number of decimal places specified in the argument 49 | . ATAN() Returns the arc tangent of the two arguments ATAN() Returns the arc tangent / Division operator CEILING(). '. ubacujemo znak „ . ime) AS ime FROM Ucenik Prethodnim izrazom izmedju prezime i ime. „.Rezultujuci skup sadrzat ce kolonu ime koja sadrzi vrijednosti iz kolone prezime kojoj je dodata vrijednost iz kolone ime. CEIL() Returns the smallest integer value not less than the argument COS() Returns the cosine COT() Returns the cotangent DEGREES() Convert radians to degrees DIV() Integer division EXP() Raise to the power of of the argument FLOOR() Returns the largest integer value not greater than the argument MOD() Returns the remainder LN() Returns the natural logarithm of the argument LOG10() Returns the base-10 logarithm of the argument LOG2() Returns the base-2 logarithm of the argument LOG() Returns the natural logarithm of the first argument - Minus operator % Modulo operator PI() Returns the value of pi + Addition operator POW(). '. Generalno Sql funkcije možemo podijeliti u 4 kategorije:        Funkcije za rad sa stringovima  Matematicke funkcije  Funkcije za rad sa datumom i vremenom  Agregatne funkcije  Matematičke funkcije ABS() Returns the absolute value ACOS() Returns the arc cosine ASIN() Returns the arc sine ATAN2(). CONCAT je jedna od funkcija za rad sa stringovima.

Funkcija ACOS(X): Funkcija ACOS() vrada vrijednost arcus cos od X. ----> 1.5707963267949 Funkcija ASIN(X): Funkcija ASIN() vrada vrijednost arcus sin od X. ----> 0 MySql-> SELECT ACOS (1.0001).- Change the sign of the value passed as an argument U slučaju greške (Error) sve matematičke funkcije vradaju NULL vrijednost. ----> NULL MySql-> SELECT ACOS(0). ----> 2 MySql-> SELECT ABS(-32). ----> 123 Ovu funkciju mogude je koristiti i sa BIGINT varijablama. Funkcija ABS(): Funkcija ABS() vrada apsolutnu vrijednost od X: MySql-> SELECT ABS(2). U slučaju da je X izvan opsega -1 do 1 funkcija de vratiti NULL vrijednost MySql-> SELECT ACOS(1). ----> 32 MySql -> SELECT ABS(-123). U slučaju da je X izvan opsega -1 do 1 funkcija de vratiti NULL vrijednost 50 | .

1071487177941 Funkcija ATAN(Y.78539816339745 MySql-> SELECT ATAN2(PI(). MySql-> SELECT ATAN(-2. ATAN2(Y.5707963267949 Funkcija „division“ /: Funkcija dijeljenja (/): MySql-> SELECT 3/5.60 Dijeljenje sa nulom nije dozvoljeno. ----> -1. MySql-> SELECT ATAN(2).2). ----> 1. sa izuzetkom što se predznaci oba argumenta koriste za određivanje u koje kvadrantu se nalazi rezultat. ----> 0.57079633 Funkcija ATAN (X): Funkcija ATAN() vrada vrijednost arc tan od X. ----> 1.2) ----> -0.X): Funkcija vrada vrijednost arc tan dvije varijable (ugla) X i Y.X). ----> 0.20135792079033 MySql-> SELECT ASIN (1).MySql-> SELECT ASIN (0.1071487177941 MySql-> SELECT ATAN (-2). 0). ----> 1. U slučaju da se pokuša dijeljenje sa nulom funkcija vrada NULL vrijednost. Identično računanju primjera: arc tan Y/X. Funkcija SELECT radians('x') Vraca vrijednost argumenta x konvertovanog iz stepeni u radijane (Napomena π radiana jednako je 180 stepeni 51 | .

22464679914735e-016 Funkcija SELECT SQRT(određeni broj) 52 | . RAND() from T +------ |i +------ +-----------------.0. Ako u zagradu funkcije odredimo neki broj.+ | 1 | 0.83482678498591 | +------ +-----------------.+ | RAND() | +-----------------.+ Funkcija SELECT ROUND (odredjeni decimalni broj. SELECT I.od korisnika definisano.1 na osnovu unesenog broja. Ako broj decimala nije određen onda ce se broj zaokruziti na 0 decimala SELECT ROUND(-1. a 0 u slucaju da nije ni jedno od dvoje prethodnih slucaja SELECT SIGN(23) mysql->-1 Funkcija SELECT SIN(određeni ugao) Vraca nam sinus određenog ugla (gdje je ugao napisan u radijanima) Select SIN(PI()) Mysql->1.93845168309142 | | 3 | 0. Ako je rezultat -1 znaci da je negativan broj. određen broj decimala. 1 da je pozitivan.Select RADIANS(PI()) mysql>0.61914388706828 | | 2 | 0. broj decimala) Zaokruzuje određeni decimalni broj na . funkcija ce nam uvijek izabiciti isti rezultat za određenu kolonu I tabelu.0548311355616075 Funkcija SELECT ime_kolone RAND () FROM ime_tabele Vraca slucajno određene decimalne realne vrijednosti izmedu 0 I 1.23) Mysql->-1 Funkcija SELECT SIGN(određeni realni broj) Vrada nam brojeve -1.

53 | . SELECT TRUNCATE(1234. Broj 123 da zaorkuzimo na -2 mjesta. * CEIL() Je sinonim za CEILING() Funkcija * COS() mysql> SELECT COS(PI()).23).22464679914735e-016 Funkcija SELECT vrijednost1*vrijednsot2*…*vrijednostN Vraca nam proizvod na osnovu upisanih zadanih vrijednosti SELECT 2*2*3 Mysql->12 Funkcija SELECT TRUNCATE((odredjeni decimalni broj.Vraca nam kvadratni korijen unesenog broja SELECT SQRT(4) mysql->2 Funkcija SELECT TAN(određeni ugao) Vraca nam tangenz određenog ugla (gdje je ugao napisan u radijanima) Select TAN(PI()) mysql->- 1. -2) mysql->1200 Funkcija SELECT –vrijednost neka Vraca nam suprotnu vrijednsot određene vrijednosti SELECT --3 mysql-> Funkcija *CEILING() mysql> SELECT CEILING(1. dobit cemo 100. broj mjesta da zaorkuzi) Radi isto kao i SELECT ROUND() ali ova funkcija zaokruzuje i brojeve koje nisu decimalne vrijednosti kao Npr.23). -> 2 mysql> SELECT CEILING(-1. -> -1 Funkcija vrada najmanju cjelobrojnu vrijednost ne manju od unešene(x).

Funkcija * COT() mysql> SELECT COT(12).Ako je vrijednost 0 daje NULL vrijednost. Funkcija * DEGREES() mysql> SELECT DEGREES(PI()). -> 90 Konvertuje radijane u stepene. mysql> SELECT 5 DIV 2. 54 | .-> -1 Daje kosinus x gdje je x dat u radijanima.5726734063977 mysql> SELECT COT(0). -> 180 mysql> SELECT DEGREES(PI() / 2). -> 2 Funkcija * EXP() mysql> SELECT EXP(2). -> -1. Funkcija * DIV() Cjelobrojno dijeljenje. -> NULL Daje vrijednost kotangens x.

M). -> 1.13533528323661 mysql> SELECT EXP(0).3890560989307 mysql> SELECT EXP(-2).2).N MOD M Vrada ostatak N podjeljen sa M. 55 | .141592653589793116 Funkcija POW(x.y) Vrada vrijednost X i podiže na vrijednost Y mysql> SELECT POW(2.-> 7. Funkcija Radians () „Vrada argument x.5707963267949 Funkcija PI() Vrada vrijednost π (pi ) mysql> SELECT PI(). pretvara iz stupnjeva u radijane. -> 0.141593 mysql> SELECT PI()+0.-2). -> 1 Vrada vrijednost e (osnova prirodnog logaritma) uvedanu na x.Inverzija ove funkcije je LOG ili ln. -> 3. -> 4 mysql> SELECT POW(2.POWER(x. -> 3.25 POWER je sinonim za POW() Funkcija Modulo operator ( %) „MOD(N. -> 0.N%M. (Imati na umu da π radijana iznosi 180 stepeni)“ mysql> SELECT RADIANS(90).y).000000000000000000.

mysql> SELECT MOD(234. -> 2 mysql> SELECT 29 MOD 9.5. mysql> SELECT MOD(34. -> 2 Ova funkcija je siguran za uporabu s BIGINT vrijednosti MOD.3). -> -2 56 | .također radi i na vrijednostima koje su razlomljeni dio i vrada ostatak nakon dijeljenja. 10). -> 4 mysql> SELECT 253 % 7.9). -> 1. 0) vrada NULL Funkcija Addition operator (+) mysql> SELECT 3+5. -> 8 Funkcija Minus operator mysql> SELECT 3-5. -> 1 mysql> SELECT MOD(29.5 MOD (N.