You are on page 1of 77

Dr Medenica Miroslav

Ime ove komande vie manje sve govori


koristi se za kreiranje tabele.
Kao sto znamo, tabela se sastoji od kolona i
redova. Broj redova zavisi od koliine
podataka, a broj kolona definiu atributi
tabele i on se uglavnom ne mjenja. On se
ipak moe menjati, ali samo odreenim
komandama, dok se broj redova poveava pri
svakom novom unosu podataka u tabelu.

Sva polja u tabeli nisu ista, tj. nisu isto


formatirana. Neka polja su definisana samo
za slova, druga samo za cele brojeve, trea
samo za decimalne brojeve, etvrta za
datume, peta za specijalne dodatke itd. Vrste
polja su definisana prema kolonama,
odnosno atributima i odredjuju se na osnovu
tzv Data Types o kojima je bilo ranije ve rei.

Nas ovde interesuje samo sivi deo ove tabele,


tj. kojom sintaksom emo doi do stvaranja
sledee tabele Auto.

Proizvodjac Model
VW
Mercedes
Ford

Golf GTI
2000
190 C
Sierra 2.0

Boja
Plava
Siva
Crvane

Godiste Vlasnik
1986

Ime1
Prezime1

1991

Ime1
Prezime1

1986

Ime2
Prezime2

CREATE TABLE Auto (


Proizvodjac nvarchar(15) not null,
Model nvarchar(15) not nul ,
Boja nvarchar(10) null,
Godiste int not null,
Vlasnik nvarchar(20) no tnull);
Nvarchar nam govori kakva ce biti kolona. U svim
poljima osim Godiste moe doi do istovremenog
korienja i slova i broja i zato koristimo
nvarchar. Brojna oznaka u zagradi definise
maksimalni broj znakova u poljima kolona.
Oznaka not null govori da je odreeni podatak
obavezan, a null da nije.

Nakon CREATE komande INSERT komanda je


siguno jedna od najvise korienih. Sta radi ova
komanda? Pa kao sto samo ime kaze, insertuje
(tj. ubacuje podatke) u bazu odnosno tabelu.
Za unoenje podataka u prethodno kreiranu
tabelu Auto koristi se sledee oznaavanje:
INSERT INTO Auto VALUES (VW, Golf GTI
2000, Plava, 1986, Ime1 Prezime1);
INSERT INTO Auto VALUES (Mercedes, 190 C,
Siva, 1991, Ime1 Prezime1);
INSERT INTO Auto VALUES (Ford, Sierra 2.0,
Crvena, 1986, Ime2 Prezime2);

Prevod: Ubaci u tabelu Auto navedene vrednosti.


Ove vrednosti e biti unesene onim redom kojim
su navedene, to znai da e u prvi red VW biti
unesen u prvu kolonu Proizvodjac, Golf GTI e biti
uneen u drugu kolonu itd
Model itd.
Nakon to smo ove podatke ubacili u nau tabelu
Auto, moemo pomou komande SELECT pokazati
kako izgledaju nai podaci:

SELECT *
FROM Auto;
Rezultat izgleda kao tabela Auto sa slike.

Drugi nain unoenja novog reda podataka (4


red) u tabelu pomou komande INSERT INTO
bi izgledao ovako:
INSERT INTO Auto (Proizvodjac, Model, Boja,
Godiste, Vlasnik)
VALUES (BMW, 750, Crna, 1998, Ime3
Prezime3)
;
Pregled podataka ide sa istom komandom:
SELECT *
FROM Auto;
Rezultat je:

Proizvodjac

Model

VW

Golf GTI
2000

Mercedes
Ford
BMW

190 C

Boja
Plava

Siva

Sierra 2.0 Crvena


750

Crna

Godiste

Vlasnik

1986

Ime1
Prezime1

1991

Ime1
Prezime1

1986

Ime2
Prezime2

1998

Ime3
Prezime3

to znai da moete navesti nazive kolona u


koje vae vrednosti treba da budu uneseni.

Ako npr. ne elite uneti vrednost za Model


automobila, onda samo izostavite polje Model
odnosno vrednost (VALUE) 750, i to polje e
ostati prazno.
INSERT INTO Auto1 (Proizvodjac, Boja,
Godiste, Vlasnik)
VALUES (BMW, Crna, 1998, Ime3
Prezime3)
;
I rezultat koji pomou SELECT komande
pozovemo, izgleda ovako:

