SlideShare a Scribd company logo
1 of 31
Download to read offline
Uvod u SQL
-Seminarski rad-
1
Sadržaj:
1. UVOD............................................................................................................................................2
2. SQL standard .................................................................................................................................3
3. SINTAKSA I OSNOVE UPOTREBE SQL JEZIKA ...................................................................5
3.1 Osnovni objekti u SQL jeziku.................................................................................................5
3.2 Velika i mala slova u SQL-u...................................................................................................6
3.3 Obavljanje SQL naredbi u interaktivnom okruženju ..............................................................6
3.3.1 Separator ..........................................................................................................................6
3.3.2 Komentari u SQL-u..........................................................................................................6
3.4 Format naredbi ........................................................................................................................7
3.5 Naredbe za definiciju baze podataka i relacije........................................................................7
3.5.1 CREATE DATABASE....................................................................................................7
3.5.2 CREATE TABLE ............................................................................................................8
3.5.3 Privremena relacija - CREATE TEMP TABLE............................................................10
3.5.4 DROP TABLE...............................................................................................................10
3.5.5 NULL vrednosti.............................................................................................................11
3.6 Četiri osnovne SQL naredbe za upravljanje podacima .........................................................11
4. SINTAKSA I NAČIN UPOTREBE NAREDBE SELECT.........................................................13
4.1 Jednostavni upiti - SELECT - FROM ..................................................................................13
5. INSERT naredba..........................................................................................................................16
6. DELETE naredba.........................................................................................................................17
7. UPDATE naredba........................................................................................................................18
8. PRAKTIČNI DEO.......................................................................................................................20
8.1 Kreiranje baze podataka........................................................................................................20
8.2 Kreiranje tebele u bazi podataka ...........................................................................................20
8.3 Unos podataka.......................................................................................................................21
8.4 Pregled podataka ...................................................................................................................23
8.4.1 Klauzula WHERE..........................................................................................................25
8.4.2 Klauzule GROUP BY / HAVING .................................................................................26
9. ZAKLJUČAK..............................................................................................................................29
10. LITERATURA .........................................................................................................................30
2
1. UVOD
Od samog početka korišćenja računara, obrada različitih vrsta podataka bila je jedan od
osnovnih zadataka. Podaci i informacije su postali pokretačka snaga modernog poslovanja na Zapadu
pa i celom svetu. Kada želimo da imamo kvalitetne informacije o svim segmentima našeg poslovnog
ili čak privatnog života najbolje je da na određen način organizujemo sve podatke koje mogu da nam
pruže informacije koje su od velike važnosti u trenutku kada su nam potrebne. Pogotovo se odnosi na
situacije kada u kratkom roku moramo doneti neku kvalitetnu ili sudbonosnu odluku . Tada bi bilo
najbolje da podaci za svaki pojedini element budu organizovani tako da se mogu smestiti u tabele sa
istovrsnim zaglavljem. Može, a veoma često i mora da bude više tabela koje bi obuhvatili sve segmente
našeg interesovanja. Svi ti segmenti se neretko zbog svoje prirode moraju organizovati u posebne
tabele, a te tabele se mogu povezivati preko određenih zajedničkih elemenata. Skup više tih tabela koje
služe jednom zajedničkom cilju, skupa sa njihovim veznim elementima naziva se BAZOM
PODATAKA.
Njihov zajednicki cilj se odosi na svođenje veoma brze i uspešne informacije o svim
događajima koji se dešavaju unutar jedne celine. Kada kucamo nešto u Wordu , vršimo neke tabelarne
proračune u Exelu u više tabela onda imamo dodira sa bazom podataka. To je u stvari pitanje
organizacije naših podataka. Ako ispisivamo datoteke u Wordu i smeštamo ih po određenim
direktorijima na neki način organizujemo bazu podataka.
U ovom radu objašnjen je sam pojam SQL-a, kako se on razvijao kroz njegovu istoriju, ukratko
su navedene značajke standardizacije SQL-a po njegovim verzijama, navedene su osnovne
komponente SQL-a te njihove osnovne izjave, odnosno naredbe, a objašnjena je i njihova osnovna
sintaksa uz navedene primere – od imenovanja objekata, tipova podataka, te naredbi i funkcija.
3
2. SQL standard
SQL predstavlja akronim za Structured Query Language. Originalno je razvijen 70-tih godina
u IBM Research Laboratory at San Jose - California u okviru relacijskog sistema za upravljanje
bazama podataka System R. SQL je nakon toga standardizovan i postao je referentni jezik za relacijske
baze podataka.
SQL je upitni jezik temeljen na relacijskoj algebri i predikatnom računu. Važna funkcija jezika
je neproceduralnost - opisuje se šta se želi dobiti kao rezultat, ali ne i kako se do tog rezultatata dolazi.
Ugrađeni optimalizator upita pronalazi najefikasniji način obavljanja upita. 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.
SQL objedinjuje funkcije jezika za definiciju podataka (Data Definition Language - DDL) i
jezika za upravljanje podacima (Data Manipulation Language - DML). Zadatak SQL-a je omogućiti
definiciju podataka, upravljanje podacima i provođenje kontrole nad podacima u relacijskoj bazi
podataka.
Primer SQL naredbe iz DDL dela jezika (kreiranje relacije mesto):
CREATE TABLE mesto
( pbr INTEGER NOT NULL
, nazMesto CHAR(40) NOT NULL
, sifOpstina SMALLINT
);
Primer SQL naredbe iz DML dela jezika (iz relacije mesto preuzima sve n-torke kojima je
vrednost atributa poštanski broj jednaka 31000):
SELECT * FROM mesto
WHERE pbr = 31000
Uobičajena su dva načina izgovora akronima SQL:
 S-Q-L (s pojedinačno izgovorenim slovima)
 sequel (pod tim je nazivom jezik bio originalno poznat)
