Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

Poglavlje 13

SQL

SQL (Stuctiured Query Language) je standardni relacioni upitni jezik (ANSI


- American National Standards Institute - standard). Služi za kreiranje, organizaci-
ju i manipulaciju podacima u relacionim bazama podataka. Sam nastanak jezika se
vezuje za IBM-ovu istraživačku laboratoriju u San Hozeu u Kaliforniji, gde je SQL
razvijen kasnih 70-ih godina, u sklopu projekta System R.

Danas je SQL ugrađen u sve vodeće SUBP SQL je uspešno primenjen u sis-
temima za upravljanje bazom podataka kao što su MS Access, DB2, Informix, MS
SQL Server, Oracle, Sybase itd. Trenutno u svetu postoji više standarda SQL jezika,
a najpoznatije su: ANSI-92, ISO, Microsoft SQL, itd. IBM je 1987. godine standar-
dizovao sopstvenu verziju SQL-a. Zatim je ANSI 1989. godine objavio proširenu
verziju, poznatu kao SQL-89. Sledeća standardizovana verzija je SQL-92, dok je
najnovija verzija publikovana 1999. godine.

13.1. Terminologija SQL-a


U terminologiji SQL-a umesto pojma relacije koristi se pojam tabele. Za
jednu n-torku u relaciji kažemo da predstavlja jedan red tabele, a kolone tabele
odgovaraju atributima. Ova terminologija je nasleđena iz prakse koja je pretho-
dila standardizaciji, a rezultat toga je krajnje neobična okolnost da u SQL-u, jezi-
ku za relacione baze podataka, ne postoji ni jedna konstrukcija koja sadrži reč
“RELATION”.

SQL 119
SQL jezik podržava dva režima rada sa bazom podataka:
• Interaktivni: Korisnik zadaje jednu po jednu SQL naredbu interaktivno,
preko tastature, a ishod svake se prikazuje preko monitora. Pristup bazi
podataka je ograničen jedino pravima korisnika i
• Programski: Korisnik pokreće program u kome se nalaze “ugrađene”
SQL naredbe. Pristup bazi podataka ograničen je pravima korisnika i
sadržajem programa. Pri tome, ugrađene naredbe mogu biti statičke
(fiksirane u vreme prevođenja programa) ili dinamičke (konstruisane
tokom izvršavanja programa).

Baza podataka sadrži tabele i druge objekte radi smeštanja i obrade podata-
ka. Za kreiranje baze koristi se naredba:

CREATE DATABASE imeBaze

SQL podržava 3 osnovne funkcije BP: definicije, manipulacije i kontrolu.

DDL (Data Definition Language)

SQL DML (Data Manipulation Language)

DCL (Data Conrol Language)

Definicija baze podataka: Pre početka rada sa bazom podataka neophodno je


definisati njenu strukturu - koje tabele postoje, koji atributi postoje u tabelama i kog
su tipa, koja ograničenja postoje unutar tabela i između njih, koje pomoćne strukture
(indeksi) za ubrzanje pristupa podacima postoje i za koje tabele. Ova komponenta
jezika odgovara DDL-jeziku baze podataka (od “Data Definiton Language”).

Manipulacija bazom podataka: Pored upita nad bazom podataka, kojima


dobijamo željene informacije, neophodno je obezbediti i ažuriranje baze podata-
ka, odnosno unos, izmenu i brisanje podataka. Ova komponenta je u stvari DML-
jezik baze podataka (od “Data Manipulation Language”).

Kontrola pristupu podacima: U svakoj bazi podataka neophodno je ostva-


riti kontrolu koji korisnici imaju pristup kojim podacima i šta mogu da rade sa
tim podacima. Ova komponenta predstavlja DCL-jezik baze podataka (od “Data
Control Language”).

120 SQL
13.2. PRAVILA SQL-a
13.2.1. Pravila za pisanje imena
Imena tabela, pogleda, atributa i drugih objekata baze podataka moraju da
poštuju sledeća pravila:
1) Maksimalna dužina imena je 30 znakova,
2) Ime ne sme da sadrži znak pitanja (?),
3) Nema razlike između malih i velikih slova,
4) Prvi znak mora biti slovo,
5) Dozvoljeni znaci su A-Z, 0-9, _, $ i #,
6) Kao imena se ne smeju koristiti rezervisane reči i
7) Imena se ne smeju ponavljati.