Proizvodjac

Model

VW

Golf GTI
Plava
2000

Mercedes

190 C

Ford

Sierra
2.0

BMW

Boja

Godiste

Vlasnik

1986

Ime1
Prezime1

1991

Ime1
Prezime1

Crvena 1986

Ime2
Prezime2

Crna

Ime3
Prezime3

Siva

1998

Kao sto vidite, polje Model kod BMW-a je


prazno.

Ako ne navodite imena kolona, vrednosti e


automatski biti redom unesene, ali ako unesete
imena kolona obavezni ste isti broj podataka da
upiete koliko ste kolona navali. Primjer
pogresnog koristenja INSERT INTO komande
izgleda ovako:
INSERT INTO Auto (Proizvodjac, Boja, Godiste,
Vlasnik)
VALUES (BMW, Crna, 1998);
Ovdje fali vrijednost za kolonu Vlasnik, i
automatski nee ni prve tri vrednosti biti unesene
u bazu, i vi e te na vaem monitoru videti error
poruku. Isto tako nije mogue navesti vie
vrednosti za unos od navedenih kolona.

Update komanda menja postojee podatke u


jednoj tabeli. Ona menja vrednosti iz kolona,
i funkcionie na istom principu kao i
komanda INSERT, i sastoji se isto kao i
INSERT komanda (INSERT INTO i VALUES) iz
dva dela: UPDATE i SET.
U ovom primeru elimo da kod proizvoaa
WV promenimo boju i godite automobila sa
sledeim podacima:
Boja = bela
Godiste = 1995
I to izvodimo ovako:

Jedna od glavnih SQL komandi je SELECT


(engl. odabrati, seletkovati). Kao to i sam
prevod govori, ona odabira tj selektuje
podatke iz baze.
Za primer upotrebe SELECT komande
koristicemo sledeu bazu
PolovnihAutomobila sa tabelom Auto

UPDATE Auto
SET Boja = bela, Godiste = 1995
WHERE Proizvodjac = VW ;
Tabela sada izgleda ovako:

Proizvodjac

Model

VW

Golf GTI
2000

Mercedes

190 C

Ford

Sierra
2.0

Boja
Bela
Siva
Crvena

Godiste

Vlasnik

1995

Ime1
Prezime1

1991

Ime1
Prezime1

1986

Ime2
Prezime2

Ova komanda se odnosi kako joj i ime kae


na brisnje podataka. Isto tako je jednostavna
kao i UPDATE komanda i funkcionise na
veoma slian nain.
U sledeem primeru elimo da obriemo
podatke o Fordu, i to na sledei nain:
DELETE FROM Auto
WHERE Proizvodjac = Ford
;

Rezultat:

Proizvodjac

Model

Boja

Godiste

Vlasnik

VW

Golf GTI
2000

Bijela

1995

Ime1
Prezime1

1991

Ime1
Prezime1

Mercedes

190 C

Siva

Ali ako imate u vaoj tabeli dosta podataka u vezi


sa Fordom, onda ete morati da DELETE komadnu
koristite na sledei nain, da sluajno ne bi dolo
do brisanja pogrenih podataka.
DELETE FROM Auto
WHERE Proizvodjac = Ford
AND Model = Sierra 2.0
AND Boja = Crvena
AND Godiste = 1986
AND Vlasnik = Ime2 Prezime2;

Naredba se koristi za menjanje tabela u


svakom pogledu. S ovom komandom
dodajete kolone, briete ih, menjate njihove
Data Types, menjate default vrednosti itd.
Ovako izgleda praktino primena ove
komande na tabeli Auto.
Odnosi se na dodavanje kolone Registracija.
ALTER TABLE Auto
ADD Registracija nvarchar(15)
;

Proizvodjac

VW

Model

Boja

Godiste

Vlasnik

Golf GTI
2000

Plava

1986

Ime1
Prezime1

Mercedes

190 C

Siva

1991

Ime1
Prezime1

Ford

Sierra
2.0

Crvane

1986

Ime2
Prezime2

Registr
acija

Na veoma slian nain briemo kolone iz tabele:


