Professional Documents
Culture Documents
SQL Skripta
SQL Skripta
SQL
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.
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:
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.
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ž)
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.
PRIMER:
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.
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.
CREATE VIEW i
DROP VIEW
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
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 ;
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.
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
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 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([ALLDISTINCT] 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:
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.
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.
Ako želimo da unesemo vrednost za samo neke atribute, nazivi tih atributa
moraju se eksplicitno navesti. U tom slučaju naredba INSERT ima oblik:
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:
UPDATE ImeTabele
SET atribut1 =izraz1 [,atribut2=izraz2]
[WHERE kriterijum selekcije n-torki],
odnosno,
UPDATE ImeTabele
SET(alribut1, atribut2,..)=(podupit)
[WHERE kriterijum selekcije n-torki]
Sintaksa naredbe:
Ove naredbe čine osnovu dela SQL jezika za kontrolu pristupa bazi podataka.
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.
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).
SQL 135