Radi lakšeg čitanja koda preporučuje se da ključne reči (naredbe) budu


napisane velikim slovima, a svi ostali elementi malim slovima. U nekim bazama
niz znakova (string) mora biti napisan kao što je u bazi.

13.2.2. O naredbama i izrazima


Naredbe mogu sadržati izraze u kojima se pojavljuju:
• Logičke operacije: AND, OR i NOT,
• Operacije upoređivanja: =,<,>,≤,≥,< >,kao i IN,ANY,ALL,BETWEEN,
IS NULL, LIKE, ...
• Skupovne operacije: unija (UNION), presek (INTERSECT) i razlika
(EXCEPT),
• Svodne funkcije na skupovima podataka: broj članova (COUNT),
zbir članova (SUM), najmanji i najveći (MIN i MAX), srednja vrednost
(AVG) itd.
• Ostale funkcije za rad s podacima.

Izrazi se mogu grupisati pomoću zagrada. Mogu sadržati zadate brojeve,


tekstualne podatke i/ili ostale vrste podataka.
SQL 121
13.2.3. Tipovi podataka
Pri kreiranju tabela određujemo tip podatka koji će biti korišćen. Sledeća
tabela prikazuje najosnovnije standardne SQL tipove podataka, njihove karakte-
ristike, kao i neke od alternativnih podtipova.

TIP
OPIS
PODATKA
CHAR(n) Podatak tipa niza karaktera fiksne dužine n
VARCHAR(n) Podatak tipa niza karaktera promenljive dužine
Numerički podaci bilo kog tipa, do 38 cifara. Podtipovi:
DEC
DECIMAL
DOUBLE
DOUBLE_PRECISION
NUMBER
FLOAT
INT
NUMERIC
REAL
SMALLINT
Koristi se za promenljive i konstante čiji je sadržaj
DATE
informacija o vremenu, npr.: datumi, sati, min. i sec.
Koristi se za promenljive i konstante koje sadrže logičke
BOOLEN
vrednosti TRUE (istina) i FALSE (laž)

13.2.4. Definicija atributa


Atribut definišemo izrazom od dva ili tri dela:

<ime_atributa> <tip_atributa> <dodatna_svojstva_atributa>

122 SQL
Dodatna svojstva:
• DEFAULT - zadavanje predefinisane vrednosti,
• NOT NULL - vrednost ne sme biti nepoznata ili ne zadata,
• CHECK - provera da je vrednost atributa u zadatim granicama,
• UNIQUE - jedinstvenost među n-torkama unutar relacije,
• PRIMARY KEY - primarni ključ,
• REFERENCES - vrednost mora biti među vrednostima iz druge relacije,
obično ključ iz druge relacije.

13.3. Naredbe SQL-a za definisanje


Definicija neke baze podataka podrazumeva i mogućnost naknadne izme-
ne ili uklanjanja te definicije. U standardnom SQL jeziku se to postiže sa svega
tri naredbe:
• CREATE: Služi za kreiranje nekog objekta (tabele, indeksa, itd.) u bazi
podataka,
• DROP: Služi za uklanjanje definicije nekog objekta iz baze podataka i
• ALTER: Služi za izmenu definicije nekog objekta u bazi podataka.
SQL 123
13.3.1. Rad sa tabelama
Prilikom kreiranja tabele, odnosno definicije njene strukture i osobina
(šema), neophodno je navesti sledeće:
• Ime tabele, koje mora biti unikatno u bazi podataka,
• Ime svake kolone, koja mora biti unikatno unutar tabele,
• Tip svake kolone,
• Jedno ili više ograničenja za kolone koje ih imaju i
• Jedno ili više ograničenja za celu tabelu, ako postoje.

PRIMER:

JMBG Ime Prezime Ulica i broj Grad


0104983134526 Petar Petrović Njegoševa 46 Beograd
0505983871231 Ivan Ivanović Dunavska 55 Novi Sad
0901983987651 Marko Marković Durmitorska 3 Beograd