4
SQL je standard prema ANSI (American National Standards Institute), ISO (Organization for
International Standardization), UNIX (X/Open), IBM Standard i FIPS (Federal Information Processing
Standard).
Prva verzija SQL standarda je ANSI X3.135-1986, poznata pod nazivom SQL-86. Standard
obuhvata osnovne operacije s relacijama, definiciju pogleda (view) i nekih pravila integriteta i
ugrađivanje SQL naredbi u jezike treće generacije (FORTRAN, COBOL, C, itd.). Standard je proširen
1989. godine, ANSI X3.135-1989. (delimična definicija referencijskog integriteta). Standard iz 1989.
godine poznat je pod nazivom SQL-89.
Sledeća verzija standarda objavljena je 1992. godine, ANSI X3.135-1992, poznata pod
nazivom SQL-92, ali takođe i pod nazivom SQL-2. Standard je doneo veliki broj novih elemenata
jezika (npr. pravila integriteta definisana na nivou relacije ili n-torke, DATETIME tip podatka,
upravljanje transakcijama, privremene relacije, itd.). Najnoviji standard, poznat pod nazivom SQL-99
ili SQL-3 sadržava nove mogućnosti poput ugradnje aktivnih pravila integriteta i okidača, rekurzivnih
operacija, ugradnje novih, korisnički definisanih tipova podataka, itd.
U komercijalno raspoloživim sistemima za upravljanje bazama podataka SQL-2 standard je
ovog trenutka najšire prihvaćen. Ipak, zbog njegove složenosti do sada još niti jedan sistem ne
podržava taj standard u potpunosti. SQL-92 standard definiše tri kategorije: Entry SQL, Intermediate
SQL i Full SQL. Entry SQL kategorija je slična SQL-89 standardu. Intermediate SQL pokriva
mogućnosti standarda koje su najznačajnije u primjeni u danas raspoloživim komercijalnim
produktima.
Proizvođači komercijalnih sistema takođe ugrađuju i svoje, uglavnom nestandardne, DDL i
DML naredbe. Ti su nestandardni delovi problematični jer programski kod postaje neprenosiv između
različitih SQL sistema, a takođe se bitno otežava usaglašavanje oko budućih standarda.
5
3. SINTAKSA I OSNOVE UPOTREBE SQL JEZIKA
3.1 Osnovni objekti u SQL jeziku
Osnovni objekti u SQL-u su:
- Baza podataka (Database)
- Tablica (Table) - relacija
- Kolona (Column) - atribut, kolona, stupac
- Pogled ili virtualna tablica (View)
- Sinonim (Synonym)
- Pravilo integriteta (Constraint)
- Indeks (Index)
- Skladištena procedura (Stored Procedure)
- Okidač (Trigger)
Imena objekata (identifikatori) u SQL-u formiraju se iz slova, znaka '_' i cifara. Prvi znak od
ukupno 128 značajnih (signifikantnih) znakova mora biti slovo.
Sintaksni dijagram koji pokazuje na koji se način može formirati identifikator prikazan je na
sledećoj slici:
Primer:
ispravno formirani identifikatori: stud ispiti2017godine stud_ispit _1mesec
neispravno formirani identifikatori: _11.mesec 11mesec stud-ispit *mesec
6
3.2 Velika i mala slova u SQL-u
SQL je "neosetljiv" na razliku između velikih i malih slova (case insensitive). To znači da su
sledeće dve naredbe jednake:
select * SELECT *
From MESTO FROM mesto
where NAZmESTO = 'Beograd' WHERE nazMesto = 'Beograd'
Radi preglednosti, uobičajeno je ključne reči pisati velikim slovima, a ostale elemente
naredbe malim slovima (prva naredba u prethodnom primeru je u tom smislu izrazito nepregledno
napisana).
Ipak, važno je uočiti da postoji razlika među nizovima znakova napisanim malim i velikim
slovima. Sledeće dve SQL naredbe NISU jednake:
SELECT * SELECT *
FROM mesto FROM mesto
WHERE nazMesto = 'Beograd' WHERE nazMesto = 'BEOGRAD'
3.3 Obavljanje SQL naredbi u interaktivnom okruženju
3.3.1 Separator
Ukoliko se u interaktivnom okruženju želi izvesti jedna za drugom dve ili više naredbi, kao
separator među naredbama koristi se znak tačka-zarez, ";"
Npr. naredba a;
naredba b; ...
3.3.2 Komentari u SQL-u
• jedan ili više redova omeđenih vitičastim zagradama { }
{ ovo je komentar
koji se slobodno proteže kroz više redova teksta }
• mesto u redu na kojem se nalaze znakovi -- predstavlja početak komentara
SELECT * FROM -- ovo je komentar
tekst nakon znakova -- predstavlja komentar koji se proteže samo do kraja reda
7
3.4 Format naredbi
SQL je jezik slobodnog formata naredbi. Sledeće naredbe su ispravno napisane:
SELECT * SELECT *
FROM mesto FROM mesto
WHERE pbr = 31000 WHERE
pbr = 31000
3.5 Naredbe za definiciju baze podataka i relacije
3.5.1 CREATE DATABASE
Naredba oblika
CREATE DATABASE databaseName
namenjena je za stvaranje nove baze podataka. Obavljanjem ove naredbe kreiraju se strukture
podataka potrebne za opsluživanje baze podataka (rečnik podataka). Vlasnik kreirane baze podataka
je korisnik koji je obavio naredbu.
Sledećom naredbom kreira se baza podataka pod imenom stuslu.
CREATE DATABASE stuslu
Unutar jedne instance poslužitelja baze podataka ne mogu postojati dve baze podataka istog
imena. Ukoliko isti ili neki drugi korisnik pokuša još jednom kreirati bazu podataka pod istim imenom
(a da pri tom prethodno kreirana baza podataka nije u međuvremenu uništena), dobiće poruku o
grešci.
Ukoliko ima dozvolu, korisnik može pristupiti svakoj bazi podataka unutar instance sistema
za upravljanje bazama podataka ("otvoriti bazu podataka") pomoću naredbe:
DATABASE databaseName
ili
DATABASE databaseName EXCLUSIVE
8
Ukoliko se navede rezervisana reč EXCLUSIVE, baza podataka je zaključana ekskluzivno.
Niti jedan drugi proces ne može pristupiti bazi podataka sve dok proces koji je pristupio bazi podataka
ekskluzivno, ne terminira ili obavi naredbu CLOSE DATABASE.
CLOSE DATABASE
Proces koji obavi ovu naredbu prekida vezu s trenutno "otvorenom" bazom podataka.
Komplement naredbe CREATE DATABASE je naredba
DROP DATABASE databaseName
Naredbom se bespovratno uništavaju podaci i celokupna struktura baze podataka
databaseName. Npr.
DROP DATABASE stuslu
Ova se naredba ne može obaviti ukoliko je bilo koji od procesa trenutno spojen na dotičnu
bazu podataka. Svi takvi procesi moraju prethodno ili terminirati ili obaviti naredbu CLOSE
DATABASE.
3.5.2 CREATE TABLE
Pojednostavljeno, relacija je dvodimenzionalna tablica čiji redovi predstavljaju n-torke, a
kolone atribute (svojstva). Svakom n-torkom opisuje se jedan entitet iz stvarnog sveta.
Primer: mbrStud, prezStud, imeStud, prosOcena i pbrRodStud su atributi relacije stud. Svakim
redom relacije opisana su svojstva jednog studenta.
mbrStud prezStud imeStud prosOcena pbrRodStud
12345 Petrovic Ivan 3.76 10000
12346 Kolarov Marko 4.34 51000
12347 Novak Branislav 3.39 20000
12348 Petric Ivica 4.56 31000
Svaka relacija ima svoj ključ. To je atribut ili skup atributa čije vrednosti u relaciji moraju biti
jedinstvene, odnosno u relaciji se ne smeju pojaviti dve n-torke koje imaju jednaku vrednost ključa.
U relaciji može postojati više ključeva, ali se jedan od ključeva uvek proglašava primarnim ključem.
9
Relacija (njena šema i sadržaj) u SQL-u se predstavlja objektom koji se naziva tablica (table).
Struktura svake relacije (tablice) mora biti jednom definisana uz pomoć naredbe CREATE TABLE.
Osnovna, donekle pojednostavljena sintaksa naredbe je:
Pri definisanju relacije, potrebno je za svaki atribut (Column Definition) specificirati naziv
(column name), tip podatka (Data Type), te opcionalno navesti NOT NULL kvalifikator.
NOT NULL kvalifikatorom specificiraju se atributi čije vriednosti u n-torki ne smeju poprimiti
NULL vrednost.
Opciono je uz definiciju svakog atributa relacije moguće zadati tzv. default vrednost. To je
vrednost koja se u trenutku upisa n-torke u relaciju pridružuje atributu ukoliko vrednost za atribut nije
eksplicitno navedena.
Oznaka literal u sintaksnom dijagramu Default Clause predstavlja konstantu (znakovnog,
numeričkog ili datumskog tipa) koja po tipu mora odgovarati tipu atributa kojem se pridružuje. USER
i TODAY su "varijable" koje sadrže tekući datum (vrednost trenutno postavljenu na nivou
operacijskog sistema) i ime (login) korisnika.
10
Primer:
CREATE TABLE stud
( mbrStud INTEGER NOT NULL
, prezStud CHAR(25) NOT NULL
, imeStud CHAR(25)
, prosOcena DECIMAL(3,2) DEFAULT 0.0 NOT NULL
, pbrRodStud INTEGER DEFAULT 10000 -- 10000 Beograd
)
3.5.3 Privremena relacija - CREATE TEMP TABLE
Privremena relacija ima sve karakteristike trajne relacije kreirane naredbom CREATE TABLE,
osim što se ne vidi u rečniku podataka, te biva uništena u trenutku kada završava program u kojem je
kreirana (npr. kad se napusti SQL Editor). Privremena relacija se takođe može uništiti i upotrebom
naredbe DROP TABLE. Privremena relacija se koristi prvenstveno za skladištenje međurezultata, u
slučajevima kad je nepraktično ili nemoguće obaviti operaciju bez deljenja te operacije u nekoliko
odvojenih koraka.
Naredba kojom se kreira privremena relacija vrlo je slična "običnoj" CREATE TABLE naredbi
(potrebno je samo dodati ključnu reč TEMP). Za privremenu relaciju postoje određena ograničenja u
odnosu na običnu relaciju (npr. ne mogu se definisati strani ključevi).
Primer:
CREATE TEMP TABLE privMesto
( pbr INTEGER NOT NULL
, nazMesto CHAR(20) NOT NULL
, sifOpstina CHAR(2) DEFAULT 'BG'
)
Privremena relacija se može kreirati i uz pomoć SELECT naredbe.
3.5.4 DROP TABLE
Naredba DROP TABLE je komplement naredbe CREATE TABLE. Njom se bespovratno
uništavaju podaci i struktura relacije ili privremene relacije tableName.
DROP TABLE tableName
11
3.5.5 NULL vrednosti
Informacija koja se skladišti u bazu podataka često je nekompletna. Vrednost atributa za neku
n-torku može biti privremeno ili trajno nedostupna (čeka se na unos podataka, dobijanje potrebne
informacije je preskupo, informacija ne postoji).
Specifična oznaka za takve vrednosti je NULL (to nije i način fizičke prezentacije NULL
vrednosti). Sistem mora biti u stanju razlikovati NULL vrednosti od ostalih vrednosti istog tipa
podataka (od onih za koje je vrednost atributa poznata).
NOT NULL uz definiciju atributa A u relaciji R predstavlja pravilo prema kojem nije
dopušteno obaviti operaciju koja bi u bilo kojoj n-torki relacije R postavila za vrednost atributa A
NULL vrednost (odnosno, zahteva se da je vrednost atributa A bezuslovno definisana za svaku n-
torku).
Korišćenje NULL vrednosti zahteva pažnju jer se u prisustvu NULL vrednosti uvode nova
pravila pri evaluiranju relacijskih, logičkih, aritmetičkih i ostalih izraza.
3.6 Četiri osnovne SQL naredbe za upravljanje podacima
U ovom su poglavlju navedeni najjednostavniji oblici osnovnih SQL naredbi.
SELECT naredba
Postavljanje SQL upita (query) nad bazom podataka (pregled podataka).
Primer:
SELECT nazMesto
FROM mesto
WHERE pbr = 10000 OR pbr = 51000
nazMesto je naziv atributa čija se vrednost želi videti u izlaznoj listi. mesto je naziv relacije
čije se n-torke pregledaju. pbr = 10000 OR pbr = 51000 je predikat kojim se određuje koje su n-torke
kvalifikovane za izlaznu listu - rezultat.
12
Slobodno se upotrebljavaju konstante, okrugle zagrade, funkcije i operatori. Konverzije tipova
se obavljaju automatski u svim situacijama u kojima je to moguće.
INSERT naredba
Unos n-torke (zapis, red, row) u relaciju.
INSERT INTO mesto
VALUES (11550, 'Lazarevac')
UPDATE naredba
Ažuriranje n-torke (n-torki) u relaciji.
UPDATE mesto
SET nazMesto = 'LAZAREVAC'
WHERE pbr = 11550
DELETE naredba
Brisanje n-torke (n-torki) iz relacije.
DELETE FROM mesto
WHERE pbr = 11550
13
4. SINTAKSA I NAČIN UPOTREBE NAREDBE SELECT
Prema prikazanom sintaksnom dijagramu svi delovi osim SELECT Clause i FROM Clause su
opcioni.
4.1 Jednostavni upiti - SELECT - FROM ...
Minimalni oblik SELECT naredbe sadrži SELECT Clause i FROM Clause. SELECT Clause
sadrži opcioni kvalifikator FIRST max, opcioni kvalifikator ALL ili DISTINCT, te listu atributa ili
izraza (Select list, tj. lista za selekciju) čije se vrednosti trebaju pojaviti u izlaznoj listi rezultata. U
From Clause navodi se ime relacije (tablice) iz koje se uzimaju podaci.
14
U sledećem primeru prikazana je SELECT naredba kojom se uzimaju vrednosti atributa
mbrStud, imeStud i prezStud za sve n-torke relacije stud
SELECT mbrStud, imeStud, prezStud
FROM stud
U prethodnom primeru je u listi za selekciju, na mestu izraza (expression), upotrebljeno ime
atributa iz relacije koja je navedena u FROM listi. Expression može biti vrlo jednostavan (npr. samo
ime atributa), ali može biti i vrlo složeni izraz koji se sastoji od konstanti, naziva atributa, aritmetičkih
operatora i različitih funkcija.
Ispred imena atributa uvek se može navesti ime relacije, ali se ime relacije mora navoditi ispred
imena atributa jedino u slučajevima kad ime atributa nije jednoznačno određeno unutar liste za
selekciju. Nejednoznačnost se može pojaviti tek ukoliko se podaci uzimaju iz više relacija (join), te je
u sedećem primeru navođenje imena relacije suvišno (ali ne i pogrešno, tj. neće uzrokovati grešku).
SELECT stud.pbrStan
FROM stud
Select List može sadržavati oznaku "*" ili imeRelacije.* što znači da će se u izlaznoj listi
pojaviti vrednosti svih atributa iz relacije. Na taj način se izbegava potreba taksativnog navođenja svih
atributa relacije svaki put kad je potrebno ispisati vrednosti svih atributa. Tako je na primer
SELECT * FROM stud ili SELECT stud.* FROM stud
15
ekvivalentno sa
SELECT mbrStud
, imeStud
, prezStud
, pbrRod
, pbrStan
, datRodStud
, jmbgStud FROM stud
Uz svaki atribut moguće je navesti tzv. alias ime, koje će se u izlaznoj relaciji pojaviti kao
naziv kolone (atributa). Ukoliko se alias ime ne navede, naziv kolone određuje se prema nazivu
atributa u rečniku podataka. Alias ime služi isključivo kao "naziv atributa" u rezultantnoj relaciji, te se
ne može koristiti unutar upita osim u ORDER BY Clause. Valja napomenuti i na ovom mestu da je
drugačija situacija s alias imenima relacija, koja se mogu slobodno koristiti unutar upita.
SELECT mbrStud MATICNI_BROJ,
prezStud PREZIME, i
meStud IME
FROM stud
ili
SELECT mbrStud AS MATICNI_BROJ,
prezStud AS PREZIME,
imeStud AS IME
FROM stud
Pomoću kvalifikatora FIRST max može se rezultat SELECT naredbe redukovati na prvih max
n-torki koje bi sadržavao rezultat SELECT naredbe bez tog kvalifikatora. Ukoliko je broj n-torki koje
bi se bez tog kvalifikatora pojavile u rezultatu jednak k, te je k < max, rezultat će sadržavati k n-torki.
Npr, sledećim upitima prikazuje se prvih dvadeset n-torki iz relacije (u prvom primeru samo
atributi navedeni u listi za selekciju, a u drugom primeru svi atributi relacije).
SELECT FIRST 20 mbrStud, prezStud, imeStud FROM stud
SELECT FIRST 20 * FROM stud
Ukoliko se navede kvalifikator DISTINCT, u izlaznoj listi rezultata neće biti višestrukih pojava
istih vrednosti n-torki. Npr, ukoliko izlazna lista treba sadržavati sve međusobno različite poštanske
brojeve rođenja iz relacije stud, koristit će se sedeći upit:
SELECT DISTINCT pbrRod
FROM stud
16
Kvalifikator ALL ima suprotno značenje od DISTINCT. Može se ispustiti jer, ukoliko se ne
navede kvalifikator DISTINCT, kvalifikator ALL primenjuje se po definiciji (by default).
Sledeći primer pokazuje istovremenu upotrebu kvalifikatora FIRST i DISTINCT. Ispisuje se
prvih deset različitih imena studenata iz relacije stud.
SELECT FIRST 10 DISTINCT imeStud
FROM stud
Najjednostavniji oblik FROM Clause sadrži ključnu reč FROM i ime jedne relacije.
5. INSERT naredba
Naredba je namenjena za upis jedne ili više n-torki u relaciju. Opšti oblik INSERT naredbe je
definisan sledećim sintaksnim dijagramima:
Lista s nazivima atributa (column name) navodi se u slučaju kada je redoslied vrednosti koje
se upisuju u relaciju različit od redosleda atributa u relaciji ili se ne nameravaju navesti sve vrednosti
za n-torku. Oblikom INSERT naredbe s VALUES Clause upisuje se jedna n-torka, dok se drugim
oblikom (korišćenjem SELECT Statement) upisuju sve n-torke koje su dobijene kao rezultat navedene
SELECT naredbe. SELECT naredba kojom se određuju n-torke za upis u relaciju ne sme u svom
17
FROM delu sadržavati ime relacije u koju se podaci upisuju. Takođe, SELECT naredba ne sme
sadržavati INTO TEMP Clause niti ORDER BY Clause.
CREATE TABLE mestoStanovanja (
pbr INTEGER
, nazMesto CHAR(40)
);
Primer:
INSERT INTO mestoStanovanja VALUES (10000, 'Beograd')
INSERT INTO mestoStanovanja (nazMesto, pbr) VALUES ('Beograd', 10000)
INSERT INTO mestoStanovanja (pbr) VALUES (10000)
U prethodnoj naredbi će za naziv mesta biti postavljen NULL. Ukoliko bi uz atribut nazMesto,
prilikom definicije relacije, bila definisana default vrednost, za naziv mesta bi bila postavljena ta
default vrednost, a ne NULL.
INSERT INTO mestoStanovanja
SELECT DISTINCT mesto.pbr, mesto.nazMesto
FROM mesto, stud
WHERE mesto.pbr = stud.pbrStan
6. DELETE naredba
Naredbom se briše jedna ili više n-torki iz relacije. Opšti oblik naredbe je:
Condition određuje koje n-torke će biti obrisane. Ukoliko se uslov ne navede, sve n-torke iz
relacije će biti obrisane. Uslov može biti sastavljen kao i u WHERE delu SELECT naredbe, ali ne sme
sadržati podupite koji bi u svom FROM delu sadržavali relaciju iz koje se zapisi brišu.
18
Primer: brisanje svih n-torki iz relacije opstina, čije se šifre ne koriste u relaciji mesto
DELETE FROM opstina
WHERE sifOpstina NOT IN
( SELECT sifOpstina FROM mesto )
7. UPDATE naredba
SQL naredba za izmenu jedne ili više vrednosti atributa u jednoj ili više n-torki relacije. Opšti
oblik naredbe je:
Pomoću sledećih primera ilustrovani su karakteristični načini pridruživanja vrednosti
atributima relacije.
Primer: ažurira se relacija s imenom table. Atributu atr1 pridružuje se vrednost izraza expr1, a
atributu atr2 vrednost izraza expr2. Atributu atr3 pridružuje se vrednost dobijena pomoću SELECT
naredbe. Ažuriraju se one n-torke relacije table koje zadovoljavaju navedeni condition.
UPDATE table SET atr1 = expr1,
atr2 = expr2,
atr3 = (SELECT expr3 FROM ... WHERE ...)
WHERE condition
19
Primer: ažurira se relacija s imenom table. Atributu atr4 pridružuje se vrednost izraza expr4, a
atributu atr5 vrednost dobivena SELECT naredbom. Atributima atr6 i atr7 pridružuju se vrednosti
koje su dobijene jednom SELECT naredbom. Ažuriraju se one n-torke relacije table koje
zadovoljavaju navedeni condition.
UPDATE table SET (atr4, atr5) = (expr4, (SELECT expr5 FROM ... WHERE ...)),
(atr6, atr7) = ((SELECT expr6, expr7 FROM ... WHERE ...))
WHERE condition
Primer: ažurira se relacija s imenom table. U ovom primeru se umesto taksativnog navođenja
imena svih atributa relacije koristi zvezdica. Značenje naredbe je: vrednosti atributa relacije table
postaviti na vrednosti koje su navedene na desnoj strani znaka =. Redosled pridruživanja vrednosti je
jednak redosledu atributa prilikom definiranja relacije table.
UPDATE table SET * = ( expr1,
expr2,
(SELECT expr3 FROM ... WHERE ...),
expr4, (SELECT expr5 FROM ... WHERE ...),
(SELECT expr6, expr7 FROM ... WHERE ...)
)
WHERE condition
SELECT naredba kojom se određuje nova vrednost sme vratiti samo jednu n-torku. U listi za
selekciju treba biti onoliko atributa ili izraza koliko je potrebno da bi se odgovarajući broj novih
vrednosti pridružio odgovarajućem broju atributa relacije koja se ažurira.
Pomoću Condition određuje se koje će n-torke biti ažurirane. Ukoliko se uslov ne navede, biće
ažurirane sve n-torke iz relacije. WHERE uslov može sadržati podupite, ali oni ne smeju u svom
FROM delu sadržati relaciju čije se n-torke ažuriraju, što znači da se ne sme obavljati upit nad
relacijom čiji se zapisi menjaju.
20
8. PRAKTIČNI DEO
8.1 Kreiranje baze podataka
Kreiranje baze podataka se u SQL jeziku vrši pomoću naredbe CREATE DATABASE. Da bi
se kreirala baza podataka u skladu sa strukturom naredbe potrebno je ukucati sledeće:
CREATE DATABASE video;
Ovom naredbom kreirana je nova prazna baza podataka pod imenom video. Sada je moguće
koristiti ovu bazu podataka za dalji rad.
8.2 Kreiranje tebele u bazi podataka
Kreiranje nove tabele u bazi podataka se u SQL jeziku vrši pomoću naredbe CREATE
TABLE.
Napravićemo nekoliko tabela u bazi podataka video koja je kreirana u prvom primeru.
create table mesto
(
ptt bigint not null primary key,
naziv nvarchar(30) not null
);
create table clan
(
`broj clanske karte` int not null primary key,
prezime nvarchar(30) not null,
ime nvarchar(30) not null,
`broj licne karte` bigint not null,
`ulica i broj stanuje` nvarchar(30) not null,
`ptt stanuje` bigint not null
);
21
create table film
(
`inventarni broj` bigint not null primary key,
naziv nvarchar(30) not null,
zanr nvarchar(30) not null,
reziser nvarchar(50) null,
`godina snimljen` int null
);
create table iznajmljuje
(
rbiznajmljivanja bigint auto_increment not null primary key,
`inventarni broj` bigint not null,
`broj clanske karte` int not null,
`datum izdavanja` date not null,
`datum vracanja` date null,
`cena po danu` bigint not null check (`cena po danu`>0)
);
8.3 Unos podataka
Unos podataka se u SQL jeziku vrši pomoću naredbe INSERT.
Da bi ste u tabelu Mesto uneli novi zapis, u skladu sa strukturom naredbe INSERT, to se može
uraditi na sledeći način:
Insert into Mesto
Values (23000, 'Zrenjanin');
Insert into Mesto
Values (23270, 'Melenci');
Insert into Mesto
Values (23300, 'Kikinda');
Insert into Mesto
Values (11000, 'Beograd');
Insert into Mesto
Values (26300, 'Vršac');
Na prethodno opisan način unećemo i sledeće podatke:
Insert into Clan
Values (1, 'Perić', 'Petar', 223432, 'Knez Lazara 78', 23000);
Insert into Clan
Values (2, 'Simić', 'Stojan', 788211, 'Banatska 18c', 23270);
22
Insert into Clan
Values (3, 'Anović', 'Ankica', 342321, 'Bašaidska 3', 23300);
Insert into Clan
Values (4, 'Ðukić', 'Ðorđe', 555321, 'Banatska 124', 23000);
Insert into Clan
Values (5, 'Ðurić', 'Ðorđe', 654321, 'Žarka Zrenjanin 224', 26300);
Insert into Clan
Values (6, 'Nikolić', 'Nebojša', 332221, 'Brigadira Riste 124/34', 23000);
Insert into Clan
Values (7, 'Marić', 'Milena', 722921, 'Cara Dušana 22c', 23000);
Insert into Film
Values (1, 'Pisma sa Iwo Jime', 'ratni', 'Klint Istvud', 2006);
Insert into Film
Values (2, 'Zastave naših očeva', 'ratni', 'Klint Istvud', 2006);
Insert into Film
Values (3, 'Gladijator', 'istorijski', 'Ridli Skot', 2000);
Insert into Film
Values (4, 'Titanik', 'drama', 'Džejms Kamerun', 1998);
Insert into Film
Values (5, 'Beogradski fantom', 'drama', 'Jovan Todoroviæ', 2009);
Insert into Film
Values (6, 'Wicker park', 'triler', 'Paul McGuigan', 2004);
Insert into Film
Values (7, 'Troja', 'akcioni', 'Paul McGuigan', 2004);
Insert into Film
Values (8, 'Forest Gamp', 'komedija', 'Robert Zemeckis', 1994);
Insert into Film
Values (9, '10000 BC', 'avanturistički', 'Roland Emerih', 2008);
Insert into Iznajmljuje
Values ('1', 1, 1, '2011-01-20', '2011-01-21', 100);
Insert into Iznajmljuje
Values ('2', 2, 1, '2011-01-20', '2011-01-22', 100);
Insert into Iznajmljuje
Values ('3', 3, 2, '2011-01-20', '2011-01-21', 100);
Insert into Iznajmljuje
Values ('4', 1, 3, '2011-01-22', '2011-01-25', 100);
23
Insert into Iznajmljuje
Values ('5', 6, 2, '2011-02-02', '2011-02-03', 150);
Insert into Iznajmljuje
Values ('6', 8, 5, '2011-02-09', '2011-02-10', 150);
Insert into Iznajmljuje
Values ('7', 7, 5, '2011-02-09', '2011-02-10', 150);
8.4 Pregled podataka
Pregled podataka se u SQL jeziku vrši pomoću naredbe SELECT. Da bi smo izvršili pregled
svih podataka iz tabele Mesto iskoristićemo najosnovniji oblik naredbe SELECT:
SELECT * FROM Mesto;
Ovom naredbom smo preuzeli sve podatke (sve zapise sa svim kolonama) iz tabele Mesto.
Rezultate možemo sortirati vertikalno i horizontalno. Da bih to bolje objasnio izvršićemo
pregled tabele FILM.
24
SELECT * FROM Film;
Vertikalno sortiranje se izvodi preko navođenja kolona u redosledu u kom želimo da se
prikazuju parametri zapisa:
SELECT `godina snimljen`, zanr, naziv, `inventarni broj`, reziser
FROM Film;
U rezultat ove naredbe:
ulaze svi zapisi vertikalno poređani po redosledu u kom su unošeni u tabelu ali je redosled
njihovih parametara promenjen.
Horizontalno sortiranje se vrši zadavanjem jedne ili više kolona na osnovu čijeg sadržaja
će sortiranje biti obavljeno u zadatom smeru:
SELECT * FROM Film ORDER BY `godina snimljen` ASC;
25
U rezultat ove naredbe:
ulaze svi zapisi sortirani po parametru godina snimljen u rastućem redosledu. Ukoliko želimo
da zapise poređamo u opadajućem redosledu parametar ASC ćemo zameniti sa DESC.
8.4.1 Klauzula WHERE
Ova klauzula se koristi za zadavanje odredjenog uslova koji zapis mora da ispuni da bi ušao u
rezultat:
SELECT * FROM film
WHERE `godina snimljen`=2006
Ovakvim korišćenjem WHERE klauzule smo rezultat ograničili samo na zapise kod kojih je
parametar godina snimljen (vrednost u koloni godina snimljen) jednak 2006:
26
SELECT * FROM film
WHERE `godina snimljen`<2006
.
SELECT * FROM film
WHERE `godina snimljen`>2000 and zanr='ratni'
8.4.2 Klauzule GROUP BY / HAVING
Klauzula GROUP BY se koristi za grupisanje podataka koji se dobijaju kao rezultat upita, a
klauzula HAVING se koristi za selekciju određenih grupa koje su već kreirane GROUP BY
klauzulom.
SELECT zanr, COUNT(*) FROM film
GROUP BY zanr;
Korišćenjem naredbe u ovakvom obliku kao rezultat dobićemo spisak žanrova i broj filmova
po nekom žanru.
27
SELECT ptt, COUNT(*) FROM mesto
GROUP BY ptt;
Ukoliko želimo da iz rezultata prikažemo samo podatke koji ispunjavaju određeni kriterijum,
to će mo uraditi uz pomoć klauzule HAVING, na sledeći način:
SELECT zanr, COUNT(*) FROM film
GROUP BY zanr
HAVING COUNT(*)=2;
Na ovaj način kao rezultat dobićemo spisak žanrova iz kojih dolazi po dva filma.
28
Primeri:
1. Formirati spisak svih iznajmljenih filmova.
SELECT film.*, iznajmljuje.*
FROM iznajmljuje, film
WHERE iznajmljuje.`inventarni broj` =
film.`inventarni broj`
2. Koliko filmova je u ponudi video kluba?
Select COUNT(naziv) As Filmova
From film;
3. Prikazati podatke o svim filmovima koje je režirao Klint Istvud.
SELECT *
FROM film
WHERE reziser='Klint Istvud';
29
9. ZAKLJUČAK
SQL je upitni programski jezik posebne namene koji služi za upravljanje podacima relacijskog
sistema za upravljanje bazama podataka, a njegov opseg obuhvata izradu, traženje, ažuriranje i brisanje
podataka iz relacijskih baza podataka. Iako je SQL fleksibilan jezik kojeg je moguće koristiti na više
načina, uglavnom se koristi kao alat u komunikaciji sa relacijskim bazama podataka.
Iako je SQL standardizovan, postoji mnogo varijacija na temelju SQL-a. Često se kod
komercijalnih implementacija izostavi podrška za neke osnovne funkcije standarda. A proizvođači
komercijalnih sistema takođe često uključuju i neke svoje nestandardne naredbe, stoga nije moguće
preneti većinu SQL kodova iz jedne baze u neku drugu bazu bez većih prilagođavanja. Stoga se koriste
standardi za pristup bazama podataka kao što su Open Database Connectivity (ODBC) ili Java
Database Connectivity (JDBC).
U ovom seminarskom radu sam prikazao osnove SQL-a. Pokazao sam na koji način se stvara
tablica te kako se obavljaju osnovne operacije nad elementima tablice. Naravno, ovo je bio samo uvod
u SQL. Postoji još mnoštvo drugih naredbi i mogućnosti osim ovih ovde spomenutih.
30
10. LITERATURA
1. Sqlcourse, multimedija, url;
http://www.sqlcourse.com/intro.html
2. Wikipedia, multimedija, url;
https://en.wikipedia.org/wiki/SQL
3. SearchSqlServer, multimedija, url;
http://searchsqlserver.techtarget.com/definition/SQL
4. NOAA EDM, multimedija, url;
https://geo-ide.noaa.gov/wiki/index.php?title=Database_Access_Standards
5. Praktikum Baze podataka SQL, M.Veinović, I. Franc, A. Jevremović, Univerzitet
Singidunum, jun 2016.