ALTER TABLE Auto
DROP Registracija ;
Nae kolone Registracija vise nema, i tabela Auto
izgleda kao ranije.
DROP komanda slui ne samo brisanje kolona,
ve i za brisnje itavih tabela kao na primer:
DROP TABLE Auto;
Meutim ako elimo da promenimo Data Type
kolone, onda ne moemo primeniti ADD ili DROP
komandu, nego jedan novi izraz koji kao i svi
dolazi iz engleskog jezika: CHANGE.

ALTER TABLE Auto


CHANGE Godiste Godina_Proizvodnje nvarchar(20)
DEFAULT 0 NOT NULL;
Ovo znai da smo:
promenili ime kolone iz Godiste u
Godina_Proizvodnje,
da smo joj promenili Data Type iz int u nvarchar i da
je broj znakova ogranice na 20,
da je default vrednost 0 (nula),
i da se nula ne rauna kao prazno polje (NOT NULL).
Za ovo menjanje moemo koristiti bilo koji Daty
Type, ali treba voditi rauna da ako sa CHANGE
promenimo Tip kolone iz npr. text u decimal, svi
podaci koji su se sastojali od slova, bi e izbrisani,
jer decimal kolone ne rade sa slovima.

Proizvodjac Model
VW

Golf GTI

Mercedes

190 C

Ford

Sierra
2.0

Boja
Plava

Siva
Crvena

Godiste

Vlasnik

1986

Ime1
Prezime1

1991

Ime1
Prezime1

1986

Ime2
Prezime2

Kao to se vidi tabela Auto se sastoji od 5


kolona i 3 reda. Neki podaci kao godite ili
vlasnik su u nekim redovima potpuno isti. Ova
nam tabela govori da osoba1 (Ime1 Prezime1)
poseduje 2 automobila (VW i Mercedes) (Vlasnik)
i da Ford Sierra i VW Golf imaju istu godinu
proizvodnje (Godite).
Kada elimo da nam SQL komanda pokae sve
podatke iz ove tabele, i koristimo sledeu
komandu:
SELECT *
FROM Auto
;
U prevodu: Odaberi sve podatke iz tabele Auto.

Analiza:
* (zvezda) se odnosi na podatke i u ovom
sluaju su to svi podaci ove tabele
FROM Auto odreuje iz koje tabele se
odabiraju podaci
; (tacka zarez) oznaava kraj komande - svi
SQL queries, tj sve SQL komande se
zavravaju sa ; (tacka zarez)
Rezultat: rezultat su svi podaci ove tabele,
odnosno itava tabela.

Ali ako elimo da


odaberemo samo imena
proizvoaa automobila iz
tabele, onda naa
komanda izgleda ovako:
SELECT Proizvodjac
FROM Auto
;

U prevodu: Odaberi
proizvoaa automobila iz
tabele Auto.
Rezultat izgleda ovako:

Proizvodjac
VW
Mercedes

Ford

Isto tako moemo


selektovati vie razliitih
podataka prema nazivima
kolona:
SELECT Proizvodjac, Boja
FROM Auto
;

U prevodu: Odaberi
proizvoaa i boju
automobila iz tabele Auto.

Rezultat izgleda ovako:

Proizvodjac
VW
Mercedes
Ford

Boja
Plava
Siva
Crvena

Kao jedan nastavak ili bolje reeno dodatak uz


lekciju o SELECT komandi, dolazi lekcija, u kojoj
emo predstaviti dva mala dodatna tj. pomona
izraza za komandu SELECT.
Prvi dodatak uz SELECT komandu je izraz
DISTINCT. On se koristi ako elite da selektujete
podatke iz tabele, bez ponavljanja istih
podataka.

SELECT DISTINCT
Godiste
FROM Auto
;
I rezultat je:

Godiste
1986

Isto to se moete izvesti sa


atributom Vlasnik:
SELECT DISTINCT Vlasnik
FROM Auto
;
I rezultat je:

Vlasnik
Ime1 Prezime1

Ako bi se u tabeli nalazilo 20


