You are on page 1of 88

SVEUĈILIŠTE U MOSTARU

FAKULTET STROJARSTVA I RAĈUNARSTVA

BAZE PODATAKA

Nastavnik: Prof.dr.sc. Draţena Tomić


Asistent: Goran Kraljević, dipl.ing.raĉ.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 1

O predmetu

Web
http://www2.fsr.ba/nastava/baze

Pitanja, primjedbe, dogovor za konzultacije ...

 To: goran.kraljevic@hteronet.ba
 Subject: Baze

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 2

1
Polaganje ispita kroz kolokvije ...

1. kolokvij (Modeliranje + Teorija) 25 bodova


2. kolokvij (SQL + Teorija) 35 bodova
Laboratorijske vjeţbe 30 bodova
Nazoĉnost na nastavi 5 bodova
Aktivno sudjelovanje u nastavi 5 bodova

1. test (Modeliranje) 10 bodova


2. test (SQL) 10 bodova
3. test (SQL) 10 bodova

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 3

Uvod

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 4

2
Sustav za upravljanje bazama podataka

• Baza podataka je skup meĎusobno povezanih podataka, pohranjenih


zajedno bez štetne ili nepotrebne (nekontrolirane) zalihosti (redundancije),
s ciljem da ih koriste različite aplikacije. Podaci su pohranjeni u obliku
neovisnom od programa koji ih koriste. Unos, izmjena i dohvat podataka
obavlja se ISKLJUČIVO kroz zajedničko i kontrolirano sučelje.
• Programski sustav koji omogućava
upravljanje bazom podataka je
sustav za upravljanje bazama
podataka, SUBP (DBMS -
Database Management System).
• Korisnik ili korisnički program postavlja
zahtjev za obavljanjem neke operacije
s podacima, a SUBP ga analizira,
provjerava, optimizira, transformira u
niz operacija koje je potrebno obaviti
na fizičkoj razini, obavlja operacije i
vraća rezultat.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 5

Osnovni pojmovi

• Entitet, Atribut, Veza ...


Osnovni tipovi veza:
− Jedan-prema-jedan (1:1)
1..1 : 1..1
− Jedan-prema-više (1:N)
1..1 : 0..*
− Više-prema-više (N:N)
0..* : 0..*

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 6

3
Kljuĉevi, ograniĉenja u relacijskom modelu ...

• Primarni kljuĉ (engl. Primary key)

• Vanjski ili strani kljuĉ (engl. Foreign key)

• Entitetski integritet

• Referencijalni integritet

primarni kljuĉ
primarni kljuĉ strani kljuĉ entitetski integritet
entitetski integritet referencijalni
integritet

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 7

Razrješavanje N:N relacije

• U slučaju N:N relacije – u relacijskom modelu će nastati nova tablica, koja


će minimalno sadržavati atribute koji će biti strani ključevi na dvije tablice
koje su bile u više-prema-više (N:N) vezi.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 8

4
UML (Unified Modeling Language)

Zašto UML (odnosno korištenje jedne notacije)?


• Korištenje jednog jezika i notacije bitno olakšava komunikaciju izmeĎu
članova različitih timova (projektanti baze podataka, analitičari,
programeri aplikacije) i time doprinosi da se svi sudionici koji
participaraju u projektu osjećaju dijelom jedne cjeline.

Osnivaĉi UML-a

Grady Booch Ivar Jacobson James Rumbaugh

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 9

Relacije u UML-u

 ZAVISNOST (dependency)

 ASOCIJACIJA (association) 1 1..*

 AGREGACIJA (aggregation)

 GENERALIZACIJA (generalization)

 REALIZACIJA (realization)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 10

5
UML notacija ...

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 11

Modeliranje
primjeri

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 12

6
Primjer 1.

• Na slici je dana denormalizirana tablica s nazivima stupaca i


vrijednostima redaka.

Napraviti normalizirani model podataka s pripadajućim entitetima,


atributima i vezama izmeĊu njih.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 13

Normalizacija na 1NF

• Tablica se nalazi u 1NF ako su svi nekljuĉni atributi funkcijski


ovisni o kljuĉu.
– Postoji funkcijska zavisnost : Matbr → Prezime, Ime
– Ne postoji funkcijska zavisnost : Matbr → SifPred Matbr → NazPred
Matbr → DatIsp Matbr → Ocjena
Matbr → SifNas Matbr → PrezNas

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 14

7
Normalizacija na 2NF

• Tablica je u 2NF ako i samo ako je u 1NF i ako su svi nekljuĉni


atributi potpuno funkcijski ovisni o kljuĉu.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 15

Normalizacija na 3NF

• Tablica je u 3NF ako i samo ako je u 2NF i ako niti jedan


nekljuĉni atribut nije tranzitivno ovisan o kljuĉu.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 16