More Related Content

What's hot (20)

gramatika-ruskog-jezika-pdf
gramatika-ruskog-jezika-pdfgramatika-ruskog-jezika-pdf
gramatika-ruskog-jezika-pdf
 
Marička bitka
Marička bitkaMarička bitka
Marička bitka
 
Boje
BojeBoje
Boje
 
Bitke prvog srpskog ustanka
Bitke prvog srpskog ustankaBitke prvog srpskog ustanka
Bitke prvog srpskog ustanka
 
Funkcionalni stilovi savic dusan -mirjana radojkovic
Funkcionalni stilovi  savic dusan -mirjana radojkovicFunkcionalni stilovi  savic dusan -mirjana radojkovic
Funkcionalni stilovi savic dusan -mirjana radojkovic
 
Kontrolni 8 a
Kontrolni 8 aKontrolni 8 a
Kontrolni 8 a
 
Srpska despotovina
Srpska despotovinaSrpska despotovina
Srpska despotovina
 
Barok u hrvatskoj
Barok u hrvatskojBarok u hrvatskoj
Barok u hrvatskoj
 
Prve države južnih slovena
Prve države južnih slovenaPrve države južnih slovena
Prve države južnih slovena
 
Franačka država
Franačka državaFranačka država
Franačka država
 
Miloš Obrenović
Miloš Obrenović Miloš Obrenović
Miloš Obrenović
 