automobila iji je vlasnik
osoba1, pa 30 automobila iji je
vlasnik osoba2, pa 50
automobila iji je vlasnik osoba3
i 80 automobila iji je vlasnik
osoba4, ova prethodno napisana
komanda bi dala sledei rezultat
bez obzira koliko automobila
vlasnici poseduju. Ova komanda
je tu da nam ne prikazuje tzv.
redundantne podatke, tj podatke
koji se ponavljaju i rad baze
usporavaju.

Vlasnik
Ime1
Prezime1
Ime2
Prezime2
Ime3
Prezime3
Ime4
Prezime4

Drugi dodatak zu komandu SELECT je izraz


COUNT.

COUNT komanda prebrojava podatke jedne


kolone odnosno tabele:
A u praksi izgleda ovako:

SELECT COUNT(Vlasnik)
FROM Auto
;

Nas rezultat je 3.

Meutim ako ima manje ispunjenih polja (redova)


u jednoj od kolona, kao da nam jedan npr.
Vlasnik nije poznat, onda e rezultat biti 2.
Ali ako mi zelimo da nam izbaci koliko redova
ima tabela, onda emo koristiti sledee:
SELECT COUNT(*)
FROM Auto;

I rezultat e biti opet 3.

esto se deava da imamo tzv. redundantne


podatke u tabelama, tj. podatke koji se
ponavljaju. U naem sluaju je to Vlasnik Osoba1
koja poseduje oigledno 2 automobila.
Ako bi imali ogromnu tabelu koja ima na stotine
redova i mnoge osobe imaju po vise automobila,
onda bi teko brojanjem prebrojali sve vlasnike.
Mogu se DISTINCT i COUNT izrazi kombinovati i
jedan primer upotrebe ova dva izraza zajedno
izgleda ovako:
SELECT DISTINCT COUNT(Vlasnik)
FROM Auto
;
Na rezultat e biti 2, jer u naoj maloj tabeli
imamo samo dva razliita vlasnika.

Moemo isto tako toj DISTINCT COUNT(Vlasnik)


rezultatu dati novo ime, da je ne bi meali sa
starim atributima i to uglavnom ako elimo
rezultat da prikaemo u kombinaciji sa drugim
atributima. Za to koristimo tzv. alias AS. To onda
to izgleda ovako:

SELECT Vlasnik DISTINCT COUNT(Godiste) AS


Novo_Godiste
FROM Auto;
Vlasnik
Novo_Godste
Ime1
2
Rezultat je:
Prezime1
Ime2
1
Prezime2

WHERE komanda predstavlja jednu istu nadogradnju


SELECT komande i njeno korienje je praktino
neizbeno. Ona se koristi na sledei nain:
Primer:

SELECT Proizvodjac, Model


FROM Auto
WHERE Vlasnik = Ime1 Prezime1
;
Izdvoji iz tabele Auto proizvoaa i model
automobila, ali samo one automobile iji je vlasnik
osoba1 (u naem sluaju Ime1 Prezime1).
Rezultat izgleda ovako:

Proizvodjac
VW
Mercedes

Model
Golf GTI
2000
190 C

Rezultat su znai samo VW Golf GTI 2000 i Mercedes


190 C
Analiza:
WHERE komanda predstavlja jedan uslov, koji suava
na izbor
Ne treba nikada koristiti duple navodne znakove (tj.
standardne = ), nego uvek jednostavne tj. na
standardni apostrof ( ).
Ako koristite brojeve, onda ne morate koristite
apostrofe

Naravno WHERE komanda se moe i drugaije


primeniti, i sada emo navesti nekoliko
primera:
WHERE Godiste = 1986 (kada su brojevi u
pitanju bez navodnih znakova)
WHERE Godiste > 1986 (sve automobile koji
su napravljeni posle 1986. godine)
ostale komande:
< (manje od, u naem sluaju: starije od)
<> (nejednako)
<= (manje jednako)
>= (vie jednako)

Upotreba BETWEEN komande:

WHERE Godiste BETWEEN 1986 AND 1988


Ovo bi se moglo i na drugaiji nain, malo
komplikovanije izvesti:
WHERE Godiste >= 1986 AND Godiste <= 1988
Ili
WHERE Godiste > 1985 AND Godiste < 1989
Vidimo da se ovde koristi jo jedan pomoni izraz
AND. On i drugi pomoni izraz OR su veoma korisni
jer veu vie uslova, i evo jo jednog primera:
WHERE Godiste = 1985 OR Godiste = 1989

