You are on page 1of 77

- SQL Dr Medenica Miroslav

CREATE TABLE
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.

CREATE TABLE

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.

CREATE TABLE

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

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.

INSERT INTO, VALUES

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);

INSERT INTO, VALUES


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.

INSERT INTO, VALUES


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:

INSERT INTO, VALUES


Proizvodjac
VW
Mercedes
Ford
BMW

Model
Golf GTI
2000
190 C

Boja

Godiste

Plava

1986

Siva

Sierra 2.0 Crvena


750

Crna

Vlasnik
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.

INSERT INTO, VALUES


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:

INSERT INTO, VALUES


Proizvodjac
VW

Model
Boja
Golf GTI
Plava
2000

Mercedes

190 C

Ford

Sierra
2.0

BMW

Godiste
1986

Vlasnik
Ime1
Prezime1

1991

Ime1
Prezime1

Crvena 1986

Ime2
Prezime2

Crna

Ime3
Prezime3

Siva

1998

Kao sto vidite, polje Model kod BMW-a je


prazno.

INSERT INTO, VALUES

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

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:

SELECT , FROM

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
UPDATE Auto
SET Boja = bela, Godiste = 1995
WHERE Proizvodjac = VW ;
Tabela sada izgleda ovako:

Proizvodjac
VW

Model
Golf GTI
2000

Mercedes

190 C

Ford

Sierra
2.0

Boja

Godiste

Bela

1995

Siva
Crvena

Vlasnik
Ime1
Prezime1

1991

Ime1
Prezime1

1986

Ime2
Prezime2

DELETE

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:

DELETE
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

ALTER TABLE , ADD


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)
;

ALTER TABLE, ADD


Proizvodjac

Model

Boja

Godiste

Vlasnik

VW

Golf GTI
2000

Plava

1986

Ime1
Prezime1

Mercedes

190 C

Siva

1991

Ime1
Prezime1

Ford

Sierra
2.0

1986

Ime2
Prezime2

Crvane

Registr
acija

ALTER TABLE, DROP

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, 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.

SELECT , FROM
Proizvodjac Model

Boja

Godiste

VW

Golf GTI

Plava

1986

Mercedes

190 C

Siva

1991

Ford

Sierra
2.0

Crvena

1986

Vlasnik
Ime1
Prezime1
Ime1
Prezime1
Ime2
Prezime2

SELECT , FROM

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.

SELECT , FROM
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.

SELECT , FROM

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

SELECT , FROM

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

DISTINCT i COUNT
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.

DISTINCT i COUNT
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

DISTINCT i COUNT

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

DISTINCT i COUNT

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.

DISTINCT i COUNT
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.

DISTINCT i COUNT
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.

DISTINCT i COUNT

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

Rezultat je:

Ime1
Prezime1

Ime2
Prezime2

WHERE

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:

WHERE
Proizvodjac

Model

VW

Golf GTI
2000

Mercedes

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

WHERE
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)

WHERE, BETWEEN, AND,


OR

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

WHERE, LIKE

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

WHERE, LIKE
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

WHERE, SELECT,
FROM,AND
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

Model

Boja

Godiste

Vlasnik

Mercedes

190 C

Siva

1991

Ime1
Prezime1

ORDER BY

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:

ORDER BY
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,

ORDER BY
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):

ORDER BY
SELECT *
FROM Auto
ORDER BY Model;
Rezultat:

Proizvodjac

Model

Boja

Godiste

Vlasnik
Ime1
Prezime1

Mercedes

190 C

Siva

1991

VW

Golf GTI
2000

Plava

1986

Ime1
Prezime1

Ford

Sierra 2.0

Crvane

1986

Ime2
Prezime2

ORDER BY

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:

ORDER BY
Proizvodjac

Model

Boja

Godiste

Ford

Sierra 2.0

Crvane

1986

VW

Golf GTI
2000

Mercedes

190 C

Plava
Siva

Vlasnik
Ime2
Prezime2

1986

Ime1
Prezime1

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

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):

GROUP BY
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

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:

HAVING
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.

AGREGATE SQL FUNKCIJE


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):

AVG
Proizvodjac
VW

Model
Golf GTI
2000

Boja

KM

Plava

159456

Vlasnik
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:

AVG

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
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
Ime1
Prezime1

Ukupno
171910

MIN, MAX
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.

MIN, MAX
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.

JOINS

JOIN komanda se odnosi na


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

Marka
22645
17956
4874

JOIN
Proizvodjac Model
Golf GTI
VW
2000
Mercedes
Ford

190 C

Boja

Marka

Plava

22645

Siva

Sierra 2.0 Crvana

Vlasnik
Ime1
Prezime1

15488

Ime1
Prezime1

36790

Ime2
Prezime2

JOIN
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

JOIN

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
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
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
Ime1 Prezime1
Ime1 Prezime1
Ime2 Prezime2

Marka
22645
NULL
NULL

RIGHT JOIN
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

PREDIKTI
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.

IN
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, ANY

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)
;

EXIST

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


;

ALGEBARSKE FUNKCIJE
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
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
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
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
;

DATUMSKE FUNKCIJE
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

ADD_MONTHS

Odredjenom datumu (d) e biti


dodan odreeni broj meseci
(x).
x parametar moe biti integer.
Sledi primer:

SELECT ADD_MONTHS(08FEB-98,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

LAST_DAY

Ova funkcija daje kao rezultat datum


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

Rezultat: 31-MAR-98

MONTHS_BETWEEN

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

ROUND
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