Doseljavanje slovena na balkansko poluostrvo
Doseljavanje slovena na balkansko poluostrvoDoseljavanje slovena na balkansko poluostrvo
Doseljavanje slovena na balkansko poluostrvo
 
Prirucnik za-planiranje-i-pisanje-iop-a-neredigovana-ver
Prirucnik za-planiranje-i-pisanje-iop-a-neredigovana-verPrirucnik za-planiranje-i-pisanje-iop-a-neredigovana-ver
Prirucnik za-planiranje-i-pisanje-iop-a-neredigovana-ver
 
Prve srpske države
Prve srpske državePrve srpske države
Prve srpske države
 
Informatika i informacije
Informatika i informacijeInformatika i informacije
Informatika i informacije
 
Prodor turaka osmanlija na balkansko poluostrvo
Prodor turaka osmanlija na balkansko poluostrvoProdor turaka osmanlija na balkansko poluostrvo
Prodor turaka osmanlija na balkansko poluostrvo
 
Seoba srba
Seoba srbaSeoba srba
Seoba srba
 
Realni brojevi (8.razred)
Realni brojevi (8.razred)Realni brojevi (8.razred)
Realni brojevi (8.razred)
 
Srbija i Crna Gora u Prvom svetskom ratu
Srbija i Crna Gora u Prvom svetskom ratuSrbija i Crna Gora u Prvom svetskom ratu
Srbija i Crna Gora u Prvom svetskom ratu
 
Zeta u doba balšića
Zeta u doba balšićaZeta u doba balšića
Zeta u doba balšića
 

Similar to Uvod u sql

Nasa skola baze_podataka_stefan_nikolic
Nasa skola baze_podataka_stefan_nikolicNasa skola baze_podataka_stefan_nikolic
Nasa skola baze_podataka_stefan_nikolicDragan Ilić
 
Baze podataka - Stefan Nikolić - Silvana Ivković
Baze podataka - Stefan Nikolić - Silvana IvkovićBaze podataka - Stefan Nikolić - Silvana Ivković
Baze podataka - Stefan Nikolić - Silvana IvkovićNašaŠkola.Net
 
Pitanja kss (1)
Pitanja  kss (1)Pitanja  kss (1)
Pitanja kss (1)Milos Ilic
 
Baze podataka
Baze podatakaBaze podataka
Baze podatakagrujam
 
Projektovanje i implementacija SPPR
Projektovanje i implementacija SPPRProjektovanje i implementacija SPPR
Projektovanje i implementacija SPPRMiloš Kecman
 