Druga vazna komanda koja ide zajedno sa WHERE


komandom je LIKE (na engleskom izgledati):
Primer je izdvojiti iz tabele Auto proizvoae koji
poinju sa slovom F.
SELECT Proizvodjac
FROM Auto
WHERE Proizvodjac LIKE F%;
Znak procenta ( % ), ima znaenje zamene sloga .
Rezultat:

Proizvodjac
Ford

Ako bi npr. zelili da Vam komanda pokae


sve proizvoae u ijem se imenu nalazi
slovo r, onda bi komanda izgledala ovako:
WHERE Proizvodjac LIKE %r%
Rezultat:

Proizvodjac
Mercedes
Ford

I za kraj jedan kompletniji i malo vei primer:

SELECT Proizvodjac, Boja, Vlasnik


FROM Auto
WHERE Vlasnik = Ime1 Prezime1
AND Godiste > 1986
AND Boja <> crvena
;
Rezultat:

Proizvodjac
Mercedes

Model
190 C

Boja
Siva

Godiste

Vlasnik

1991

Ime1
Prezime1

ORDER BY sortira prikaz podataka jedne tabele


uz izdvajanje odreenih kolona preko komande
SELECT. Sortiranje se vrsi po kolonama to u
naem primeru tabele moemo sortirati rezultate
po Proizvodjacu, Modelu, Boji, Godistu i/ili
Vlasniku.
Ovo je komanda :
SELECT *
FROM Auto
ORDER BY Boja ;

Svi podaci iz tabele treba da bude sortiran po


boji.
Rezultat izgleda ovako:

Proizvodjac Model

Boja

Godiste

Ford

Sierra 2.0

Crvane

1986

VW

Golf GTI
2000

Plava

1986

Mercedes

190 C

Siva

1991

Vlasnik
Ime2
Prezime2
Ime1
Prezime1
Ime1
Prezime1

Kao to se vidi, redosled se promenio u odnosu na


orginalnu tabelu.
Objanjenje sortiranja:
sortiranje je izvreno alfabetskim redom od A do Z
(ako su u pitanju samo slova),
ako su u pitanju samo brojevi sortiranje se vri od
najnieg prema najviem,

ako su podaci meani (brojevi i slova) sortiranje


ide sledeim redom: 0, 1, 2, 3, 4 , 9, A, B, C,. ..,
X, W, Z). Ako ima bilo kakvih drugih znakova kao
npr. #?$%& itd, oni se svi nalaze pre
brojeva,
ako su dva polja apsolutno ista (npr.: Vlasnik
dva puta osoba1 (Ime1 Prezime1)), onda na prvo
mesto dolazi polje koje je pre uneeno u tabelu,
odnosno ono polje koje se nalazi na viem mestu
u tabeli (u naem sluaju se VW nalazi na prvom
mestu, a Mercedes na drugom)
Na osnovu ovog objasnjenja emo sada sortirati
nau tabelu (orginalnu) po Modelu (izmeani
brojni i slovni znakovi):

SELECT *
FROM Auto
ORDER BY Model;
Rezultat:

Proizvodjac

Model

Boja
Siva

Godiste

Vlasnik

1991

Ime1
Prezime1

Mercedes

190 C

VW

Golf GTI
2000

Plava

1986

Ime1
Prezime1

Ford

Sierra 2.0

Crvane

1986

Ime2
Prezime2

Kao to se vidi, na prvom mestu u tabeli se nalazi


Mercedes (Model: 190 C) jer poinje sa brojem. Na
drugom mestu se nalazi VW (Golf GTI 2000), a na
treem mestu je Ford (Sierra 2.0), jer se slovo G
nalazi u alfabetu pre slova S.
Ako elimo da tabelu obrnuto sortiramo, onda
koristimo dva pomona izraza: ASC (ascend =
rastui) i DESC (descend = padajui).
Praktino to izgleda ovako:
SELECT *
FROM Auto
ORDER BY Model DESC
;
Rezultat:

Proizvodjac

Model

Boja

Godiste

Vlasnik

Ford

Sierra 2.0

Crvane

1986

Ime2
Prezime2

VW

Golf GTI
2000