Naredba za kreiranje tabele glasi CREATE TABLE ImeTabele.

Sintaksa naredbe kreiranja tabele:

CREATE TABLE ImeTabele


(imeKolone TipKolone OgraničenjeKolone ...
{, imeKolone TipKolone OgraničenjeKolone ...}
[OgraničenjeTabele {, OgraničenjeTabele}]);

• ImeTabele i ImeKolone - pravila koja važe za većinu varijabli: prvi znak je


slovo, ostali znaci su slova, cifre, posebni znaci, itd.
• TipKolone - SQL tip podataka
• Uz svaku kolonu mogu se navesti jedno ili više ograničenja za tu kolonu.

Naredba za uklanjanje tabele je DROP TABLE imeTabele. Tabela koja se


uklanja mora biti prazna. U suprotnom SUBP neće izvršiti tu naredbu.

Izmena tabele se vrši naredbom ALTER TABLE imeTabele. Naknadna iz-


mena se najčešće radi jer se kod prvobitnog kreiranja tabele nije uzeto u obzir
124 SQL
sve šta je bilo potrebno, ili je došlo do zahteva za promenama aplikacije i baze
podataka.

Naredba izmene tabele je nešto složenija, pošto treba da obezbedi sledeće


mogućnosti izmene tabele:
• Dodavanje nove kolone,
• Izmena postojeće kolone,
• Uklanjanje postojeće kolone,
• Dodavanje novog ograničenja tabele i
• Uklanjanje postojećeg ograničenja tabele.

Izmena kolone je ograničena samo na mogućnost uvođenja nove ili uklan-


janja podrazumevane vrednosti. U tim okolnostima, postojeća ograničenja kolo-
ne se ne mogu uklanjati a nova se mogu dodavati samo preko dodavanja novog
ograničenja tabele sa naznačenom jednom kolonom.

Uklanjanje kolone nije moguće ako je navedena kolona jedina u tabeli, kao
i ako je navedena klauzula RESTRICTED, a u bazi podataka postoji bar jedno
referenciranje koje referiše kolonu koja se uklanja.

13.4. Pogledi
Pogled (view) predstavlja izvedenu tabelu, ima redove i kolone i nastaje
kao rezultat upita nad osnovnim tabelama i drugim pogledima. Redovi i kolone
pogleda nisu nigde trajno zapisani. Umesto toga, svaki put kada se pristupa pogle-
du izvršava se upit kojim je on definisan.

Prednosti koje imaju pogledi u radu sa RBP:


• Pogled predstavlja jednu vrstu “podprograma” u SQL-u. Jednom kreiran,
može se koristiti u podupitima u WHERE i HAVING klauzulama,
• Komplikovani i često korišćeni upiti se mogu formulisati u vidu pogleda
koje će korisnici jednostavno pozivati u upitima tipa SELECT * FROM
imePogleda,
• Pogled razrešava problem pojavljivanja viška podataka u svodnim upi-
tima (kada u određenim implementacijama pravila za SELECT naredbu

SQL 125
nalažu da pored traženih podataka u rezultat uključimo i nepotrebne po
kojima se grupiše)
• Pogledi znatno olakšavaju kontrolu pristupa bazi podataka.

Naredbe za rad sa pogledima:

CREATE VIEW i
DROP VIEW

Kreiranje pogleda vrši se naredbom čija je sintaksna definicija:

CREATE VIEW Pogled [ ( Kolona ,.. ) ] AS Upit ;

gde je značenje pojedinih djelova ove definicije sledeće:

Pogled Unikatni naziv pogleda u bazi podataka, simbol formiran po pravilu za na-
zive varijabli

Kolona Ako se navedu kolone pogled se ponaša kao tabela sa brojem, redosledom
i imenima kolona kako je navedeno, a u suprotnom se preuzimaju imena
Kolona iz osnovnih tabela i pogleda koje su navedene u naredbi upita. U oba
slučaja, pogled nasleđuje tipove kolona iz osnovnih tabela i pogleda iz upita
Upit Naredba upita SELECT čiji rezultat izvršavanja daje “tabelu” koja
predstavlja pogled