Nasa skola 2011: Baze podataka - Stefan Nikolic -Silvana Ivkovic
Nasa skola 2011: Baze podataka - Stefan Nikolic -Silvana IvkovicNasa skola 2011: Baze podataka - Stefan Nikolic -Silvana Ivkovic
Nasa skola 2011: Baze podataka - Stefan Nikolic -Silvana IvkovicNašaŠkola.Net
 
Kreiranje baze podataka u Access-u
Kreiranje baze podataka u Access-uKreiranje baze podataka u Access-u
Kreiranje baze podataka u Access-uDejan Pejčić
 
Oracle baza podataka
Oracle baza podatakaOracle baza podataka
Oracle baza podatakastevansek
 
Iir oracle baza podataka xe
Iir   oracle baza podataka xeIir   oracle baza podataka xe
Iir oracle baza podataka xealeksis2013
 
Seminarski diplomskiosnovne strukture-podataka
Seminarski diplomskiosnovne strukture-podatakaSeminarski diplomskiosnovne strukture-podataka
Seminarski diplomskiosnovne strukture-podatakadobrotas
 
Uputstvo access2007
Uputstvo access2007Uputstvo access2007
Uputstvo access2007damirdak
 
R2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola Lazić
R2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola LazićR2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola Lazić
R2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola LazićNašaŠkola.Net
 
Uvod u funkcionalno programiranje
Uvod u funkcionalno programiranjeUvod u funkcionalno programiranje
Uvod u funkcionalno programiranjeDamjan Pavlica
 
Model podataka.pdf
Model podataka.pdfModel podataka.pdf
Model podataka.pdfVlada Nedic
 

Similar to Uvod u sql (20)

Nasa skola baze_podataka_stefan_nikolic
Nasa skola baze_podataka_stefan_nikolicNasa skola baze_podataka_stefan_nikolic
Nasa skola baze_podataka_stefan_nikolic
 
Baze podataka - Stefan Nikolić - Silvana Ivković
Baze podataka - Stefan Nikolić - Silvana IvkovićBaze podataka - Stefan Nikolić - Silvana Ivković
Baze podataka - Stefan Nikolić - Silvana Ivković
 
Nasa skola baze_podataka_stefan_nikolic
Nasa skola baze_podataka_stefan_nikolicNasa skola baze_podataka_stefan_nikolic
Nasa skola baze_podataka_stefan_nikolic
 
Pitanja kss (1)
Pitanja  kss (1)Pitanja  kss (1)
Pitanja kss (1)
 
Baze podataka
Baze podatakaBaze podataka
Baze podataka
 
Projektovanje i implementacija SPPR
Projektovanje i implementacija SPPRProjektovanje i implementacija SPPR
Projektovanje i implementacija SPPR
 
Nasa skola 2011: Baze podataka - Stefan Nikolic -Silvana Ivkovic
Nasa skola 2011: Baze podataka - Stefan Nikolic -Silvana IvkovicNasa skola 2011: Baze podataka - Stefan Nikolic -Silvana Ivkovic
Nasa skola 2011: Baze podataka - Stefan Nikolic -Silvana Ivkovic
 
Upiti u Access-u
Upiti u Access-uUpiti u Access-u
Upiti u Access-u
 
Kreiranje baze podataka u Access-u
Kreiranje baze podataka u Access-uKreiranje baze podataka u Access-u
Kreiranje baze podataka u Access-u
 
Oracle baza podataka
Oracle baza podatakaOracle baza podataka
Oracle baza podataka
 
Iir oracle baza podataka xe
Iir   oracle baza podataka xeIir   oracle baza podataka xe
Iir oracle baza podataka xe
 
Sql server alati za bi
Sql server alati za biSql server alati za bi
Sql server alati za bi
 
IT6-L6.pptx
IT6-L6.pptxIT6-L6.pptx
IT6-L6.pptx
 
Seminarski diplomskiosnovne strukture-podataka
Seminarski diplomskiosnovne strukture-podatakaSeminarski diplomskiosnovne strukture-podataka
Seminarski diplomskiosnovne strukture-podataka
 
Uputstvo access2007
Uputstvo access2007Uputstvo access2007
Uputstvo access2007
 
Objektniprist
ObjektnipristObjektniprist
Objektniprist
 
SQL
SQLSQL
SQL
 
R2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola Lazić
R2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola LazićR2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola Lazić
R2 MS Excel - Rad sa imenovanim grupama ćelija u Excel-u - Nikola Lazić
 
Uvod u funkcionalno programiranje
Uvod u funkcionalno programiranjeUvod u funkcionalno programiranje
Uvod u funkcionalno programiranje
 
Model podataka.pdf
Model podataka.pdfModel podataka.pdf
Model podataka.pdf
 