Plava

1986

Ime1
Prezime1

Mercedes

190 C

Siva

1991

Ime1
Prezime1

Kao to se vidi sada rezultat izgleda totano obrnuto:


Mercedes (190 C) je na zadnjem mestu, a Ford
(Sierra 2.0) na prvom mestu, jer je tabela obrnuto
sortirana.
To znai da DESC izraz sortira obrnuto, dok ASC
izraz sortira normalnim alfabetskim redom. ASC
oigledno nije obavezan da se pie, ali radi bolje
preglednosti se skoro uvek koristi.

GROUP BY, funkcionise na slian nain kao


ORDER BY komanda, ali za razliku od nje,
deluje na itave grupe podataka. Ona se
najvie koristi kada se koriste tzv. SQL
agregatne funkcije. Druga vana stvar u vezi
ovih komandi je da ne smete ovu komandu
koristiti sa nazivima kolona koje niste sa
SELECT pozvali.
Ovo je naa tabela (redosled redova je
izmenjen):

A ovo je komanda :

SELECT Vlasnik DISTINCT COUNT(Godiste) AS


Novo_Godiste
FROM Auto
GROUP BY Vlasnik;
Rezultat je:

Ukupno

Novo_Godiste

Ime2 Prezime2

Ime1 Prezime1

HAVING funkcionise slino WHERE komandi,


jer odreuje koji e podaci
biti odabrani. HAVING se obino koristi u
kombinciji sa GROUP BY komandom. Ako se
HAVING komanda koristi
sama, onda u naoj komandi mora biti i jedna
tzv. agregatna funkcija (COUNT, SUM, AVG
). Koristit cemo vec poznatu tablicu (vidi
prvu tablicu na ovoj starnici).
Ovo je nastavak prethodne komande:

SELECT Vlasnik DISTINCT COUNT(Godiste) AS


Novo_Godiste
FROM Auto1
GROUP BY Vlasnik
HAVING Novo_Godiste < 2;
Rezultat je:
Ukupno

Novo_Godiste

Ime2 Prezime2 1

Kao to se vidi osobe1 nema u naem rezultatu,


jer ona ima vie od jednog automobila.

Ovde emo , predstaviti nekoliko SQL funkcija


bez kojih se SQL ne moe zamisliti. Prva na
nasoj listi je komanda AVG.
AVG
AVG komanda je skraenica od engleske rei
average = prosek i izraunava srednju
vrednost jedne kolone koja se sastoji samo
od brojeva.
Za na primer koristimo malo drugaiju
tabelu nego inae umesto kolone godiste
imamo kolonu KM
(=koliko je kilometara preao automobil):

Proizvodjac

Model

Boja

KM

Vlasnik

VW

Golf GTI
2000

Plava

159456

Ime1
Prezime1

Mercedes

190 C

Siva

12454

Ime1
Prezime1

Ford

Sierra 2.0

Crvane

189818

Ime2
Prezime2

Naa komanda:
SELECT Vlasnik, AVG(KM) AS Prosek
FROM Auto;
elimo da vidimo koliko su km proseno
prela vozila gore navedenih vlasnika.
Rezultat je:

Vlasnik

Prosek

Ime1 Prezime1

85955

Ime2 Prezime2

189818

Kao to vidimo ukupni prosek svih


automobila osobe1 je 85955 >
(159456+12454)/2. Prosek kod osobe2 je
189818, jer osoba2 samo jedan automobil
ima.

SUM funkcija sabira sve vrednosti jedne


kolone:
SELECT Vlasnik, SUM(KM) AS Ukupno
FROM Auto
WHERE Vlasnik = Ime1 Prezime1;
elimo da saberemo sve kilometre koje su
automobili osobe1 preli.
Rezultat je:
Vlasnik

Ukupno

Ime1
Prezime1

171910

Sledee fukncije u ovom nizu su MIN i MAX.


MIN komanda selektuje najmanju vrednost jedne
kolone, a MAX najveu.

SELECT MAX(KM)
FROM Auto;
Rezultat je 189818 jer je Ford preao najvie km.
SELECT MIN(KM)
FROM Auto
;
Rezultat je 12454 jer je Mercedes preao
najmanje km.

Ove funkcije mogu se kombinovati sa drugim