Pogled se uklanja naredbom čija je sintaksna definicija:

DROP VIEW Pogled ;

Uklanjanje pogleda nema nikakvog efekta na osnovne tabele iz upita.

13.5. Indeksi
Indeks je pomoćna datoteka koja treba da ubrza pristup podacima u nekoj
osnovnoj datoteci. Pored toga, indeks ima još jednu namenu: zapisi u osnovnoj
datoteci nalaze se u fizičkom redosledu koji odgovara redosledu unosa podataka.
Kada pristupamo neposredno toj datoteci zapise očitavamo tim redosledom, ali
ako podacima pristupamo posredstvom indeksa, očitavaćemo ih redosledom koji
odgovara rastućoj ili opadajućoj vrednosti indeksnog izraza.

126 SQL
Sintaksa naredbe za kreiranje indeksa je:
CREATE [ UNIQUE ] INDEX ImeIndeksa ON Tabela ( Kolona ,.. );
gde je značenje pojedinih djelova ove definicije sledeće:

UNIQUE Kada se zada ova opcija, indeks mora biti unikatan, odnosno u tabeli
na koju se indeks odnosi ne sme da se više puta ponovi neka vrednost
Kolona
Ime Indeksa Unikatni naziv indeksa u bazi podataka, simbol formiran po pravilu
za nazive varijabli
Kolona Jedna ili više kolona po kojima se formira indeks

Nad istom tabelom po potrebi može biti definisano više indeksa. To se koris-
ti kada su potrebni različiti pristupi podacima i različiti redosledi podataka.
Indeks može biti kreiran odmah, dok je tabela na koju se odnosi prazna, ili
naknadno. Ako se kreira naknadno, indeks dobija sadržaj koji odgovara sadrža-
ju svoje tabele. Od tog trenutka, sadržaj indeksa i tabele je sinhronizovan: svako
dodavanje ili uklanjanje podataka, kao i izmena vrednosti neke od kolona koja je
u sastavu indeksnog izraza, odražava se na sadržaj indeksa.
Indeks se može bilo kada i bez obzira na sadržaj svoje tabele ukloniti nared-
bom čija je sintaksna definicija:
DROP INDEX ImeIndeksa ;

13.6. SELECT upiti


Naredba za upite, odnosno, SELECT naredba, predstavlja najznačajniju i
najčešće korišćenu SQL naredbu za manipulaciju podacima.

13.6.1. Prost upit nad jednom tabelom:


Kod svakog upita se zadaje:
• Koje podatke tražimo kao rezultat,
• Iz kojih tabela to tražimo,
• Koji uslov treba da zadovolje podaci da bi bili uključeni u rezultat i
• Po kom redosledu želimo prikaz rezultata.
SQL 127
Pod prostim upitom nad jednom tabelom podrazumeva se naredba SELECT
nad jednom tabelom koja kao rezultat daje ni jedan red, jedan red ili niz redova
podataka, od kojih svaki odgovara podacima iz jednog reda tabele koji zadovoljava
eventualno zadati uslov.

Rezultat upita ne mora biti relacija u smislu unikatnosti redova koji ulaze u
rezultat. To se ispoljava kada za rezultat upita biramo samo neke od kolona, kada
može doći do pojave istovetnih redova u rezultatu. Stoga prilikom formulacije
upita treba da postoji mogućnost specifikacije da li želimo eliminaciju višestrukog
pojavljivanja istih redova u rezultatu ili ne.

Prost upit nad jednom tabelom ima sledeću sintaksu:

SELECT R-Lista
FROM Tabela
[ WHERE R-Predikat ]
[ ORDER BY { R-Izraz [ ASC | DESC ] } ,.. ] ;

gde je
R-L ista ::= * | { [ ALL | DISTINCT ] R-Izraz ,.. }

Značenje:
* Specijalni slučaj kada želimo da uključimo sve kolone tabele, i to onim
redosledom kojim su navedene u naredbi kreiranja tabele
ALL Tražimo da se u rezultatu prikažu svi redovi uključujući i one koji su
istovetni, podrazumijeva se ako se ništa ne navede