8
Primjer 1. ( ER model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 17

Primjer 1. ( Relacijski model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 18

9
Primjer 2.

• Faktura je dokument koji se šalje kupcu kako bi mogao izvršiti plaćanje


kupljene robe. Da bi se napravila faktura moraju postojati osnovni
podaci o kupcu (naziv, adresa, telefon i sl.), podaci o fakturi (broj
fakture, datum izdavanja, broj narudžbe prema kojoj je raĎena, rok
plaćanja, iznos za plaćanje i sl.), kao i podaci o kupljenim artiklima
(naziv, jedinica mjere, kupljena količina, cijena i sl.).

Faktura se sastoji od 2 osnovna dijela:


- Zaglavlje fakture koje sadrži zajedničke, opće podatke
- Stavke fakture s pojedinačnim artiklima, količinama i cijenama.

Definirati sve entitete, atribute i veze za proces Fakturiranja kupcima.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 19

Primjer 2. ( ER model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 20

10
Primjer 2. ( Relacijski model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 21

Primjer 3.

• Profesionalni programer Marko Marković odlučio je napraviti program


za evidentiranje svih programa koje je uradio, korisnika kod kojih ti
programi rade, kao i ostvarene zarade po svakom programu.

Za svaki program se evidentira vrijeme utrošeno za njegovu izradu,


kao i vrijeme utrošeno kod korisnika za prilagodbu programa
korisničkim zahtjevima, kad je program pušten u rad kod korisnika,
kao i koliko je od korisnika naplaćeno za taj program. TakoĎer se
evidentira da li je program u uporabi tj. aktivan ili ne.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 22

11
Primjer 3. ( ER model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 23

Primjer 3. ( Relacijski model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 24

12
Primjer 4.

• Na Fakultetu strojarstva i računarstva u Mostaru evidentirani su podaci o


kandidatima koji su se prijavili na razradbeni ispit i njihovim rezultatima.
Evidentiraju se podaci o:
- kandidatu: JMBG, ime, prezime, mjesto roĎenja, završena srednja
škola (šifra, naziv, adresa, poštanski broj mjesta, mjesto, šifra općine i
naziv općine u kojoj se škola nalazi)
- za svakog kandidata ocjena iz pojedinih predmeta iz srednje škole –
šifra i naziv predmeta, razred i ocjena. Šifra odreĎuje predmet u nekom
razredu (godini), npr. Matematika u 1.razredu i Matematika u 2.razredu
imaju različite šifre. Isti predmeti u različitim školama imaju istu šifru
npr. Matematika iz 1.razreda ima istu šifru za sve škole
- podaci o zadacima na razradbenom ispitu – redni broj zadatka, tekst
zadatka, točan odgovor (A, B, C, D ili E)
- za svakog kandidata odgovori koje je dao na zadatke (odgovor za svaki
pojedini zadatak mogu biti A, B, C, D, E ili ništa)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 25

Primjer 4. ( ER model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 26

13
Primjer 4. ( Relacijski model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 27

Primjer 5.

• U bazi podataka potrebno je evidentirati podatke o zrakoplovima,


aerodromima i letovima.
Zrakoplov je identificiran svojim jedinstvenim registracijskim brojem (npr.
N6061U). Za zrakoplov se evidentiraju godina proizvodnje i tip zrakoplova.
Za svaki tip zrakoplova evidentira se šifra tipa i naziv tipa zrakoplova (npr.
šifra: 123, naziv tipa: "Airbus-A319") te najveća ukupna dozvoljena težina
pri polijetanju. Za svaki aerodrom se evidentira šifra i naziv aerodroma.
Zrakoplov prema namjeni može biti ili putnički ili teretni (jedno isključuje
drugo). Za svaki pojedini zrakoplov, ovisno o njegovoj namjeni, evidentira
se je li u zrakoplov ugraĎena dodatna oprema: za svaki pojedini putnički
zrakoplov evidentira se ima li ugraĎenu internu televiziju, ima li ureĎaj za
satelitsku komunikaciju, a za svaki pojedini teretni zrakoplov broj dodatno
ugraĎenih klimatiziranih kontejnera za prijevoz životinja i je li ugraĎen
katapult za izbacivanje tereta padobranom.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 28

14
Primjer 5.
(nastavak zadatka ...)

...
Evidentiraju se letovi samo putničkih zrakoplova. Let je identificiran šifrom
i datumom leta (npr. "OU763", 1.6.2001), a za let se evidentira s kojeg
aerodroma zrakoplov polijeće, na koji aerodrom slijeće te vrijeme
polijetanja i vrijeme slijetanja. Evidentira se koji zrakoplov leti na kojem
letu.
Evidentiraju se kategorije cijena karata. Svaka kategorija cijena ima svoju
šifru (jedinstveno identificira kategoriju) i naziv (npr. "poslovna",
"ekonomska", "s popustom za zaposlenika kompanije", "s popustom za
osobe mlaĎe od 27 godina", itd). Putnik kupuje kartu točno odreĎene
kategorije cijene za odreĎeni let. Putnik ne može za jedan let kupiti više
od jedne karte. Za svakog putnika se evidentira jmbg (jedinstveno
odreĎuje putnika), prezime i ime.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 29

Primjer 5. ( ER model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 30

15
Primjer 5. ( Relacijski model )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 31

Modeliranje
primjeri za vjeţbu

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 32

16
Primjer 1.

• Profesor programiranja Marko Marković odlučio je napraviti program za


evidentiranje svojih objavljenih radova.
To podrazumijeva evidentiranje svih do sada objavljenih radova,
naslova radova, koautora koji su s njim učestvovali u pisanju radova,
godina objavljivanja kao i časopisa u kojima je objavljivano.
TakoĎer treba uspostaviti klasifikaciju radova po principu: naučni rad,
stručni ili pregledni rad, te da li je rad objavljen u meĎunarodnom ili
domaćem časopisu.
Za svaki rad unose se podaci o naslovu rada, klasifikacijama,
koautorima i časopisu u kojem je rad objavljen.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 33

Primjer 2.

• Na slici je dana denormalizirana tablica UGOVORI s nazivima stupaca i


vrijednostima redaka. Napraviti normalizirani model podataka s
pripadajućim entitetima, atributima i vezama izmeĎu njih.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 34

17
Primjer 3.

• U videoteci su evidentirani filmovi i primjerci filmova. Za svaki film


evidentira se žanr (oznaka i naziv) i distributer (šifra i naziv). Uz svaki
film evidentiraju se različiti izvoĎači (šifra, prezime i ime) i funkcije
koje su obavljali u filmu. Funkcije su predstavljene kraticom i nazivom,
a mogu biti npr. GL-glumac, RED-redatelj, SC-scenarist, SKL-skladatelj,
itd. Primjerci filma su odreĎeni šifrom filma i rednim brojem primjerka.
Uz svaki primjerak evidentira se datum nabavke.
Obratite pozornost na tip veze izmeĎu entiteta funkcija, izvoĎač i film:

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 35

Primjer 4. (1.kolokvij – 06.04.2006.)

• Tvrtka koja se bavi prodajom informatičke opreme prilikom prodaje


iste sa svojim kupcima dogovara uvjete servisiranja opreme. U tvrtki
radi više servisera i pri kupnji se ugovara koji je serviser zadužen za
kojeg kupca s tim da na jednog servisera doĎe više kupaca. Jednim
ugovorom se definira točno razdoblje servisiranja (od kojeg do kojeg
datuma), a podrazumijeva više izlazaka servisera na teren unutar
definiranog vremenskog razdoblja. Naravno, intervencija servisera nije
nužna. Prilikom izlaska na teren potrebno je zabilježiti točno vrijeme
odlaska i povratka, vrijeme provedenu na terenu izraženo u satima, te
na kojoj je komponenti, ili više njih, vršena popravka.
Napraviti normalizirani model podataka s pripadajućim entitetima,
atributima i vezama izmeĎu entiteta.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 36

18
Primjer 5. (1.kolokvij – 19.04.2007.)

• Napraviti normalizirani model podataka s pripadajućim entitetima, atributima i vezama


izmeĎu entiteta koji bi osigurao evidentiranje projekata, rokova i izvršitelja u jednom
tehničkom birou.
Osnovni način poslovanja tehničkog biroa jeste rad na izradi odreĎenih projekata, što
znači da se za svaki projekt trebaju evidentirati osnovni podaci o naručitelju projekta
(šifra, naziv, adresa, telefon, mail). Za svaki projekt postoji samo jedan glavni naručitelj
s kojim se sklapa ugovor o poslu. O projektu se vode slijedeći podaci: naziv projekta,
opis projekta, planirani datum početka rada na projektu, planirani svršetak rada na
projektu, stvarni početak rada na projektu, stvarni svršetak rada na projektu, vrijednost
projekta, ugovoreni penali za kašnjenje, dodatna napomena.
Na svakom projektu se osim djelatnika iz biroa (šifra, ime, prezime, zanimanje, titula,
adresa, telefon, mail) s podacima i o radnom mjestu na kojemu trenutno radi (šifra,
naziv, opis), mogu angažirati i vanjski suradnici (šifra, ime, prezime, zanimanje, titula,
adresa, telefon, mail, cijena angažmana) koji su zaposleni u drugim firmama (šifra,
naziv, adresa, telefon, mail).
Projekt se razlaže na više različitih poslova (zadataka). Svakom članu projektnog tima,
bilo da je riječ o djelatniku ili vanjskom suradniku, dodjeljuje se točno odreĎeni posao
(zadatak) što se posebno i evidentira. Uz svaki posao (zadatak) evidentira se i naziv
zadatka, kratak opis, planirani početak, planirani svršetak, stvarni početak, stvarni
svršetak, vrijednost i napomena.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 37

SQL

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 38

19
SQL

• SQL = Structured Query Language


• SQL je upitni jezik temeljen na relacijskoj algebri i predikatnom
računu.
• SQL se koristi kao programski jezik i interaktivni upitni jezik.
Kao programski jezik može se ugraĎivati u jezike treće i četvrte
generacije.
• Zadaća SQL-a je omogućiti definiciju podataka, upravljanje podacima
i provoĎenje kontrole nad podacima u relacijskoj bazi podataka.
• ProizvoĎači komercijalnih sustava takoĎer ugraĎuju i svoje, uglavnom
nestandardne, DDL i DML naredbe.
Ti su nestandardni dijelovi problematični jer programski kod postaje
neprenosiv izmeĎu različitih SQL sustava, a takoĎer se bitno otežava
usaglašavanje oko budućih standarda.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 39

SQL

• Primjer SQL naredbe iz DDL dijela jezika (kreiranje tablice mjesto):


CREATE TABLE mjesto
( pbr_mjesta VARCHAR2(5) NOT NULL ,
naziv_mjesta VARCHAR2(30) NOT NULL ,
sifra_opcine NUMBER(4)
);

• Primjer SQL naredbe iz DML dijela jezika (iz tablice mjesto dohvaća sve
n-torke kojima je vrijednost atributa poštanski broj jednaka 88000):

SELECT *
FROM mjesto
WHERE pbr = 88000;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 40

20
Izvršavanje SQL iskaza (ORACLE server)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 41

DDL naredbe
Kreiranje tablica

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 42

21
Kreiranje tablica

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 43

SQL – Kreiranje i brisanje tablica

Kreiranje tablice:

CREATE TABLE ime_tablice


(ime_stupca tip (veličina) (ograničenje),
ime_stupca tip (veličina) (ograničenje),
ime_stupca tip (veličina) (ograničenje),
...);

Brisanje tablice:

DROP TABLE ime_tablice;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 44

22
Ograniĉenja nad stupcima tablice i nad tablicama ...

• NULL/NOT NULL

• UNIQUE

• PRIMARY KEY

• FOREIGN KEY

• CHECK

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 45

Tipovi podataka (ORACLE)

• VARCHAR2(size)

• CHAR[(size)]

• NUMBER[(p,s)]

• DATE

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 46

23
Tipovi podataka
Veliki objekti

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 47

PRIMJER – Relacijski model

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 48

24
SQL – Kreiranje tablica

CREATE TABLE MJESTO


( PBR NUMBER(10) NOT NULL,
NAZIV VARCHAR2(40) NOT NULL,
CONSTRAINT mjesto_pk PRIMARY KEY(PBR)
);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 49

SQL – Kreiranje tablica

CREATE TABLE OSOBA


( MBR NUMBER(10) NOT NULL,
IME VARCHAR2(25) NOT NULL,
PREZIME VARCHAR2(25) NOT NULL,
EMAIL VARCHAR2(40),
PBR NUMBER(10) NOT NULL,
CONSTRAINT osoba_pk PRIMARY KEY(MBR),
CONSTRAINT osoba_mjesto_fk FOREIGN KEY(PBR)
REFERENCES MJESTO(PBR)
);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 50

25
SQL – Izmjena definicije tablice

ALTER TABLE
 dodavanje novih atributa
 modificiranje postojećih atributa
 definiranje default-ne vrijednosti za novi atribut
 brisanje atributa

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 51

SQL – ALTER TABLE

Primjeri:

 ALTER TABLE osoba


DROP COLUMN email;

 ALTER TABLE osoba


ADD (email VARCHAR2(25));

 ALTER TABLE mjesto


MODIFY (naziv VARCHAR2(50));

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 52

26
DML naredbe
SELECT, INSERT, UPDATE, DELETE

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 53

Najĉešće korišteni DML izrazi

 SELECT - Pretraţivanje podataka

 INSERT - Upisivanje novih podataka

 UPDATE - Promjena vrijednosti podataka

 DELETE - Brisanje postojećih podataka

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 54

27
INSERT – Unos podataka u tablicu

• INSERT INTO ime_tablice (stupac, stupac,…)


VALUES (vrijednost, vrijednost, …);

Primjeri:

• INSERT INTO osoba (mbr, ime, prezime, email)


VALUES (1, 'Ivo', 'Ivic', 'ivo@yahoo.com');

• INSERT INTO osoba


VALUES (1, 'Ivo', 'Ivic', 'ivo@yahoo.com');

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 55

INSERT – Unos podataka u tablicu

• INSERT se može koristiti i za kopiranje podataka


iz druge tablice.

Primjer:

• INSERT INTO osoba_2 (mbr, ime, prezime, email)


SELECT mbr, ime, prezime, email
FROM osoba;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 56

28
UPDATE – Aţuriranje podataka u tablici

• UPDATE ime_tablice [alias] SET


stupac [,stupac…] = {iskaz, podupit}
[WHERE uvjet];

Primjer:

• UPDATE osoba SET email='ivo_ivic@net.hr'


WHERE mbr=1;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 57

DELETE – Brisanje podataka u tablici

• DELETE FROM ime_tablice


[WHERE uvjet];

Primjer:

• DELETE FROM osoba


WHERE mbr=2;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 58

29
INSERT – Primjeri

• INSERT INTO mjesto (pbr, naziv)


VALUES (88000, 'Mostar');

• INSERT INTO mjesto (pbr, naziv)


VALUES (88220, 'Široki Brijeg');

• INSERT INTO osoba (mbr, ime, prezime, email, pbr)


VALUES (1, 'Ivo', 'Ivic', 'ivo@net.hr', 88000);

• INSERT INTO osoba (mbr, ime, prezime, pbr)


VALUES (2, 'Mate', 'Matic', 88220);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 59

INSERT – Primjeri

• INSERT INTO osoba (mbr, ime, prezime, email, pbr)


VALUES (2, 'Pero', 'Peric', 'pero@yahoo.com', 88000);
→ ORA-00001: unique constraint (PC-1.OSOBA_PK) violated

• INSERT INTO osoba (mbr, ime, prezime, email, pbr)


VALUES (3, 'Pero', 'Peric', 'pero@yahoo.com', 90000);
→ ORA-02291: integrity constraint (PC-1.OSOBA_MJESTO_FK)
violated - parent key not found

• INSERT INTO osoba (mbr, ime, email, pbr)


VALUES (3, 'Pero', 'pero@yahoo.com', 88000);
→ ORA-01400: cannot insert NULL into ("OSOBA"."PREZIME")

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 60

30
UPDATE – Primjeri

• UPDATE mjesto SET pbr=10000


WHERE naziv='Mostar';
→ ORA-02292: integrity constraint (PC-1.OSOBA_MJESTO_FK)
violated - child record found

• UPDATE mjesto SET naziv='Š.Brijeg'


WHERE pbr=88220;

• UPDATE osoba SET email='mate.matic@tel.net.ba'


WHERE mbr=2;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 61

DELETE – Primjeri

• DELETE FROM mjesto


WHERE pbr=88000;
→ ORA-02292: integrity constraint (PC-1.OSOBA_MJESTO_FK)
violated - child record found

• DELETE FROM osoba


WHERE mbr=1;

• DELETE FROM mjesto


WHERE pbr=88000;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 62

31
Test 1.

(10 bodova)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 63

FSR Schema
(napunjena testnim podacima - koristiti ćemo je na vjeţbama za SELECT upite ...)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 64

32
SELECT – Odabir podataka iz tablice

• SELECT stupci [alias]


FROM ime_tablice [alias]
[WHERE uvjeti za redak]
[GROUP BY stupci]
[HAVING uvjeti za grupu redaka]
[ORDER BY stupci];

Primjer – odabir svih podataka iz tablice djelatnik

• SELECT * FROM djelatnik;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 65

Operatori usporedbe, Logiĉki i SQL operatori

=, >, <, >=, <=, <>

BETWEEN … AND… – izmeĎu dvije vrijednosti (uključivo)


IN (lista) – odgovara bilo kojoj vrijednosti iz liste
LIKE – odgovara znakovnom “uzorku”
IS NULL – je NULL vrijednost

AND – vraća TRUE ako su svi uvjeti TRUE


OR – vraća TRUE ako je jedan od uvjeta TRUE
NOT – logičko NE

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 66

33
Primjeri

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE placa > 1000
AND sifra_radmj='IT-PROG';

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE placa BETWEEN 1000 AND 2000;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 67

Primjeri

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE ime LIKE 'A%';

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE ime LIKE '_a%';

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 68

34
Primjeri

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE placa IN (1000, 2000);

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE placa NOT IN (1000, 2000);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 69

Primjeri

• SELECT id_djelatnika, ime, prezime, placa, email


FROM djelatnik
WHERE email IS NULL;

• SELECT id_djelatnika, ime, prezime, placa, dodatak


FROM djelatnik
WHERE dodatak IS NOT NULL
AND dodatak <> 100;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 70

35
Primjeri

• SELECT id_djelatnika, ime, prezime, placa


FROM djelatnik
WHERE placa < 1000
OR placa > 2000;

• SELECT id_djelatnika, ime, prezime, sifra_radmj


FROM djelatnik
WHERE sifra_radmj = 'IT-PROG'
OR sifra_radmj = 'IT-ADM';

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 71

Primjeri

Obratiti pozornost – razlikovati sljedeća 2 upita !

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa


FROM djelatnik
WHERE placa > 1300
AND sifra_radmj = 'IT-PROG'
OR sifra_radmj = 'IT-ADM';

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa


FROM djelatnik
WHERE placa > 1300
AND ( sifra_radmj = 'IT-PROG'
OR sifra_radmj = 'IT-ADM' );

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 72

36
Agregatne funkcije SQL-a

• ISO standard definira 5 agregatnih funkcija:


- COUNT
- SUM
- AVG
- MIN
- MAX
• Ove funkcije se izvršavaju nad jednim stupcem tablice i
vraćaju jednu vrijednost.

• VAŢNO ! Agregatne funkcije se mogu koristiti samo


u SELECT listi i HAVING iskazu.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 73

Agregatne funkcije SQL-a – Primjeri

• SELECT SUM(placa), AVG(placa), MIN(placa), MAX(placa)


FROM djelatnik;

• SELECT COUNT(*) broj_djelatnika


FROM djelatnik;

• SELECT COUNT (DISTINCT sifra_radmj)


FROM djelatnik;

DISTINCT – eliminira duple vrijednosti


Nema efekta na funkcije MIN i MAX, ali ima na SUM i AVG. Može
se navesti samo jedanput u upitu.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 74

37
Agregatne funkcije SQL-a – Primjeri

• SELECT ime, prezime


FROM djelatnik
WHERE placa > AVG(placa);
→ ORA-00934: group function is not allowed here

• SELECT ime, prezime, SUM(placa)


FROM djelatnik;
→ ORA-00937: not a single-group group function

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 75

GROUP BY

• Grupiranje se obavlja tako da se n-torke koje imaju jednake


vrijednosti atributa navedenih u listi za grupiranje,
kombiniraju u zajedničku grupu. Za svaku dobivenu grupu,
u rezultatu se pojavljuje samo jedna n-torka.
• Grupiranje je vrlo korisno u kombinaciji s
agregatnim funkcijama.

Primjer:

• SELECT sifra_radmj, AVG(placa) prosj_placa


FROM djelatnik
GROUP BY sifra_radmj;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 76

38
GROUP BY

• PRAVILO !
Bilo koji atribut ili izraz u SELECT listi koji
nije agregatna funkcija mora biti i u
GROUP BY iskazu.
MeĎutim, dopušteno je u GROUP BY iskazu
koristiti i one atribute koji se ne nalaze u
SELECT listi.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 77

GROUP BY – Primjeri

• SELECT sifra_radmj, AVG(placa)


FROM djelatnik
GROUP BY sifra_radmj;

• SELECT AVG(placa)
FROM djelatnik
GROUP BY sifra_radmj;

• SELECT sifra_radmj, spol, AVG(placa)


FROM djelatnik
GROUP BY sifra_radmj;
→ ORA-00979: not a GROUP BY expression

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 78

39
GROUP BY – Primjeri

• SELECT AVG(COUNT(*)) prosjek_djel_rm


FROM djelatnik
GROUP BY sifra_radmj;

• SELECT MAX(COUNT(*)) max_djel_rm


FROM djelatnik
GROUP BY sifra_radmj;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 79

HAVING

• Koristi se ako se ţeli specificirati koje grupe treba


prikazati, odnosno, koristi se za restrikciju grupa koje se
prikazuju, tj. za ispitivanje vrijednosti agregatnih funkcija.

• VAŢNO ! WHERE iskaz se ne moţe koristiti za


restrikciju grupa. WHERE se koristi samo za
restrikciju pojedinaĉnih redaka.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 80

40
WHERE – GROUP BY – HAVING

• WHERE dio naredbe odreĎuje koje n-torke će


formirati grupe.

• GROUP BY lista odreĎuje strukturu grupa tj. po


kojim atributima se obavlja grupiranje n-torki.

• HAVING dio naredbe odreĎuje koje od nastalih


grupa će biti prihvaćene kao rezultat.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 81

HAVING – Primjeri

• SELECT sifra_radmj radno_mjesto, AVG(placa) prosj_placa


FROM djelatnik
GROUP BY sifra_radmj
HAVING AVG(placa)>1500;

• SELECT sifra_opcine, COUNT(*) broj_dj


FROM djelatnik
GROUP BY sifra_opcine
HAVING COUNT(*)>=3;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 82

41
ORDER BY

• ASC – uzlazno sortiranje (po default-u)


• DESC – silazno sortiranje

→ ORDER BY iskaz dolazi na kraju SELECT upita.

Primjer:

• SELECT ime, prezime, placa


FROM djelatnik
ORDER BY placa DESC;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 83

Izvršavanje SQL iskaza ...

• Pregled radnih mjesta na kojima radi više od 2 djelatnika s plaćom


većom od 1000 KM.

• SELECT sifra_radmj, COUNT(*) broj_djelatnika


FROM djelatnik
WHERE placa>1000
GROUP BY sifra_radmj
HAVING COUNT(*)>2
ORDER BY 2 desc;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 84

42
Izvršavanje SQL iskaza ...

• Pregled radnih mjesta na kojima radi više od 2 djelatnika s plaćom


većom od 1000 KM.
ID_DJELATNIKA SIFRA_RADMJ PLACA

1 DIR 4800
2 TAJNIK 1100 ID_DJELATNIKA SIFRA_RADMJ PLACA
100 IT-VOD 2500
101 IT-PROG 1600 1 DIR 4800
102 IT-ADM 1400 2 TAJNIK 1100
103 IT-PROG 1800
104 IT-PROG 1500 1. 100
101
IT-VOD
IT-PROG
2500
1600 2.
105 IT-PROG 1500 102 IT-ADM 1400
106 IT-ADM 1300 103 IT-PROG 1800
107 IT-PROG 1250 WHERE 104 IT-PROG 1500 GROUP BY
108 IT-PROG 1200
placa > 1000 105 IT-PROG 1500 sifra_radmj
109 IT-PROG 1000 106 IT-ADM 1300
110 IT-PROG 800 107 IT-PROG 1250
111 IT-PROG 900 108 IT-PROG 1200
112 IT-ADM 700 113 IT-PROG 1100
113 IT-PROG 1100 115 IT-PROG 1350
114 IT-PROG 950 200 PROD-VOD 2000
115 IT-PROG 1350 202 PROD-KAM 1400
200 PROD-VOD 2000 203 PROD-KAM 1100
201 PROD-KAM 1000 204 PROD-KAM 1200
202 PROD-KAM 1400 ... ... ...
203 PROD-KAM 1100
204 PROD-KAM 1200
... ... ...

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 85

Izvršavanje SQL iskaza ...

• Pregled radnih mjesta na kojima radi više od 2 djelatnika s plaćom


većom od 1000 KM.

2. 3.
SIFRA_RADMJ COUNT(*) SIFRA_RADMJ COUNT(*)

GROUP BY PROD-KAM 3 HAVING PROD-KAM 3


sifra_radmj IT-ADM 2 COUNT(*)>2 IT-PROG 8
IT-PROG 8
...

4.
SIFRA_RADMJ COUNT(*)

ORDER BY IT-PROG 8
2 desc PROD-KAM 3

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 86

43
DML naredbe
Funkcije

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 87

Funkcije

• CHARACTER funkcije
- LOWER, UPPER, INITCAP, CONCAT, LPAD, RPAD, SUBSTR, INSTR,
LTRIM, RTRIM, LENGTH, TRANSLATE, REPLACE

• NUMBER funkcije
- ROUND, TRUNC, SIGN, SQRT, ABS, MOD
Matematičke (LOG, SIN, TAN, COS, EXP)

• DATE funkcije
- ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY,
ROUND, TRUNC

• Funkcije za konverziju podataka


- TO_CHAR
- TO_NUMBER
- TO_DATE

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 88

44
Primjeri – funkcije

• SELECT ime, prezime, spol, placa


FROM djelatnik
WHERE UPPER(prezime)='IVIĆ';

• SELECT ime || ' ' || prezime NAZIV, spol, placa


FROM djelatnik
WHERE LOWER(prezime)='ivić';

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 89

Primjeri – funkcije

• SELECT sifra_radmj, round(avg(placa),2)


FROM djelatnik
GROUP BY sifra_radmj
HAVING round(avg(placa),2)>1200
ORDER BY 2 desc;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 90

45
Primjeri – funkcije

• SELECT id_djelatnika, ime, prezime, placa,


TO_CHAR (datum_zaposlenja, 'dd.mm.yyyy') ZAPOSLEN,
MONTHS_BETWEEN(SYSDATE, datum_zaposlenja)/12 STAZ
FROM djelatnik;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 91

NVL funkcija

• SELECT id_djelatnika, ime, prezime, placa, dodatak,


placa+dodatak UKUPNA_PLACA
FROM djelatnik;

• SELECT id_djelatnika, ime, prezime, placa, dodatak,


placa+nvl(dodatak,0) UKUPNA_PLACA
FROM djelatnik;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 92

46
DECODE funkcija – Primjeri

• SELECT ime, prezime,


DECODE ( spol, 'M', 'Muško',
'Ţ', 'Ţensko', '???')
FROM djelatnik;

• SELECT ime, prezime, placa,


DECODE ( spol, 'M', placa*0.95,
'Ţ', placa*1.1, placa )
nova_plaća
FROM djelatnik;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 93

Osnovne metode spajanja tablica

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 94

47
Spajanje tablica (ORACLE)

Osnovne metode spajanja tablica:

 equi-join
 non-equi join
 outer join
 self join

• Obratiti pozornost ! Obavljanje Kartezijevog produkta


relacija ĉesto je posljedica pogreške programera - kad
se zaboravi navesti uvjet spajanja.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 95

Kartezijev produkt

OSOBA MJESTO
ID IME PBR PBR NAZIV_MJESTA
1 Pero 88000 88000 Mostar
2 Mate 88000 88220 Široki Brijeg
3 Ivo 88220

• SELECT id, ime, naziv_mjesta ID IME NAZIV_MJESTA


FROM osoba, mjesto 1 Pero Mostar
2 Mate Mostar
3 Ivo Mostar
1 Pero Široki Brijeg
2 Mate Široki Brijeg
3 Ivo Široki Brijeg

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 96

48
Osnovna sintaksa spajanja

• SELECT COLUMN(S)
FROM TABLES
WHERE uvjet spajanja

PRAVILO !

 Broj tablica – 1 = broju uvjeta spajanja

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 97

equi join

Primjer:
• SELECT id, ime, naziv_mjesta
FROM osoba, mjesto
WHERE osoba.pbr=mjesto.pbr;

OSOBA MJESTO

ID IME PBR PBR NAZIV_MJESTA


1 Pero 88000 88000 Mostar
2 Mate 88000 88220 Široki Brijeg
3 Ivo 88220
4 Tomo 88000
5 Marija 88220

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 98

49
equi join

Primjer:
• SELECT id, ime, naziv_mjesta
FROM osoba, mjesto
WHERE osoba.pbr=mjesto.pbr;

ID IME NAZIV_MJESTA
1 Pero Mostar
Rezultat
upita 2 Mate Mostar
3 Ivo Široki Brijeg
4 Tomo Mostar
5 Marija Široki Brijeg

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 99

equi join

Primjeri:

• SELECT d.ime, d.prezime, o.naziv_opcine


FROM djelatnik d, opcina o
WHERE d.sifra_opcine=o.sifra_opcine;

• SELECT d.ime, d.prezime, d.email, d.placa,


rm.naziv_radmj, o.naziv_odjela
FROM djelatnik d, radno_mjesto rm, odjel o
WHERE d.sifra_radmj=rm.sifra_radmj
AND rm.sifra_odjela=o.sifra_odjela
AND dodatak is not null;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 100

50
outer join

Primjer:
• SELECT id, ime, naziv_mjesta
FROM osoba, mjesto
WHERE osoba.pbr=mjesto.pbr;

OSOBA MJESTO

ID IME PBR PBR NAZIV_MJESTA


1 Pero 88000 88000 Mostar
2 Mate 88000 88220 Široki Brijeg
3 Ivo 88220
4 Tomo 88000
5 Marija NULL ?

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 101

outer join

• SELECT id, ime, naziv_mjesta ID IME NAZIV_MJESTA


FROM osoba, mjesto 1 Pero Mostar
WHERE osoba.pbr=mjesto.pbr; 2 Mate Mostar
3 Ivo Široki Brijeg
4 Tomo Mostar

• SELECT id, ime, naziv_mjesta ID IME NAZIV_MJESTA

FROM osoba, mjesto 1 Pero Mostar

WHERE osoba.pbr=mjesto.pbr(+); 2 Mate Mostar


3 Ivo Široki Brijeg
4 Tomo Mostar
5 Marija

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 102

51
outer join

Primjer:

• SELECT d.id_djelatnika, d.ime, d.prezime, d.placa,


rm.naziv_radmj
FROM djelatnik d, radno_mjesto rm
WHERE d.sifra_radmj=rm.sifra_radmj
AND placa>2000;

• SELECT d.id_djelatnika, d.ime, d.prezime, d.placa,


rm.naziv_radmj, o.naziv_odjela
FROM djelatnik d, radno_mjesto rm, odjel o
WHERE d.sifra_radmj=rm.sifra_radmj
AND rm.sifra_odjela=o.sifra_odjela (+)
AND placa>2000;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 103

self join

Primjer:
• SELECT a.id, a.ime ime_dj, b.ime ime_sefa
FROM osoba a, osoba b
WHERE a.id_sefa=b.id;

OSOBA

ID IME ID_SEFA ID IME_DJ IME_SEFA


1 Pero NULL 2 Mate Pero
2 Mate 1 3 Ivo Pero
3 Ivo 1 4 Tomo Pero
4 Tomo 1 5 Marija Ivo
5 Marija 3

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 104

52
self join

Primjer:

• SELECT d1.ime || ' ' || d1.prezime djelatnik, d1.placa,


d1.ime || ' ' || d2.prezime šef, d2.placa
FROM djelatnik d1, djelatnik d2
WHERE d1.id_sefa=d2.id_djelatnika
AND d1.placa > d2.placa;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 105

SQL: 1999

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 106

53
SQL: 1999 sintaksa – spajanje tablica

• SELECT tablica1.stupac, tablica2.stupac


FROM tablica1
[CROSS JOIN tablica2] |
[NATURAL JOIN tablica2] |
[JOIN tablica2 USING (stupac)] |
[JOIN tablica2
ON (tablica1.stupac=tablica2.stupac)]
[LEFT|RIGHT|FULL OUTER JOIN tablica2
ON (tablica1.stupac=tablica2.stupac)];

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 107

SQL: 1999 – CROSS JOIN

Primjer:

• SELECT d.prezime, o.naziv_opcine


FROM djelatnik d
CROSS JOIN opcina o;

→ Rezultat ovakvog upita je Kartezijev produkt relacija.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 108

54
SQL: 1999 – NATURAL JOIN

Primjer:

• SELECT o.sifra_opcine, o.naziv_opcine, z.naziv_zupanije


FROM opcina o
NATURAL JOIN zupanija z;

→ NATURAL JOIN se bazira na spajanju onih atributa iz tablica


koji imaju isto ime i tip.
→ U gornjem primjeru to je atribut: SIFRA_ZUPANIJE

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 109

SQL: 1999 – JOIN ... USING ...

Primjer:

• SELECT d.id_djelatnika, d.prezime, o.naziv_opcine


FROM djelatnik d
JOIN opcina o USING (sifra_opcine);

→ Korištenjem USING izraza moguće je točno definirati atribute


na osnovu kojih će se vršiti spajanje tablica.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 110

55
SQL: 1999 – JOIN ... ON ...

Primjer:
• SELECT d.id_djelatnika, d.ime, d.prezime, o.sifra_opcine,
o.naziv_opcine
FROM djelatnik d JOIN opcina o
ON (d.sifra_opcine = o.sifra_opcine);

• SELECT d1.prezime djel, d2.prezime sef


FROM djelatnik d1 JOIN djelatnik d2
ON (d1.id_sefa = d2.id_djelatnika);

→ JOIN ON – Sintaksa za spajanje koja se najčešće koristi bilo da


je u pitanju equijoin ili self-join.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 111

SQL: 1999 – JOIN ... ON ...

Primjer (spajanje 3 tablice):

• SELECT ime, prezime, o.naziv_opcine, z.naziv_zupanije


FROM djelatnik d
JOIN opcina o
ON d.sifra_opcine = o.sifra_opcine
JOIN zupanija z
ON o.sifra_zupanije = z.sifra_zupanije;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 112

56
SQL: 1999 – OUTER JOIN

Primjer:

• SELECT rm.sifra_radmj, rm.naziv_radmj, o.naziv_odjela


FROM radno_mjesto rm
LEFT OUTER JOIN odjel o
ON (rm.sifra_odjela=o.sifra_odjela);

• SELECT rm.sifra_radmj, rm.naziv_radmj, o.naziv_odjela


FROM radno_mjesto rm
RIGHT OUTER JOIN odjel o
ON (rm.sifra_odjela=o.sifra_odjela);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 113

SQL: 1999 – OUTER JOIN

Primjer:

• SELECT rm.sifra_radmj, rm.naziv_radmj, o.naziv_odjela


FROM radno_mjesto rm
FULL OUTER JOIN odjel o
ON (rm.sifra_odjela=o.sifra_odjela);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 114

57
Usporedba SQL: 1999 i ORACLE sintakse

ORACLE SQL: 1999


• EQUIJOIN • NATURAL | INNER JOIN
• OUTER JOIN • LEFT OUTER JOIN
• SELF JOIN • JOIN ON
• NONEQUIJOIN • JOIN USING
• Kartezijev produkt • CROSS JOIN

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 115

Test 2.

(10 bodova)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 116

58
SQL podupiti

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 117

Podupiti

SELECT ...
FROM ...
WHERE ...
( SELECT ...
FROM ... Podupit
WHERE ... )

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 118

59
Korištenje podupita

Primjer:

• SELECT ime, prezime, placa


FROM djelatnik
1800
WHERE placa >
( SELECT placa
FROM djelatnik
WHERE ime = 'Ernest' );

• U ovom primjeru «unutarnji» SELECT iskaz (PODUPIT) vraća plaću


djelatnika po imenu Ernest.
• «Vanjski» SELECT iskaz koristi taj rezultat «unutarnjeg» upita da bi
prikazao sve djelatnike koji zaraĎuju više od tog iznosa.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 119

Tipovi podupita

• Podupiti koji vraćaju jedan redak


Operatori: =, >, <, >=, <=, <>

• Podupiti koji vraćaju više od jednog retka


Operatori: IN, ANY, ALL

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 120

60
Podupiti – Primjer

Primjer:
• Prikaţi djelatnike ĉije radno mjesto je isto kao i djelatnika 101.

• SELECT ime, prezime, sifra_radmj


FROM djelatnik
WHERE sifra_radmj = IT-PROG

( SELECT sifra_radmj
FROM djelatnik
WHERE id_djelatnika = 101 );

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 121

Podupiti – Primjer korištenja agregatnih funkcija

Primjer:
• Prikaţi sve djelatnike (ime, prezime, datum zaposlenja, plaća)
ĉija plaća je veća od prosjeĉne plaće u poduzeću.

• SELECT ime, prezime, datum_zaposlenja, placa


FROM djelatnik
WHERE placa > 1.450

( SELECT AVG (placa)


FROM djelatnik
);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 122

61
Podupiti – Primjer

Primjer:
• Prikaţi djelatnike ĉije radno mjesto je isto kao i djelatnika 101
i ĉija plaća je veća od plaće djelatnike 2.

• SELECT ime, prezime, sifra_radmj, placa


FROM djelatnik
WHERE sifra_radmj = ( SELECT sifra_radmj
FROM djelatnik
WHERE id_djelatnika = 101 )
AND placa > ( SELECT placa
FROM djelatnik
WHERE id_djelatnika = 2 );

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 123

Podupiti – Primjer korištenja podupita u HAVING dijelu iskaza

Primjer:
• SELECT sifra_radmj, AVG (placa)
FROM djelatnik
GROUP BY sifra_radmj
HAVING AVG (placa) >
( SELECT AVG(placa)
FROM djelatnik
WHERE sifra_radmj='IT-PROG');

• Podupit se moţe koristiti ne samo u WHERE dijelu SELECT


iskaza, nego i u HAVING dijelu iskaza. Prvo se izvršava podupit,
a zatim se rezultat podupita vraća u HAVING dio vanjskog upita.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 124

62
Podupiti – Primjeri najĉešćih pogrešaka

GREŠKA ! Podupit ne vraća niti jedan redak.

Primjer:
• SELECT ime, prezime, sifra_radmj
FROM djelatnik
WHERE sifra_radmj =
( SELECT sifra_radmj
FROM djelatnik
WHERE prezime='Crnjac' );

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 125

Podupiti – Primjeri najĉešćih pogrešaka

GREŠKA ! Podupit vraća više od jednog retka, a koristi se


operator jednakosti (=).
Primjer:
• SELECT id_djelatnika, ime, prezime
FROM djelatnik
WHERE placa =
( SELECT MIN(placa)
FROM djelatnik
GROUP BY sifra_radmj );

→ ORA-01427: single-row subquery returns more than one row


• Da bi ispravili grešku u gornjem upitu operator (=) moţemo
promijeniti u operator (IN).

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 126

63
Podupiti koji vraćaju više od jednog retka
IN operator

Primjer:
• SELECT ime, prezime, placa, sifra_radmj
FROM djelatnik
WHERE placa IN
( SELECT MIN(placa)
FROM djelatnik d, radno_mjesto rm, odjel o
WHERE d.sifra_radmj=rm.sifra_radmj
AND rm.sifra_odjela=o.sifra_odjela
GROUP BY o.sifra_odjela );

• Nakon izvršavanja podupita, SUBP (npr. Oracle) će ovako vidjeti


vanjski upit ...
• SELECT ime, prezime, placa, sifra_radmj FROM djelatnik
WHERE placa IN (700,900,1000,1200);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 127

Podupiti koji vraćaju više od jednog retka


ANY i ALL operator

< ANY = manje od maximuma


> ANY = više od minimuma

< ALL = manje od minimuma


> ALL = više od maximuma

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 128

64
Podupiti – Primjer

Primjer:
• Prikaţi djelatnike koji nisu IT programeri i ĉija plaća je niţa od
plaće nekog od IT programera.

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa


FROM djelatnik
WHERE placa < ANY
( SELECT placa
FROM djelatnik
WHERE sifra_radmj = 'IT-PROG' )
AND sifra_radmj <> 'IT-PROG' ;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 129

Podupiti – Primjer

Primjer:
• Prikaţi djelatnike koji nisu na radnom mjestu PROD-KAM i ĉija
plaća je niţa od plaće svih djelatnika na radnom mjestu PROD-KAM.

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa


FROM djelatnik
WHERE placa < ALL
( SELECT placa
FROM djelatnik
WHERE sifra_radmj = 'PROD-KAM' )
AND sifra_radmj <> 'PROD-KAM' ;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 130

65
Korelacijski podupiti

uzima se kandidat red


iz vanjskog upita

izvršava se unutarnji upit


koristeći podatke iz
kandidat reda

vrijednosti iz unutarnjeg upita


se koriste da se kandidat red
kvalificira ili diskvalificira

• Podupit (unutarnji upit) se izvršava jedanput za svaki redak iz


vanjskog upita.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 131

Korelacijski podupiti

Primjer:
• Prikaţi sve djelatnike koji zaraĊuju više od prosjeĉne plaće u
njihovom odjelu.

• SELECT ime, prezime, d.sifra_radmj, placa


FROM djelatnik d, radno_mjesto vanjski_rm
WHERE d.sifra_radmj=vanjski_rm.sifra_radmj
AND placa > ( SELECT AVG(placa)
FROM djelatnik d, radno_mjesto rm
WHERE d.sifra_radmj=rm.sifra_radmj
AND rm.sifra_odjela =
vanjski_rm.sifra_odjela );

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 132

66
EXISTS operator

• EXISTS operator testira postojanje redaka u rezultatu


podupita:
– ako podupit vrati bar jedan redak operator EXISTS će
vratiti TRUE.
– ako podupit ne vrati niti jedan redak operator EXISTS će
vratiti FALSE.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 133

Podupiti – Primjer

Primjer:
• Prikaţi sve djelatnike koji imaju bar jednu osobu koja im je
“podreĊena”.
a) korištenjem EXISTS operatora

• SELECT id_djelatnika, ime, prezime, sifra_radmj


FROM djelatnik d
WHERE EXISTS (
SELECT 'X'
FROM djelatnik
WHERE id_sefa=d.id_djelatnika
);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 134

67
Podupiti – Primjer

Primjer:
• Prikaţi sve djelatnike koji imaju bar jednu osobu koja im je
“podreĊena”.
b) korištenjem IN operatora

• SELECT id_djelatnika, ime, prezime, sifra_radmj


FROM djelatnik
WHERE id_djelatnika IN (
SELECT id_sefa
FROM djelatnik
WHERE id_sefa IS NOT NULL
);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 135

Podupiti – Primjer

Primjer:
• Prikaţi općine u kojima ne ţivi niti jedan djelatnik poduzeća.
a) korištenjem NOT EXISTS operatora

• SELECT sifra_opcine, naziv_opcine


FROM opcina o
WHERE NOT EXISTS (
SELECT 'X'
FROM djelatnik
WHERE sifra_opcine=o.sifra_opcine
);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 136

68
Podupiti – Primjer

Primjer:
• Prikaţi općine u kojima ne ţivi niti jedan djelatnik poduzeća.
b) korištenjem NOT IN operatora

• SELECT sifra_opcine, naziv_opcine


FROM opcina
WHERE sifra_opcine NOT IN
( SELECT DISTINCT(sifra_opcine)
FROM djelatnik );

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 137

Sigurnost baze podataka

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 138

69
Korisnici i sigurnost

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 139

Korisnici i sigurnost

• CREATE USER pero IDENTIFIED BY pero;

• CONNECT pero/pero;

• ALTER USER pero IDENTIFIED BY pero1;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 140

70
Sistemske privilegije

• više od 100 sistemskih privilegija

• Tipiĉne DBA privilegije:


– CREATE USER
– DROP USER
– DROP ANY TABLE
– BACKUP ANY TABLE
– SELECT ANY TABLE
– CREATE ANY TABLE

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 141

Sistemske privilegije

• Osnovna sintaksa za dodjeljivanje sistemskih privilegija:

GRANT sistemske_privilegije
TO korisnik|uloga|PUBLIC
[WITH ADMIN OPTION]

• Osnovna sintaksa za ukidanje sistemskih privilegija:

REVOKE sistemske_privilegije
FROM korisnik|uloga|PUBLIC

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 142

71
Sistemske privilegije

Primjeri:

• GRANT create session, create table,


create sequence, create view
TO pero;

• REVOKE create view


FROM pero;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 143

Uloga (Role)

Korisnici

Uloga

Privilegije

Dodjeljivanje privilegija korisnicima Dodjeljivanje privilegija korisnicima


bez definirane uloge nakon definiranja uloge

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 144

72
Uloga (Role)

• CREATE ROLE uloga_1 IDENTIFIED BY uloga_1;

• GRANT create session, create table, create view


TO uloga_1;

• GRANT uloga_1
TO pero;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 145

Objektne privilegije

Najčešće korištene objektne privilegije su:

• SELECT – tablice, pogledi, sekvence


• INSERT, UPDATE, DELETE – tablice, pogledi
• INDEX, REFERENCES – tablice
• ALTER – tablice, sekvence
• EXECUTE – procedure
• ALL, ALL PRIVILEGES

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 146

73
Objektne privilegije

• Osnovna sintaksa za dodjeljivanje objektnih privilegija:


GRANT objektne_privilegije
ON ime_objekta
TO korisnik|uloga|PUBLIC
[WITH GRANT OPTION]

• Osnovna sintaksa za ukidanje objektnih privilegija:


REVOKE objektne_privilegije
ON ime_objekta
FROM korisnik|uloga|PUBLIC

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 147

Objektne privilegije

Primjer:

• GRANT select, insert


ON djelatnik
TO pero, mate
WITH GRANT OPTION;

• GRANT select
ON opcina
TO PUBLIC;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 148

74
Upravljanje transakcijama

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 149

Upravljanje transakcijama

500 KM

Raĉun 1 Raĉun 2

5.000 KM 1.000 KM

1) UPDATE racun SET saldo=saldo-500


WHERE id_racuna=1;
2) UPDATE racun SET saldo=saldo+500
WHERE id_racuna=2;

Transakcija se mora izvršiti u potpunosti (u gornjem sluĉaju obe


UPDATE naredbe) ili nikako – “SVE ili NIŠTA”

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 150

75
Upravljanje transakcijama (ORACLE)

• 2 tipa transakcija:
– DML – sadrži jedan ili više DML iskaza
– DDL – sadrži jedan DDL iskaz

• Transakcija zapoĉinje kada je:


– DDL naredba izdana
– Pokrenut prvi DML iskaz nakon COMMIT-a

• Transakcija se moţe završiti na sljedeći naĉin:


– COMMIT iskazom – potvrdi sve izmjene
– ROLLBACK iskazom – poništi sve izmjene
– DDL iskazom → automatski COMMIT
– Padom sustava → automatski ROLLBACK

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 151

Upravljanje transakcijama

• Stanje sustava prije izvršavanje COMMIT ili ROLLBACK


naredbe:
– moguće je vratiti sustav u stanje prije izvršavanja naredbi
iz transakcije
– korisnik koji radi izmjene podataka kroz transakciju može
vidjeti efekte tih izmjena (npr. izvršavanjem SELECT iskaza)
– ostali korisnici ne mogu vidjeti efekte navedenih izmjena
– n-torke nad kojima se rade izmjene kroz transakciju
(INSERT, UPDATE, DELETE) automatski se zaključavaju i
ostali korisnici ih ne mogu mijenjati.
Napomena: U Oracle sustavu implicitno zakljuĉavanje će
se desiti za sve SQL iskaze osim SELECT-a

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 152

76
Upravljanje transakcijama

• Stanje sustava nakon izvršavanja COMMIT naredbe:


– izmjene podataka u bazi postaju trajne
– sustav se više ne može vratiti u stanje prije izvršavanja
naredbi iz transakcije
– svi korisnici mogu vidjeti efekte izmjena učinjenih kroz
transakciju
– n-torke nad kojima su vršene izmjene kroz transakciju nisu
više zaključane i navedene n-torke postaju dostupne za
izmjenu i drugim korisnicima.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 153

Upravljanje transakcijama

• Stanje sustava nakon izvršavanja ROLLBACK naredbe:


– izmjene podataka u bazi se poništavaju
– sustav se vraća u stanje prije izvršavanja naredbi iz
transakcije
– n-torke koje su bile implicitno zaključane kroz transakciju
nisu više zaključane te postaju dostupne za izmjenu i
drugim korisnicima.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 154

77
Upravljanje transakcijama
Primjer

Vrijeme Sesija 1 Sesija 2

SELECT placa FROM djelatnik


t1 WHERE id_djelatnika=1;
UPDATE djelatnik
2000 SET placa=placa+1000
t2 WHERE id_djelatnika=1;

t3 SELECT placa FROM djelatnik SELECT placa FROM djelatnik


WHERE id_djelatnika=1; WHERE id_djelatnika=1;
2000 3000
t4 COMMIT;

t5 SELECT placa FROM djelatnik SELECT placa FROM djelatnik


WHERE id_djelatnika=1; WHERE id_djelatnika=1;
3000 3000

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 155

Upravljanje transakcijama
Primjer

Vrijeme Sesija 1 Sesija 2

SELECT placa FROM djelatnik


t1 WHERE id_djelatnika=1;
UPDATE djelatnik
2000 SET placa=placa+1000
t2 WHERE id_djelatnika=1;

t3 SELECT placa FROM djelatnik SELECT placa FROM djelatnik


WHERE id_djelatnika=1; WHERE id_djelatnika=1;
2000 3000
t4 ROLLBACK;

t5 SELECT placa FROM djelatnik SELECT placa FROM djelatnik


WHERE id_djelatnika=1; WHERE id_djelatnika=1;
2000 2000

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 156

78
Deadlock
Primjer

Vrijeme Sesija 1 Sesija 2

UPDATE djelatnik
t1 SET placa=placa+1000
WHERE id_djelatnika=1; UPDATE djelatnik
t2 SET placa=placa-500
WHERE id_djelatnika=2;
UPDATE djelatnik
t3 SET placa=placa-500
WHERE id_djelatnika=2;
UPDATE djelatnik
t4 SET placa=placa+1000
WHERE id_djelatnika=1;
t5 → ORA-00060: deadlock detected while waiting for resource

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 157

Ostali objekti u bazi podataka


VIEW, SEQUENCE, INDEX, SYNONYM

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 158

79
Objekti u bazi podataka

• TABLE – Tablica

• VIEW – Pogled

• SEQUENCE – Sekvenca

• INDEX – Indeks

• SYNONYM – Sinonim

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 159

Pogled (VIEW)

Što je pogled?
- “prozor” u podatke
- podaci se izvode, ne posjeduju
- pohranjuje se kao SELECT izraz u rječnik podataka

Uporaba pogleda
- za ograničenje pristupa podacima
- za pojednostavljenje složenih upita
- za omogućavanje neovisnosti podataka
- za prikaz različitih pogleda na iste podatke

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 160

80
Pogled (VIEW)

Jednostavni pogled
- podaci su iz jedne tablice
- ne sadrži funkcije ili grupe
- može izvršiti DML

Sloţeni pogled
- podaci su iz više tablica
- sadrži funkcije ili grupe
- ne može izvršiti DML

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 161

Kreiranje pogleda (VIEW)

CREATE OR REPLACE VIEW djelatnik_imenik


AS
SELECT id_djelatnika, ime, prezime, email, telefon
FROM djelatnik;

CREATE VIEW radno_mj_stat (radmj,minplac,maxplac,prosjek)


AS
SELECT rm.naziv_radmj, min(placa), max(placa), avg(placa)
FROM djelatnik d, radno_mjesto rm
WHERE d.sifra_radmj=rm.sifra_radmj
GROUP BY rm.naziv_radmj;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 162

81
Pogled (VIEW)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 163

Brisanje pogleda (VIEW)

• Pogled možete izbrisati bez ikakvog gubitka podataka


jer je pogled (view) baziran na tablicama u bazi.
Brisanje pogleda nema nikakvog utjecaja na te tablice.

DROP VIEW ime_pogleda

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 164

82
Indeks (INDEX)

– Brzina pristupa podacima u relaciji je važno svojstvo sustava za


upravljanje podacima. Najjednostavniji način pristupa,
sekvencijalna pretraga, u većini slučajeva ne zadovoljava.

– Kreiranjem indeksa formira se struktura B-stabla koja omogućava


nesekvencijalni pristup do n-torke u relaciji. Nesekvencijalni
pristup moguć je prema vrijednostima onih atributa nad kojima je
izgraĎena indeksna struktura.

– Nad jednom relacijom može biti izgraĎeno više indeksa, od kojih


svaki može sadržavati jedan ili više atributa.

– Osim radi poboljšanja performansi sustava, indeksi se kreiraju i


radi osiguranja jedinstvenosti vrijednosti atributa u relaciji.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 165

Kreiranje indeksa (INDEX)

– AUTOMATSKI
• UNIQUE INDEX se automatski kreira kada se definira
PRIMARY KEY ili UNIQUE CONSTRAINT u definiciji
tablice

– RUĈNO
• Korisnik može ručno dodati indeks na neki drugi
atribut (radi ubrzanja pristupa podacima)

Primjer:
• CREATE INDEX djelatnik_prez_idx
ON djelatnik(prezime);

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 166

83
Indeks (INDEX)

– Indekse bi u principu trebalo primjenjivati u


sljedećim sluĉajevima:

• za atribute prema kojima se obavlja spajanje relacija


• za atribute koji se često koriste za postavljanje uvjeta
selekcije
• za atribute prema kojima se često obavlja grupiranje
ili sortiranje

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 167

Indeks (INDEX)

– Prilikom kreiranja indeksa treba voditi raĉuna i o


nekim njihovim negativnim aspektima, te ih treba
koristiti samo tamo gdje je njihova uporaba
opravdana, jer:

• indeksi zauzimaju značajan prostor


• ažuriranje vrijednosti atributa nad kojima je izgraĎen
indeks traje znatno dulje nego ažuriranje vrijednosti
nad kojima nema indeksa (ovdje treba razlikovati
atribute prema kojima se pronalaze n-torke koje
treba ažurirati, od atributa čije se vrijednosti
ažuriraju)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 168

84
Indeks (INDEX)

– Indekse ne bi trebalo primjenjivati ukoliko:

• vrijednosti atributa za kojeg se gradi indeks imaju


relativno mali broj različitih vrijednosti (npr.
spol_osobe s dopuštenim vrijednostima M, Ţ, u
relaciji s 30 000 n-torki)
• u relaciji predstoji velik broj upisa, izmjena ili brisanja
n-torki. Preporučljivo je u takvim slučajevima
postojeće indekse izbrisati, te ih ponovo izgraditi tek
nakon obavljenih promjena na podacima.
• relacija sadrži vrlo mali broj n-torki (npr. do stotinu).
U takvim slučajevima sustav lakše pristupa
sekvencijalnom pretragom, nego prolaskom kroz
strukturu B-stabla.

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 169

Sekvence (SEQUENCES)

Što je sekvenca?

- automatski generira jedinstveni broj


- obično se koristi za dodijeljivanje vrijednosti
PRIMARNOM KLJUČU
- sekvenci može pristupati više korisnika

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 170

85
Sekvence (SEQUENCES)

• CREATE SEQUENCE sequence


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 171

Sekvence (SEQUENCES)

• CREATE SEQUENCE dept_deptid_seq


INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 172

86
Sekvence (SEQUENCES)

• INSERT INTO odjel (sifra_odjela, naziv_odjela)


VALUES (odjel_sifra_seq.NEXTVAL, 'Strategija i razvoj');

• SELECT odjel_sifra_seq.CURRVAL
FROM dual;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 173

Sinonimi (SYNONYMS)

Sinonim je drugi naziv za objekt koristan kod


referenciranja na objekte drugih korisnika.

Primjer:
CREATE [PUBLIC] SYNONYM ime_sinonima
FOR [vlasnik.]ime_objekta;

CREATE SYNONYM djelatnik


FOR fsr.djelatnik;

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 174

87
Test 3.

(10 bodova)

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 175

O predmetu

Web
http://www2.fsr.ba/nastava/baze

Pitanja, primjedbe, dogovor za konzultacije ...

 To: goran.kraljevic@hteronet.ba
 Subject: Baze

Ak.god. 2009/2010. BAZE PODATAKA – vjeţbe 176

88

You might also like