komandama kao npr:
SELECT MAX(KM)
FROM Auto
WHERE Vlasnik = Ime1 Prezime1
;
Pa e rezultat biti 159456, jer je automobil
osobe1, VW preao vie km od Mercedesa
istog vlasnika.

JOIN komanda se odnosi


na spajanje tabela.
Koristie se tabele Auto1 i
Auto 2 radi daljeg
objanjenja povezivanja
tabela.
Proizvodjac
U tabeli Auto1 je Marka VW
primarni kod (primary
GM
key), to znai da ne
mogu postojati dva reda Zastava
sa istom vrednou.
Prikazana je tabela Auto2,
a na sledeem slajdu
Auto1.

Marka
22645
17956
4874

Proizvodjac Model
VW
Mercedes
Ford

Golf GTI
2000
190 C

Boja
Plava
Siva

Sierra 2.0 Crvana

Marka

Vlasnik

22645

Ime1
Prezime1

15488

Ime1
Prezime1

36790

Ime2
Prezime2

Za poetak emo pokazati kako izgleda jedan


primitvni, ali veoma efektivan i brz nacin
spajanja tabela, odnosno spajanja podataka
dveju tabela:
SELECT Auto1.Vlasnik
FROM Auto1, Auto2
WHERE Auto1.Proizvodjac =
Auto2.Proizvodjac;
Rezultat:

Vlasnik
Ime1 Prezime1

U ovom sluaju smo koristili krai put, tako


smo odmah uporeivali podatke iz dve
tabele, bez selektovanja podataka.
Ovaj principje: ImeTabele.ImeKolone
Drugii nain da spojimo tabele je pomou
komande JOIN. To je najbolji i najefikasniji
nain.
Postoje tri varijante ove komande:
INNER JOIN,
LEFT JOIN,
RIGHT JOIN.

INNER JOIN pokazuje samo podatke ako ih tamo i


stvarno ima. Ako ih nema, ti redovi nee biti
pokazani.
Koristimo prethodne tabele Auto1 i Auto2.
Naredba izgleda ovako:
SELECT Auto1.Vlasnik, Auto2.Marka
FROM Auto1
INNER JOIN Auto2
ON Auto1.Proizvodjac = Auto2.Proizvodjac;
Rezultat:
Vlasnik

Marka

Ime1 Prezime1

22645

LEFT JOIN pokazuje sve podatke iz prve


tabele, bez obzira da li se slau sa
rezultatima iz druge tabele i svi e redovi biti
prikazani.
SELECT Auto1.Vlasnik, Auto2.Marka
FROM Auto1
LEFT JOIN Auto2
ON Auto1.Proizvodjac = Auto2.Proizvodjac;
Rezultat:
Vlasnik

Marka

Ime1 Prezime1

22645

Ime1 Prezime1

NULL

Ime2 Prezime2

NULL

RIGHT JOIN pokazuje sve podatke iz druge tabele,


bez obzira da li se slau sa podacima iz prve
tabele i svi e redovi biti prikazani. Ako ima nekih
podataka iz druge tabele da se ne slau sa
podacima iz prve, i ti redovi e biti prikazani.
SELECT Auto1.Vlasnik, Auto2.Marka
FROM Auto1
RIGHT JOIN Auto2
ON Auto1.Proizvodjac = Auto2.Proizvodjac;
Vlasnik

Marka

Ime1 Prezime1

22645

NULL

17956

NULL

4874

Prvi predikat, LIKE je ve objanjen prethodno.


Ova komanda se moe proiriti sa jednim
dodatnim predikatom NOT:
SELECT Proizvodjac
FROM Auto
WHERE Proizvodjac NOT LIKE F%;
Rezultat:
Proizvodjac
Mercedes

VW
Kao to se vidi Ford se ne nalazi meu
proizvoaima jer njegovo ime pocinje sa F.

Ovaj predikat odreuje da li se jedna vrednost


odnosno string slae sa vie vrednosti iz date
liste tj. kolone. Korienje ovog predikata emo
objasniti na malo komplikovanijem primeru.
SELECT Proizvodjac
FROM Auto1
WHERE Proizvodjac IN (SELECT Proizvodjac FROM
Auto2)
;
Isto tako moemo ubaciti pomoni izraz NOT za
negiranje.