DISTINCT Tražimo da se iz rezultata eliminišu suvišna pojavljivanja (osim jed-


nog) istovetnih redova

R-Izraz Izraz izračunljiv nad svakim pojedinim redom tabele koji pored na-
ziva kolona može da sadrži i operatore i konstante. Naješće je u formi
navođenja jedne kolone
R-Predikat Logički izraz koji je izračunljiv nad svakim pojedinim redom tabele. U
formiranje rezultata upita ulaze samo oni redovi za koje taj izraz daje
istinit rezultat. U najjednostavnijim slučajevima, R-Predikat je u formi
relacionog izraza u kome se sa jedne strane relacionog operatora ( >, <,
=, itd.) javlja ime kolone, a sa druge strane ime kolone ili konstanta

128 SQL
PRIMER 1.
Najjednostavniji mogući SQL upit je u formi:

SELECT * FROM ImeTabele;


Ova naredba prikazuje sve redove tabele čije je ime navedeno iza FROM klauzu-
le. U svakom redu prikazuju se vrednosti svih kolona, onim redom kako je to zapisano
u datoteci (tj. kreirano sa CREATE TABLE). Kod upita se obično traži prikaz samo
određenih kolona, ili prikaz svih kolona u redosledu koji je drugačije određen.

13.6.2. Prost upit nad jednom tabelom sa svodnim rezultatom:


Sintaksa za SELECT (prost upit nad jednom T sa izvedenim rezultatom)

SELECT G-Lista
FROM ImeTabele
[WHERE R-Predikat];
G-Izrazi: najčešće ih čine posebne SQL funkcije (svodne ili agregatne funk-
cije). One mogu biti:
• SUM (ImeKolone) Nalazi sumu svih ne-NULL vrednosti zadate kolone
• AVG (ImeKolone) Nalazi prosečnu vrednost svih ne-NULL vrednosti
zadate kolone
• MIN (ImeKolone) Nalazi minimalnu vrednost svih ne-NULL vred
nosti zadate kolone
• MAX (ImeKolone) Nalazi maksimalnu vrednost svih ne-NULL vred-
nosti zadate kolone
• COUNT(*) Nalazi ukupan broj redova u tabeli
• COUNT([ALLDISTINCT] ListaKolona)
Bez DISTINCT nalazi ukupan broj ne-NULL vrednosti zadate kombina-
cije kolona
Sa DISTINCT nalazi ukupan broj različitih ne-NULL vrednosti zadate
kombinacije kolona

PRIMER:
Uz pretposatvku da su u tabeli Student uneseni svi studenti jednog fakulte-
ta, ukupan broj studenata tog fakulteta se može dobiti sa:

SELECT COUNT(*) FROM Student;

SQL 129
13.6.3. WHERE klauzula
WHERE klauzula služi za izbor zapisa na osnovu kriterijuma (filtriranje).
Prilikom definisanja kriterijuma možemo se koristiti logičkim (AND, OR, NOT) i
komparativnim (<, >, < =, > =, < >) operatorima. WHERE klauzula nije obavezna,
a može se koristiti sa SELECT, UPDATE I DELETE komandama.

Korišćena u SELECT bloku, WHERE klauzula omogućuje:


• Selekciju specifičnih n-torki relacije (redova tabele),
• Selekciju n-torki koje zadovoljavaju višestruke uslove,
• Selekciju n-torki koje zadovoljavaju bar jedan od više uslova,
• Selekciju n-torki koje ne zadovoljavaju određene uslove,
• Selekciju n-torki istovremenim korišćenjem AND i OR logičkih operatora,
• Selekciju n-torki unutar izvesnog raspona,
• Selekciju n-torki koje zadovoljavaju vrednost u listi vrednosti i
• Selekciju n-torki koje sadrže određenu kombinaciju karaktera.

13.6.4. ORDER BY klauzula


Korišćenjem ORDER BY klauzule moguće je sortirati rezultujuću tabelu po
jednom ili više atributa u rastućem ili opadajućem redosledu.

Za specifikaciju rastućeg redosleda koristi se klauzula ASC, za specifikaci-