Uvod u sql

  • 2. 1 Sadržaj: 1. UVOD............................................................................................................................................2 2. SQL standard .................................................................................................................................3 3. SINTAKSA I OSNOVE UPOTREBE SQL JEZIKA ...................................................................5 3.1 Osnovni objekti u SQL jeziku.................................................................................................5 3.2 Velika i mala slova u SQL-u...................................................................................................6 3.3 Obavljanje SQL naredbi u interaktivnom okruženju ..............................................................6 3.3.1 Separator ..........................................................................................................................6 3.3.2 Komentari u SQL-u..........................................................................................................6 3.4 Format naredbi ........................................................................................................................7 3.5 Naredbe za definiciju baze podataka i relacije........................................................................7 3.5.1 CREATE DATABASE....................................................................................................7 3.5.2 CREATE TABLE ............................................................................................................8 3.5.3 Privremena relacija - CREATE TEMP TABLE............................................................10 3.5.4 DROP TABLE...............................................................................................................10 3.5.5 NULL vrednosti.............................................................................................................11 3.6 Četiri osnovne SQL naredbe za upravljanje podacima .........................................................11 4. SINTAKSA I NAČIN UPOTREBE NAREDBE SELECT.........................................................13 4.1 Jednostavni upiti - SELECT - FROM ..................................................................................13 5. INSERT naredba..........................................................................................................................16 6. DELETE naredba.........................................................................................................................17 7. UPDATE naredba........................................................................................................................18 8. PRAKTIČNI DEO.......................................................................................................................20 8.1 Kreiranje baze podataka........................................................................................................20 8.2 Kreiranje tebele u bazi podataka ...........................................................................................20 8.3 Unos podataka.......................................................................................................................21 8.4 Pregled podataka ...................................................................................................................23 8.4.1 Klauzula WHERE..........................................................................................................25 8.4.2 Klauzule GROUP BY / HAVING .................................................................................26 9. ZAKLJUČAK..............................................................................................................................29 10. LITERATURA .........................................................................................................................30
  • 3. 2 1. UVOD Od samog početka korišćenja računara, obrada različitih vrsta podataka bila je jedan od osnovnih zadataka. Podaci i informacije su postali pokretačka snaga modernog poslovanja na Zapadu pa i celom svetu. Kada želimo da imamo kvalitetne informacije o svim segmentima našeg poslovnog ili čak privatnog života najbolje je da na određen način organizujemo sve podatke koje mogu da nam pruže informacije koje su od velike važnosti u trenutku kada su nam potrebne. Pogotovo se odnosi na situacije kada u kratkom roku moramo doneti neku kvalitetnu ili sudbonosnu odluku . Tada bi bilo najbolje da podaci za svaki pojedini element budu organizovani tako da se mogu smestiti u tabele sa istovrsnim zaglavljem. Može, a veoma često i mora da bude više tabela koje bi obuhvatili sve segmente našeg interesovanja. Svi ti segmenti se neretko zbog svoje prirode moraju organizovati u posebne tabele, a te tabele se mogu povezivati preko određenih zajedničkih elemenata. Skup više tih tabela koje služe jednom zajedničkom cilju, skupa sa njihovim veznim elementima naziva se BAZOM PODATAKA. Njihov zajednicki cilj se odosi na svođenje veoma brze i uspešne informacije o svim događajima koji se dešavaju unutar jedne celine. Kada kucamo nešto u Wordu , vršimo neke tabelarne proračune u Exelu u više tabela onda imamo dodira sa bazom podataka. To je u stvari pitanje organizacije naših podataka. Ako ispisivamo datoteke u Wordu i smeštamo ih po određenim direktorijima na neki način organizujemo bazu podataka. U ovom radu objašnjen je sam pojam SQL-a, kako se on razvijao kroz njegovu istoriju, ukratko su navedene značajke standardizacije SQL-a po njegovim verzijama, navedene su osnovne komponente SQL-a te njihove osnovne izjave, odnosno naredbe, a objašnjena je i njihova osnovna sintaksa uz navedene primere – od imenovanja objekata, tipova podataka, te naredbi i funkcija.
  • 4. 3 2. SQL standard SQL predstavlja akronim za Structured Query Language. Originalno je razvijen 70-tih godina u IBM Research Laboratory at San Jose - California u okviru relacijskog sistema za upravljanje bazama podataka System R. SQL je nakon toga standardizovan i postao je referentni jezik za relacijske baze podataka. SQL je upitni jezik temeljen na relacijskoj algebri i predikatnom računu. Važna funkcija jezika je neproceduralnost - opisuje se šta se želi dobiti kao rezultat, ali ne i kako se do tog rezultatata dolazi. Ugrađeni optimalizator upita pronalazi najefikasniji način obavljanja upita. 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. SQL objedinjuje funkcije jezika za definiciju podataka (Data Definition Language - DDL) i jezika za upravljanje podacima (Data Manipulation Language - DML). Zadatak SQL-a je omogućiti definiciju podataka, upravljanje podacima i provođenje kontrole nad podacima u relacijskoj bazi podataka. Primer SQL naredbe iz DDL dela jezika (kreiranje relacije mesto): CREATE TABLE mesto ( pbr INTEGER NOT NULL , nazMesto CHAR(40) NOT NULL , sifOpstina SMALLINT ); Primer SQL naredbe iz DML dela jezika (iz relacije mesto preuzima sve n-torke kojima je vrednost atributa poštanski broj jednaka 31000): SELECT * FROM mesto WHERE pbr = 31000 Uobičajena su dva načina izgovora akronima SQL:  S-Q-L (s pojedinačno izgovorenim slovima)  sequel (pod tim je nazivom jezik bio originalno poznat)
  • 5. 4 SQL je standard prema ANSI (American National Standards Institute), ISO (Organization for International Standardization), UNIX (X/Open), IBM Standard i FIPS (Federal Information Processing Standard). Prva verzija SQL standarda je ANSI X3.135-1986, poznata pod nazivom SQL-86. Standard obuhvata osnovne operacije s relacijama, definiciju pogleda (view) i nekih pravila integriteta i ugrađivanje SQL naredbi u jezike treće generacije (FORTRAN, COBOL, C, itd.). Standard je proširen 1989. godine, ANSI X3.135-1989. (delimična definicija referencijskog integriteta). Standard iz 1989. godine poznat je pod nazivom SQL-89. Sledeća verzija standarda objavljena je 1992. godine, ANSI X3.135-1992, poznata pod nazivom SQL-92, ali takođe i pod nazivom SQL-2. Standard je doneo veliki broj novih elemenata jezika (npr. pravila integriteta definisana na nivou relacije ili n-torke, DATETIME tip podatka, upravljanje transakcijama, privremene relacije, itd.). Najnoviji standard, poznat pod nazivom SQL-99 ili SQL-3 sadržava nove mogućnosti poput ugradnje aktivnih pravila integriteta i okidača, rekurzivnih operacija, ugradnje novih, korisnički definisanih tipova podataka, itd. U komercijalno raspoloživim sistemima za upravljanje bazama podataka SQL-2 standard je ovog trenutka najšire prihvaćen. Ipak, zbog njegove složenosti do sada još niti jedan sistem ne podržava taj standard u potpunosti. SQL-92 standard definiše tri kategorije: Entry SQL, Intermediate SQL i Full SQL. Entry SQL kategorija je slična SQL-89 standardu. Intermediate SQL pokriva mogućnosti standarda koje su najznačajnije u primjeni u danas raspoloživim komercijalnim produktima. Proizvođači komercijalnih sistema takođe ugrađuju i svoje, uglavnom nestandardne, DDL i DML naredbe. Ti su nestandardni delovi problematični jer programski kod postaje neprenosiv između različitih SQL sistema, a takođe se bitno otežava usaglašavanje oko budućih standarda.
  • 6. 5 3. SINTAKSA I OSNOVE UPOTREBE SQL JEZIKA 3.1 Osnovni objekti u SQL jeziku Osnovni objekti u SQL-u su: - Baza podataka (Database) - Tablica (Table) - relacija - Kolona (Column) - atribut, kolona, stupac - Pogled ili virtualna tablica (View) - Sinonim (Synonym) - Pravilo integriteta (Constraint) - Indeks (Index) - Skladištena procedura (Stored Procedure) - Okidač (Trigger) Imena objekata (identifikatori) u SQL-u formiraju se iz slova, znaka '_' i cifara. Prvi znak od ukupno 128 značajnih (signifikantnih) znakova mora biti slovo. Sintaksni dijagram koji pokazuje na koji se način može formirati identifikator prikazan je na sledećoj slici: Primer: ispravno formirani identifikatori: stud ispiti2017godine stud_ispit _1mesec neispravno formirani identifikatori: _11.mesec 11mesec stud-ispit *mesec
  • 7. 6 3.2 Velika i mala slova u SQL-u SQL je "neosetljiv" na razliku između velikih i malih slova (case insensitive). To znači da su sledeće dve naredbe jednake: select * SELECT * From MESTO FROM mesto where NAZmESTO = 'Beograd' WHERE nazMesto = 'Beograd' Radi preglednosti, uobičajeno je ključne reči pisati velikim slovima, a ostale elemente naredbe malim slovima (prva naredba u prethodnom primeru je u tom smislu izrazito nepregledno napisana). Ipak, važno je uočiti da postoji razlika među nizovima znakova napisanim malim i velikim slovima. Sledeće dve SQL naredbe NISU jednake: SELECT * SELECT * FROM mesto FROM mesto WHERE nazMesto = 'Beograd' WHERE nazMesto = 'BEOGRAD' 3.3 Obavljanje SQL naredbi u interaktivnom okruženju 3.3.1 Separator Ukoliko se u interaktivnom okruženju želi izvesti jedna za drugom dve ili više naredbi, kao separator među naredbama koristi se znak tačka-zarez, ";" Npr. naredba a; naredba b; ... 3.3.2 Komentari u SQL-u • jedan ili više redova omeđenih vitičastim zagradama { } { ovo je komentar koji se slobodno proteže kroz više redova teksta } • mesto u redu na kojem se nalaze znakovi -- predstavlja početak komentara SELECT * FROM -- ovo je komentar tekst nakon znakova -- predstavlja komentar koji se proteže samo do kraja reda
  • 8. 7 3.4 Format naredbi SQL je jezik slobodnog formata naredbi. Sledeće naredbe su ispravno napisane: SELECT * SELECT * FROM mesto FROM mesto WHERE pbr = 31000 WHERE pbr = 31000 3.5 Naredbe za definiciju baze podataka i relacije 3.5.1 CREATE DATABASE Naredba oblika CREATE DATABASE databaseName namenjena je za stvaranje nove baze podataka. Obavljanjem ove naredbe kreiraju se strukture podataka potrebne za opsluživanje baze podataka (rečnik podataka). Vlasnik kreirane baze podataka je korisnik koji je obavio naredbu. Sledećom naredbom kreira se baza podataka pod imenom stuslu. CREATE DATABASE stuslu Unutar jedne instance poslužitelja baze podataka ne mogu postojati dve baze podataka istog imena. Ukoliko isti ili neki drugi korisnik pokuša još jednom kreirati bazu podataka pod istim imenom (a da pri tom prethodno kreirana baza podataka nije u međuvremenu uništena), dobiće poruku o grešci. Ukoliko ima dozvolu, korisnik može pristupiti svakoj bazi podataka unutar instance sistema za upravljanje bazama podataka ("otvoriti bazu podataka") pomoću naredbe: DATABASE databaseName ili DATABASE databaseName EXCLUSIVE
  • 9. 8 Ukoliko se navede rezervisana reč EXCLUSIVE, baza podataka je zaključana ekskluzivno. Niti jedan drugi proces ne može pristupiti bazi podataka sve dok proces koji je pristupio bazi podataka ekskluzivno, ne terminira ili obavi naredbu CLOSE DATABASE. CLOSE DATABASE Proces koji obavi ovu naredbu prekida vezu s trenutno "otvorenom" bazom podataka. Komplement naredbe CREATE DATABASE je naredba DROP DATABASE databaseName Naredbom se bespovratno uništavaju podaci i celokupna struktura baze podataka databaseName. Npr. DROP DATABASE stuslu Ova se naredba ne može obaviti ukoliko je bilo koji od procesa trenutno spojen na dotičnu bazu podataka. Svi takvi procesi moraju prethodno ili terminirati ili obaviti naredbu CLOSE DATABASE. 3.5.2 CREATE TABLE Pojednostavljeno, relacija je dvodimenzionalna tablica čiji redovi predstavljaju n-torke, a kolone atribute (svojstva). Svakom n-torkom opisuje se jedan entitet iz stvarnog sveta. Primer: mbrStud, prezStud, imeStud, prosOcena i pbrRodStud su atributi relacije stud. Svakim redom relacije opisana su svojstva jednog studenta. mbrStud prezStud imeStud prosOcena pbrRodStud 12345 Petrovic Ivan 3.76 10000 12346 Kolarov Marko 4.34 51000 12347 Novak Branislav 3.39 20000 12348 Petric Ivica 4.56 31000 Svaka relacija ima svoj ključ. To je atribut ili skup atributa čije vrednosti u relaciji moraju biti jedinstvene, odnosno u relaciji se ne smeju pojaviti dve n-torke koje imaju jednaku vrednost ključa. U relaciji može postojati više ključeva, ali se jedan od ključeva uvek proglašava primarnim ključem.
  • 10. 9 Relacija (njena šema i sadržaj) u SQL-u se predstavlja objektom koji se naziva tablica (table). Struktura svake relacije (tablice) mora biti jednom definisana uz pomoć naredbe CREATE TABLE. Osnovna, donekle pojednostavljena sintaksa naredbe je: Pri definisanju relacije, potrebno je za svaki atribut (Column Definition) specificirati naziv (column name), tip podatka (Data Type), te opcionalno navesti NOT NULL kvalifikator. NOT NULL kvalifikatorom specificiraju se atributi čije vriednosti u n-torki ne smeju poprimiti NULL vrednost. Opciono je uz definiciju svakog atributa relacije moguće zadati tzv. default vrednost. To je vrednost koja se u trenutku upisa n-torke u relaciju pridružuje atributu ukoliko vrednost za atribut nije eksplicitno navedena. Oznaka literal u sintaksnom dijagramu Default Clause predstavlja konstantu (znakovnog, numeričkog ili datumskog tipa) koja po tipu mora odgovarati tipu atributa kojem se pridružuje. USER i TODAY su "varijable" koje sadrže tekući datum (vrednost trenutno postavljenu na nivou operacijskog sistema) i ime (login) korisnika.
  • 11. 10 Primer: CREATE TABLE stud ( mbrStud INTEGER NOT NULL , prezStud CHAR(25) NOT NULL , imeStud CHAR(25) , prosOcena DECIMAL(3,2) DEFAULT 0.0 NOT NULL , pbrRodStud INTEGER DEFAULT 10000 -- 10000 Beograd ) 3.5.3 Privremena relacija - CREATE TEMP TABLE Privremena relacija ima sve karakteristike trajne relacije kreirane naredbom CREATE TABLE, osim što se ne vidi u rečniku podataka, te biva uništena u trenutku kada završava program u kojem je kreirana (npr. kad se napusti SQL Editor). Privremena relacija se takođe može uništiti i upotrebom naredbe DROP TABLE. Privremena relacija se koristi prvenstveno za skladištenje međurezultata, u slučajevima kad je nepraktično ili nemoguće obaviti operaciju bez deljenja te operacije u nekoliko odvojenih koraka. Naredba kojom se kreira privremena relacija vrlo je slična "običnoj" CREATE TABLE naredbi (potrebno je samo dodati ključnu reč TEMP). Za privremenu relaciju postoje određena ograničenja u odnosu na običnu relaciju (npr. ne mogu se definisati strani ključevi). Primer: CREATE TEMP TABLE privMesto ( pbr INTEGER NOT NULL , nazMesto CHAR(20) NOT NULL , sifOpstina CHAR(2) DEFAULT 'BG' ) Privremena relacija se može kreirati i uz pomoć SELECT naredbe. 3.5.4 DROP TABLE Naredba DROP TABLE je komplement naredbe CREATE TABLE. Njom se bespovratno uništavaju podaci i struktura relacije ili privremene relacije tableName. DROP TABLE tableName
  • 12. 11 3.5.5 NULL vrednosti Informacija koja se skladišti u bazu podataka često je nekompletna. Vrednost atributa za neku n-torku može biti privremeno ili trajno nedostupna (čeka se na unos podataka, dobijanje potrebne informacije je preskupo, informacija ne postoji). Specifična oznaka za takve vrednosti je NULL (to nije i način fizičke prezentacije NULL vrednosti). Sistem mora biti u stanju razlikovati NULL vrednosti od ostalih vrednosti istog tipa podataka (od onih za koje je vrednost atributa poznata). NOT NULL uz definiciju atributa A u relaciji R predstavlja pravilo prema kojem nije dopušteno obaviti operaciju koja bi u bilo kojoj n-torki relacije R postavila za vrednost atributa A NULL vrednost (odnosno, zahteva se da je vrednost atributa A bezuslovno definisana za svaku n- torku). Korišćenje NULL vrednosti zahteva pažnju jer se u prisustvu NULL vrednosti uvode nova pravila pri evaluiranju relacijskih, logičkih, aritmetičkih i ostalih izraza. 3.6 Četiri osnovne SQL naredbe za upravljanje podacima U ovom su poglavlju navedeni najjednostavniji oblici osnovnih SQL naredbi. SELECT naredba Postavljanje SQL upita (query) nad bazom podataka (pregled podataka). Primer: SELECT nazMesto FROM mesto WHERE pbr = 10000 OR pbr = 51000 nazMesto je naziv atributa čija se vrednost želi videti u izlaznoj listi. mesto je naziv relacije čije se n-torke pregledaju. pbr = 10000 OR pbr = 51000 je predikat kojim se određuje koje su n-torke kvalifikovane za izlaznu listu - rezultat.
  • 13. 12 Slobodno se upotrebljavaju konstante, okrugle zagrade, funkcije i operatori. Konverzije tipova se obavljaju automatski u svim situacijama u kojima je to moguće. INSERT naredba Unos n-torke (zapis, red, row) u relaciju. INSERT INTO mesto VALUES (11550, 'Lazarevac') UPDATE naredba Ažuriranje n-torke (n-torki) u relaciji. UPDATE mesto SET nazMesto = 'LAZAREVAC' WHERE pbr = 11550 DELETE naredba Brisanje n-torke (n-torki) iz relacije. DELETE FROM mesto WHERE pbr = 11550
  • 14. 13 4. SINTAKSA I NAČIN UPOTREBE NAREDBE SELECT Prema prikazanom sintaksnom dijagramu svi delovi osim SELECT Clause i FROM Clause su opcioni. 4.1 Jednostavni upiti - SELECT - FROM ... Minimalni oblik SELECT naredbe sadrži SELECT Clause i FROM Clause. SELECT Clause sadrži opcioni kvalifikator FIRST max, opcioni kvalifikator ALL ili DISTINCT, te listu atributa ili izraza (Select list, tj. lista za selekciju) čije se vrednosti trebaju pojaviti u izlaznoj listi rezultata. U From Clause navodi se ime relacije (tablice) iz koje se uzimaju podaci.
  • 15. 14 U sledećem primeru prikazana je SELECT naredba kojom se uzimaju vrednosti atributa mbrStud, imeStud i prezStud za sve n-torke relacije stud SELECT mbrStud, imeStud, prezStud FROM stud U prethodnom primeru je u listi za selekciju, na mestu izraza (expression), upotrebljeno ime atributa iz relacije koja je navedena u FROM listi. Expression može biti vrlo jednostavan (npr. samo ime atributa), ali može biti i vrlo složeni izraz koji se sastoji od konstanti, naziva atributa, aritmetičkih operatora i različitih funkcija. Ispred imena atributa uvek se može navesti ime relacije, ali se ime relacije mora navoditi ispred imena atributa jedino u slučajevima kad ime atributa nije jednoznačno određeno unutar liste za selekciju. Nejednoznačnost se može pojaviti tek ukoliko se podaci uzimaju iz više relacija (join), te je u sedećem primeru navođenje imena relacije suvišno (ali ne i pogrešno, tj. neće uzrokovati grešku). SELECT stud.pbrStan FROM stud Select List može sadržavati oznaku "*" ili imeRelacije.* što znači da će se u izlaznoj listi pojaviti vrednosti svih atributa iz relacije. Na taj način se izbegava potreba taksativnog navođenja svih atributa relacije svaki put kad je potrebno ispisati vrednosti svih atributa. Tako je na primer SELECT * FROM stud ili SELECT stud.* FROM stud
  • 16. 15 ekvivalentno sa SELECT mbrStud , imeStud , prezStud , pbrRod , pbrStan , datRodStud , jmbgStud FROM stud Uz svaki atribut moguće je navesti tzv. alias ime, koje će se u izlaznoj relaciji pojaviti kao naziv kolone (atributa). Ukoliko se alias ime ne navede, naziv kolone određuje se prema nazivu atributa u rečniku podataka. Alias ime služi isključivo kao "naziv atributa" u rezultantnoj relaciji, te se ne može koristiti unutar upita osim u ORDER BY Clause. Valja napomenuti i na ovom mestu da je drugačija situacija s alias imenima relacija, koja se mogu slobodno koristiti unutar upita. SELECT mbrStud MATICNI_BROJ, prezStud PREZIME, i meStud IME FROM stud ili SELECT mbrStud AS MATICNI_BROJ, prezStud AS PREZIME, imeStud AS IME FROM stud Pomoću kvalifikatora FIRST max može se rezultat SELECT naredbe redukovati na prvih max n-torki koje bi sadržavao rezultat SELECT naredbe bez tog kvalifikatora. Ukoliko je broj n-torki koje bi se bez tog kvalifikatora pojavile u rezultatu jednak k, te je k < max, rezultat će sadržavati k n-torki. Npr, sledećim upitima prikazuje se prvih dvadeset n-torki iz relacije (u prvom primeru samo atributi navedeni u listi za selekciju, a u drugom primeru svi atributi relacije). SELECT FIRST 20 mbrStud, prezStud, imeStud FROM stud SELECT FIRST 20 * FROM stud Ukoliko se navede kvalifikator DISTINCT, u izlaznoj listi rezultata neće biti višestrukih pojava istih vrednosti n-torki. Npr, ukoliko izlazna lista treba sadržavati sve međusobno različite poštanske brojeve rođenja iz relacije stud, koristit će se sedeći upit: SELECT DISTINCT pbrRod FROM stud
  • 17. 16 Kvalifikator ALL ima suprotno značenje od DISTINCT. Može se ispustiti jer, ukoliko se ne navede kvalifikator DISTINCT, kvalifikator ALL primenjuje se po definiciji (by default). Sledeći primer pokazuje istovremenu upotrebu kvalifikatora FIRST i DISTINCT. Ispisuje se prvih deset različitih imena studenata iz relacije stud. SELECT FIRST 10 DISTINCT imeStud FROM stud Najjednostavniji oblik FROM Clause sadrži ključnu reč FROM i ime jedne relacije. 5. INSERT naredba Naredba je namenjena za upis jedne ili više n-torki u relaciju. Opšti oblik INSERT naredbe je definisan sledećim sintaksnim dijagramima: Lista s nazivima atributa (column name) navodi se u slučaju kada je redoslied vrednosti koje se upisuju u relaciju različit od redosleda atributa u relaciji ili se ne nameravaju navesti sve vrednosti za n-torku. Oblikom INSERT naredbe s VALUES Clause upisuje se jedna n-torka, dok se drugim oblikom (korišćenjem SELECT Statement) upisuju sve n-torke koje su dobijene kao rezultat navedene SELECT naredbe. SELECT naredba kojom se određuju n-torke za upis u relaciju ne sme u svom
  • 18. 17 FROM delu sadržavati ime relacije u koju se podaci upisuju. Takođe, SELECT naredba ne sme sadržavati INTO TEMP Clause niti ORDER BY Clause. CREATE TABLE mestoStanovanja ( pbr INTEGER , nazMesto CHAR(40) ); Primer: INSERT INTO mestoStanovanja VALUES (10000, 'Beograd') INSERT INTO mestoStanovanja (nazMesto, pbr) VALUES ('Beograd', 10000) INSERT INTO mestoStanovanja (pbr) VALUES (10000) U prethodnoj naredbi će za naziv mesta biti postavljen NULL. Ukoliko bi uz atribut nazMesto, prilikom definicije relacije, bila definisana default vrednost, za naziv mesta bi bila postavljena ta default vrednost, a ne NULL. INSERT INTO mestoStanovanja SELECT DISTINCT mesto.pbr, mesto.nazMesto FROM mesto, stud WHERE mesto.pbr = stud.pbrStan 6. DELETE naredba Naredbom se briše jedna ili više n-torki iz relacije. Opšti oblik naredbe je: Condition određuje koje n-torke će biti obrisane. Ukoliko se uslov ne navede, sve n-torke iz relacije će biti obrisane. Uslov može biti sastavljen kao i u WHERE delu SELECT naredbe, ali ne sme sadržati podupite koji bi u svom FROM delu sadržavali relaciju iz koje se zapisi brišu.
  • 19. 18 Primer: brisanje svih n-torki iz relacije opstina, čije se šifre ne koriste u relaciji mesto DELETE FROM opstina WHERE sifOpstina NOT IN ( SELECT sifOpstina FROM mesto ) 7. UPDATE naredba SQL naredba za izmenu jedne ili više vrednosti atributa u jednoj ili više n-torki relacije. Opšti oblik naredbe je: Pomoću sledećih primera ilustrovani su karakteristični načini pridruživanja vrednosti atributima relacije. Primer: ažurira se relacija s imenom table. Atributu atr1 pridružuje se vrednost izraza expr1, a atributu atr2 vrednost izraza expr2. Atributu atr3 pridružuje se vrednost dobijena pomoću SELECT naredbe. Ažuriraju se one n-torke relacije table koje zadovoljavaju navedeni condition. UPDATE table SET atr1 = expr1, atr2 = expr2, atr3 = (SELECT expr3 FROM ... WHERE ...) WHERE condition
  • 20. 19 Primer: ažurira se relacija s imenom table. Atributu atr4 pridružuje se vrednost izraza expr4, a atributu atr5 vrednost dobivena SELECT naredbom. Atributima atr6 i atr7 pridružuju se vrednosti koje su dobijene jednom SELECT naredbom. Ažuriraju se one n-torke relacije table koje zadovoljavaju navedeni condition. UPDATE table SET (atr4, atr5) = (expr4, (SELECT expr5 FROM ... WHERE ...)), (atr6, atr7) = ((SELECT expr6, expr7 FROM ... WHERE ...)) WHERE condition Primer: ažurira se relacija s imenom table. U ovom primeru se umesto taksativnog navođenja imena svih atributa relacije koristi zvezdica. Značenje naredbe je: vrednosti atributa relacije table postaviti na vrednosti koje su navedene na desnoj strani znaka =. Redosled pridruživanja vrednosti je jednak redosledu atributa prilikom definiranja relacije table. UPDATE table SET * = ( expr1, expr2, (SELECT expr3 FROM ... WHERE ...), expr4, (SELECT expr5 FROM ... WHERE ...), (SELECT expr6, expr7 FROM ... WHERE ...) ) WHERE condition SELECT naredba kojom se određuje nova vrednost sme vratiti samo jednu n-torku. U listi za selekciju treba biti onoliko atributa ili izraza koliko je potrebno da bi se odgovarajući broj novih vrednosti pridružio odgovarajućem broju atributa relacije koja se ažurira. Pomoću Condition određuje se koje će n-torke biti ažurirane. Ukoliko se uslov ne navede, biće ažurirane sve n-torke iz relacije. WHERE uslov može sadržati podupite, ali oni ne smeju u svom FROM delu sadržati relaciju čije se n-torke ažuriraju, što znači da se ne sme obavljati upit nad relacijom čiji se zapisi menjaju.
  • 21. 20 8. PRAKTIČNI DEO 8.1 Kreiranje baze podataka Kreiranje baze podataka se u SQL jeziku vrši pomoću naredbe CREATE DATABASE. Da bi se kreirala baza podataka u skladu sa strukturom naredbe potrebno je ukucati sledeće: CREATE DATABASE video; Ovom naredbom kreirana je nova prazna baza podataka pod imenom video. Sada je moguće koristiti ovu bazu podataka za dalji rad. 8.2 Kreiranje tebele u bazi podataka Kreiranje nove tabele u bazi podataka se u SQL jeziku vrši pomoću naredbe CREATE TABLE. Napravićemo nekoliko tabela u bazi podataka video koja je kreirana u prvom primeru. create table mesto ( ptt bigint not null primary key, naziv nvarchar(30) not null ); create table clan ( `broj clanske karte` int not null primary key, prezime nvarchar(30) not null, ime nvarchar(30) not null, `broj licne karte` bigint not null, `ulica i broj stanuje` nvarchar(30) not null, `ptt stanuje` bigint not null );
  • 22. 21 create table film ( `inventarni broj` bigint not null primary key, naziv nvarchar(30) not null, zanr nvarchar(30) not null, reziser nvarchar(50) null, `godina snimljen` int null ); create table iznajmljuje ( rbiznajmljivanja bigint auto_increment not null primary key, `inventarni broj` bigint not null, `broj clanske karte` int not null, `datum izdavanja` date not null, `datum vracanja` date null, `cena po danu` bigint not null check (`cena po danu`>0) ); 8.3 Unos podataka Unos podataka se u SQL jeziku vrši pomoću naredbe INSERT. Da bi ste u tabelu Mesto uneli novi zapis, u skladu sa strukturom naredbe INSERT, to se može uraditi na sledeći način: Insert into Mesto Values (23000, 'Zrenjanin'); Insert into Mesto Values (23270, 'Melenci'); Insert into Mesto Values (23300, 'Kikinda'); Insert into Mesto Values (11000, 'Beograd'); Insert into Mesto Values (26300, 'Vršac'); Na prethodno opisan način unećemo i sledeće podatke: Insert into Clan Values (1, 'Perić', 'Petar', 223432, 'Knez Lazara 78', 23000); Insert into Clan Values (2, 'Simić', 'Stojan', 788211, 'Banatska 18c', 23270);
  • 23. 22 Insert into Clan Values (3, 'Anović', 'Ankica', 342321, 'Bašaidska 3', 23300); Insert into Clan Values (4, 'Ðukić', 'Ðorđe', 555321, 'Banatska 124', 23000); Insert into Clan Values (5, 'Ðurić', 'Ðorđe', 654321, 'Žarka Zrenjanin 224', 26300); Insert into Clan Values (6, 'Nikolić', 'Nebojša', 332221, 'Brigadira Riste 124/34', 23000); Insert into Clan Values (7, 'Marić', 'Milena', 722921, 'Cara Dušana 22c', 23000); Insert into Film Values (1, 'Pisma sa Iwo Jime', 'ratni', 'Klint Istvud', 2006); Insert into Film Values (2, 'Zastave naših očeva', 'ratni', 'Klint Istvud', 2006); Insert into Film Values (3, 'Gladijator', 'istorijski', 'Ridli Skot', 2000); Insert into Film Values (4, 'Titanik', 'drama', 'Džejms Kamerun', 1998); Insert into Film Values (5, 'Beogradski fantom', 'drama', 'Jovan Todoroviæ', 2009); Insert into Film Values (6, 'Wicker park', 'triler', 'Paul McGuigan', 2004); Insert into Film Values (7, 'Troja', 'akcioni', 'Paul McGuigan', 2004); Insert into Film Values (8, 'Forest Gamp', 'komedija', 'Robert Zemeckis', 1994); Insert into Film Values (9, '10000 BC', 'avanturistički', 'Roland Emerih', 2008); Insert into Iznajmljuje Values ('1', 1, 1, '2011-01-20', '2011-01-21', 100); Insert into Iznajmljuje Values ('2', 2, 1, '2011-01-20', '2011-01-22', 100); Insert into Iznajmljuje Values ('3', 3, 2, '2011-01-20', '2011-01-21', 100); Insert into Iznajmljuje Values ('4', 1, 3, '2011-01-22', '2011-01-25', 100);
  • 24. 23 Insert into Iznajmljuje Values ('5', 6, 2, '2011-02-02', '2011-02-03', 150); Insert into Iznajmljuje Values ('6', 8, 5, '2011-02-09', '2011-02-10', 150); Insert into Iznajmljuje Values ('7', 7, 5, '2011-02-09', '2011-02-10', 150); 8.4 Pregled podataka Pregled podataka se u SQL jeziku vrši pomoću naredbe SELECT. Da bi smo izvršili pregled svih podataka iz tabele Mesto iskoristićemo najosnovniji oblik naredbe SELECT: SELECT * FROM Mesto; Ovom naredbom smo preuzeli sve podatke (sve zapise sa svim kolonama) iz tabele Mesto. Rezultate možemo sortirati vertikalno i horizontalno. Da bih to bolje objasnio izvršićemo pregled tabele FILM.
  • 25. 24 SELECT * FROM Film; Vertikalno sortiranje se izvodi preko navođenja kolona u redosledu u kom želimo da se prikazuju parametri zapisa: SELECT `godina snimljen`, zanr, naziv, `inventarni broj`, reziser FROM Film; U rezultat ove naredbe: ulaze svi zapisi vertikalno poređani po redosledu u kom su unošeni u tabelu ali je redosled njihovih parametara promenjen. Horizontalno sortiranje se vrši zadavanjem jedne ili više kolona na osnovu čijeg sadržaja će sortiranje biti obavljeno u zadatom smeru: SELECT * FROM Film ORDER BY `godina snimljen` ASC;
  • 26. 25 U rezultat ove naredbe: ulaze svi zapisi sortirani po parametru godina snimljen u rastućem redosledu. Ukoliko želimo da zapise poređamo u opadajućem redosledu parametar ASC ćemo zameniti sa DESC. 8.4.1 Klauzula WHERE Ova klauzula se koristi za zadavanje odredjenog uslova koji zapis mora da ispuni da bi ušao u rezultat: SELECT * FROM film WHERE `godina snimljen`=2006 Ovakvim korišćenjem WHERE klauzule smo rezultat ograničili samo na zapise kod kojih je parametar godina snimljen (vrednost u koloni godina snimljen) jednak 2006:
  • 27. 26 SELECT * FROM film WHERE `godina snimljen`<2006 . SELECT * FROM film WHERE `godina snimljen`>2000 and zanr='ratni' 8.4.2 Klauzule GROUP BY / HAVING Klauzula GROUP BY se koristi za grupisanje podataka koji se dobijaju kao rezultat upita, a klauzula HAVING se koristi za selekciju određenih grupa koje su već kreirane GROUP BY klauzulom. SELECT zanr, COUNT(*) FROM film GROUP BY zanr; Korišćenjem naredbe u ovakvom obliku kao rezultat dobićemo spisak žanrova i broj filmova po nekom žanru.
  • 28. 27 SELECT ptt, COUNT(*) FROM mesto GROUP BY ptt; Ukoliko želimo da iz rezultata prikažemo samo podatke koji ispunjavaju određeni kriterijum, to će mo uraditi uz pomoć klauzule HAVING, na sledeći način: SELECT zanr, COUNT(*) FROM film GROUP BY zanr HAVING COUNT(*)=2; Na ovaj način kao rezultat dobićemo spisak žanrova iz kojih dolazi po dva filma.
  • 29. 28 Primeri: 1. Formirati spisak svih iznajmljenih filmova. SELECT film.*, iznajmljuje.* FROM iznajmljuje, film WHERE iznajmljuje.`inventarni broj` = film.`inventarni broj` 2. Koliko filmova je u ponudi video kluba? Select COUNT(naziv) As Filmova From film; 3. Prikazati podatke o svim filmovima koje je režirao Klint Istvud. SELECT * FROM film WHERE reziser='Klint Istvud';
  • 30. 29 9. ZAKLJUČAK SQL je upitni programski jezik posebne namene koji služi za upravljanje podacima relacijskog sistema za upravljanje bazama podataka, a njegov opseg obuhvata izradu, traženje, ažuriranje i brisanje podataka iz relacijskih baza podataka. Iako je SQL fleksibilan jezik kojeg je moguće koristiti na više načina, uglavnom se koristi kao alat u komunikaciji sa relacijskim bazama podataka. Iako je SQL standardizovan, postoji mnogo varijacija na temelju SQL-a. Često se kod komercijalnih implementacija izostavi podrška za neke osnovne funkcije standarda. A proizvođači komercijalnih sistema takođe često uključuju i neke svoje nestandardne naredbe, stoga nije moguće preneti većinu SQL kodova iz jedne baze u neku drugu bazu bez većih prilagođavanja. Stoga se koriste standardi za pristup bazama podataka kao što su Open Database Connectivity (ODBC) ili Java Database Connectivity (JDBC). U ovom seminarskom radu sam prikazao osnove SQL-a. Pokazao sam na koji način se stvara tablica te kako se obavljaju osnovne operacije nad elementima tablice. Naravno, ovo je bio samo uvod u SQL. Postoji još mnoštvo drugih naredbi i mogućnosti osim ovih ovde spomenutih.
  • 31. 30 10. LITERATURA 1. Sqlcourse, multimedija, url; http://www.sqlcourse.com/intro.html 2. Wikipedia, multimedija, url; https://en.wikipedia.org/wiki/SQL 3. SearchSqlServer, multimedija, url; http://searchsqlserver.techtarget.com/definition/SQL 4. NOAA EDM, multimedija, url; https://geo-ide.noaa.gov/wiki/index.php?title=Database_Access_Standards 5. Praktikum Baze podataka SQL, M.Veinović, I. Franc, A. Jevremović, Univerzitet Singidunum, jun 2016.