ALL = Rezultat je taan ako se sve vrednosti slau


ANY = Minimalno jedna vrednost se mora slagati
SELECT *
FROM Auto
WHERE Proizvodjac = ALL (SELECT Proizvodjac FROM
Auto)
;
Odnosno
SELECT *
FROM Auto1
WHERE Proizvodjac = ANY (SELECT Proizvodjac
FROM Auto2)
;

Sa predikatom EXISTS (i sa opcionim dodatim


predikatom NOT) proveravamo da li jedna selekcija
uopste sadrzi podatke:
SELECT *
FROM Auto1
WHERE EXISTS (SELECT Proizvodjac FROM Auto2)
;
Sa ovim predikatom i sa dodatnim predikatom IF
moemo proveriti da li npr. neka tabela uopte
postoji pre nego to je ponemo kreirati:
DROP TABLE IF EXISTS Auto23
;

Ovde su date tri algebarske funkcije


vezane za rad sa skupovima koje su
poznate iz osnovne skole:

UNION ( unija skupova)


INTERSECT (presek skupova)
MINUS (razlika skupova)

UNION funkcija spaja podatke iz dve selekcije


i daje razultat u kome su sadrani podaci
obe selekcije. Za to postoje dve pretpostavke:
broj kolona u obe selekcije mora biti isti
kolone moraju biti istog tipa podataka (Data
Type)
Primer:
SELECT Proizvodjac
FROM Auto1
UNION SELECT Proizvodjac FROM Auto2
;

INTERSECT funkcija daje kao rezultat podatke


koji se nalaze u obe selekcije. One kojih
nema, nee ni biti prikazane.
Primer:

SELECT Proizvodjac
FROM Auto1
INTERSECT SELECT Proizvodjac FROM Auto2
;

MINUS funkcija daje kao rezultat samo one


podatke iz prve selekcije koje nemaju
korespondirajuce podatke u drugoj selekciji.
Primer:
SELECT Proizvodjac
FROM Auto1
MINUS SELECT Proizvodjac FROM Auto2
;

Samo ime funkcija govori u koju svrhu se


koriste ove komande = za manipulaciju
datuma u vaoj bazi.
U te funkcije spadaju:
ADD_MONTHS dodavanje broja meseca
LAST_DAY datum zadnjeg dana u mesecu
MONTHS_BETWEEN broj meseci izmeu
datuma
ROUND zaokruenje u datumu

Odredjenom datumu (d) e biti


dodan odreeni broj meseci (x).
x parametar moe biti integer.
Sledi primer:
SELECT ADD_MONTHS(08-FEB98,3),
ADD_MONTHS(08-MAR-98,5),
ADD_MONTHS(08-SEP-98,1);
Rezultat:

ADD_MON
THS

08-MAY-98

ADD_MON
THS

08-AUG-98

ADD_MON
THS

08-OCT-98

Ova funkcija daje kao rezultat datum zadnjeg


dana u mesecu, koji sadri parametar d.
SELECT LAST_DAY(18-MAR-98) ;

Rezultat: 31-MAR-98

Ova komanda izraunava broj meseci izmeu


prvog i drugog datuma:

MONTHS_BETWEEN (prvi_datum,
drugi_datum)

Primer:
SELECT MONTHS_BETWEEN(12-APR-98,12DEC-98) Razlika ;
Rezultat: Razlika = 6

Ova komanda zaokruuje datum u datom


formatu:
SELECT ROUND(TO_DATE(18-APR-71,MM)
Najblizi_Mesec
FROM Kalendar
;
Rezultat: Najblizi_Mesec = 01-APR-71

Vrste formata:
li> CC, SCC Stolee/Vek
SYYYY, YYYY, YEAR Godina, zaokruuje od 1.
jula
YYY, YY, YY
Q Kvartal, zaokruuje od 16. drugog meseca u
kvartalu
DDD, DD, J Dan
HH, HH12, HH24 Sati
MI Minute
WW Isti dan sedmice kao prvi dan godine
W Isti dan sedmice kao prvi dan meseca
VAZNO: funkcija TO_DATE konvertuje
CHAR/VARCHAR2 Data Type u DATE Data
Type.

You might also like