ju opadajućeg redosleda klauzula DESC. Rastući redosled se podrazumijeva, pa
klauzulu ASC nije neophodno navoditi, za razliku od klauzule DESC koju uvek
treba navesti kada se sortira u opadajućem redosledu.

ORDER BY je uvek poslednja klauzula u SELECT bloku.

13.6.5. GROUP BY klauzula


Klauzula GROUP BY prouzrokuje dobijanje sumarne informacije za svaku
različitu vrednost kolone po kojoj se vrši grupisanje.

GROUP BY klauzula se može koristiti zajedno sa klauzulom WHERE, pri


čemu WHERE klauzula uvek ide pre GROUP BY klauzule. WHERE klauzulom
se najpre izvrši selekcija n-torki, zatim se selektovane n-torke grupišu GROUP
BY klauzulom, pa se, eventualno, izvrši selekcija formiranih grupa HAVING
klauzulom.
130 SQL
13.6.6. HAVING klauzula
HAVING klauzula određuje kriterijume za selekciju grupa, pošto su grupe
već formirane sa GROUP BY klauzulom.

13.6.7. Korišćenje NULL vrednosti


NULL vrednosti su nedefinisane vrednosti. Između NULL vrednosti i vred-
nosti nula postoji značajna razlika. Bez obzira o kom tipu da se radi NULL vred-
nost određene kolone može se testirati samo pomoću dve specijalne klauzule: IS
NULL ili IS NOT NULL. Operatori poređenja se ne mogu koristiti kod testiranja
NULL vrednosti.

13.6.8. LIKE klauzula


Klauzula LIKE omogućava pretraživanje na osnovu “UZORKA”, odnosno,
dobijanje informacija i kada ne znamo potpun naziv (tj. vrednost) određenog
atributa tipa character. Ona koristi dva specijalna karaktera (“%”,”_”) sa sledećim
značenjem:
• “%” predstavlja string od 0 ili više karaktera, a
• “_” predstavlja poziciju jednog karaktera.
Ostali karakteri imaju uobičajeno značenje.

13.7. Naredbe ažuriranja


Ažuriranje u širem smislu značenja te reči obuhvata dodavanje, izmenu
sadržaja i brisanje reda ili redova tabele. Te osnovne operacije realizuju se SQL
naredbama: INSERT, UPDATE i DELETE sa sledećim značenjem:

INSERT: Dodavanje reda ili redova u tabelu,


UPDATE: Izmena sadržaja postojećeg reda ili redova tabele i
DELETE: Brisanje postojećeg reda ili redova tabele.

Posebno treba voditi računa da su sve tri navedene naredbe - naredbe nad
jednom tabelom, tako da se njihovom primenom ne garantuje očuvanje integri-
teta baze podataka. Direktno korišćenje ovih naredbi se zato ne preporučuje, jer

SQL 131
je u tom slučaju procedura za očuvanje integriteta “spolja”, tj. sam korisnik mora
voditi računa o njoj. Ove naredbe direktno treba da koristi samo administrator
baze podataka i to za otklanjanje eventualno narušenog integriteta baze.

Normalno ažuriranje baze podataka vrši se aplikacijama za interaktivno


ažuriranje u koje su ugrađene procedure za očuvanje integriteta. Te procedure se
sastoje od naredbi INSERT, UPDATE i DELETE.

13.7.1. INSERT naredba


Postoje 3 slučaja korišćenja naredbe INSERT, i to kada se vrši:
• Unos vrednosti SVIH atiributa n-torke,
• Unos vrednosti NEKIH atributa n-torke i
• Unos podataka iz jedne tabele u drugu.

Unos vrednosti SVIH atributa n-torke:

U ovom slučaju nije potrebno specificirati nazive atributa, pa INSERT nar-


edba ima oblik:

INSERT INTO NazivTabele


VALUES (vrednost_atr1, vrednost_atr2, . . .) ;

Za svaki atribut MORA postojati vrednost, pri čemu je NULL dozvoljena


opcija za svaki atribut koji nije NOT NULL.

Unos vrednosti NEKIH atributa n-torke:

Ako želimo da unesemo vrednost za samo neke atribute, nazivi tih atributa
moraju se eksplicitno navesti. U tom slučaju naredba INSERT ima oblik:

INSERT INTO NazivTabele (atri1, atri2.)


VALUES (vrednost_atr1, vrednost_atr2, . . . ) ;

Unos podataka iz jedne tabele u drugu:

Ukoliko obe tabele imaju isti broj atributa i ukoliko su atributi identično
definisani, naredba INSERT je oblika:

132 SQL
INSERT INTO tabela 1 SELECT * FROM tabela2 ;

inače:

INSERT INTO tabela1 (atribut1, atribut2, ...)


SELECT atribut1, atribut2
FROM tabela2
WHERE kriterijum selekcije ;

13.7.2. UPDATE naredba


Uz ovu naredbu mora se navesti:
• U kojoj tabeli se vrše izmjene,
• Za koje kolone u redu mijenjamo vrednosti,
• Pod kojim uslovima mijenjamo vrednosti.

Opšti oblik naredbe je:

UPDATE ImeTabele
SET atribut1 =izraz1 [,atribut2=izraz2]
[WHERE kriterijum selekcije n-torki],

odnosno,

UPDATE ImeTabele
SET(alribut1, atribut2,..)=(podupit)
[WHERE kriterijum selekcije n-torki]

Podupit mora vratiti najviše po jednu vrednost za svaki od atributa u listi


atributa iza SET klauzule.

13.7.3. DELETE naredba


Uz ovu naredbu mora se navesti:
• Iz koje tabele se vrši uklanjanje i
• Pod kojim uslovima se uklanja neki red.

Sintaksa naredbe:

DELETE FROM ImeTabele WHERE R-Predikat


SQL 133
SUBP odbija uklanjanja, ako je to u suprotnosti sa dinamičkom specifikaci-
jom referencijalnog integriteta.

13.8. Naredbe za kontrolu prava pristupa


Naredbe za kontrolu prava pristupa podacima u bazi podataka su:
• GRANT: Naredba za dodeljivanje prava korišćenja,
• REVOKE: Naredba za oduzimanje prava korišćenja

Ove naredbe čine osnovu dela SQL jezika za kontrolu pristupa bazi podataka.

Suština kontrole pristupa bazi podataka je u tome da se ostvare sledeći vido-


vi kontrole:
• Ko uopšte može da pristupa bazi podataka,
• Čemu može da pristupi u bazi podataka i
• Šta može da radi sa onim čemu može da pristupi.

Deo SQL jezika za kontrolu pristupa bazi podataka sve to obezbeđuje pu-
tem sledećih funkcija:
• Kreiranje i uklanjanje korisnika - naloga za rad za bazom podataka,
• Dodela i uklanjanje opštih prava za rad sa bazom podataka i
• Dodela i uklanjanje posebnih prava za rad sa bazom podataka.

13.8.1. GRANT naredba


Opšti oblik naredbe GRANT:

GRANT {ALL | [ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE(atr) ] }


ON [kreator {tabela | pogled}
TO (PUBLIC ! korisnik1,korisnik2, ... }
[ WITH GRANT OPTION] ;

Tabela koju kreira korisnik je njegova tabela. Drugi korisnik je ne može


koristiti ukoliko mu kreator, vlasnik tabele eksplicitno ne dodeli pravo korišćenja.
Dodela prava korišćenja tabele drugim korisnicima se vrši naredbom GRANT.
Drugim korisnicima se mogu dati sva prava (ALL) ili samo neka od navedenih
u listi iza GRANT klauzule. Ta prava se daju nad tabelom ili pogledom. Mogu

134 SQL
se dati svim korisnicima (PUBLIC) ili samo nekim, u kom slučaju se eksplicitno
navode identifikatori korisnika kojima se daje pravo korišćenja. Pravo korišćenja
se daje drugom korisniku sa ili bez mogućnosti da to što je dobio dodeli još ne-
kom korisniku (WITH GRANT OPTION).

13.8.2. REVOKE naredba


Opšti oblik naredbe REVOKE:

REVOKE {ALL[ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE(atr) ] }


ON [kreator.] {tabela | pogled}
FROM {PUBLIC | korisnik1, korisnik2, ... } ;

Data prava korišćenja se oduzimaju naredbom REVOKE.

SQL 135

You might also like