Professional Documents
Culture Documents
SQL - Predavanja
SQL - Predavanja
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
CREATE TABLE
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
Model
Golf GTI
2000
190 C
Boja
Godiste
Plava
1986
Siva
Crna
Vlasnik
Ime1
Prezime1
1991
Ime1
Prezime1
1986
Ime2
Prezime2
1998
Ime3
Prezime3
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
UPDATE
SELECT , FROM
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
Rezultat:
DELETE
Proizvodjac
Model
Boja
Godiste
Vlasnik
VW
Golf GTI
2000
Bijela
1995
Ime1
Prezime1
1991
Ime1
Prezime1
Mercedes
190 C
Siva
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
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
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
SELECT Proizvodjac
FROM Auto
;
U prevodu: Odaberi
proizvoaa automobila iz
tabele Auto.
Rezultat izgleda ovako:
Proizvodjac
VW
Mercedes
Ford
SELECT , FROM
U prevodu: Odaberi
proizvoaa i boju automobila
iz tabele Auto.
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
Vlasnik
Ime1 Prezime1
DISTINCT i COUNT
Vlasnik
Ime1
Prezime1
Ime2
Prezime2
Ime3
Prezime3
Ime4
Prezime4
DISTINCT i COUNT
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;
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:
DISTINCT i COUNT
Rezultat je:
Ime1
Prezime1
Ime2
Prezime2
WHERE
Primer:
WHERE
Proizvodjac
Model
VW
Golf GTI
2000
Mercedes
190 C
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, LIKE
SELECT Proizvodjac
FROM Auto
WHERE Proizvodjac LIKE F%;
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:
Proizvodjac
Mercedes
Ford
WHERE, SELECT,
FROM,AND
I za kraj jedan kompletniji i malo vei primer:
Proizvodjac
Model
Boja
Godiste
Vlasnik
Mercedes
190 C
Siva
1991
Ime1
Prezime1
ORDER BY
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
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
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
GROUP BY
GROUP BY
A ovo je komanda :
Ukupno
Novo_Godiste
Ime2 Prezime2
Ime1 Prezime1
HAVING
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
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
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
Marka
22645
17956
4874
JOIN
Proizvodjac Model
Golf GTI
VW
2000
Mercedes
Ford
190 C
Boja
Marka
Plava
22645
Siva
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
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
SELECT *
FROM Auto
WHERE Proizvodjac = ALL (SELECT Proizvodjac FROM
Auto)
;
Odnosno
SELECT *
FROM Auto1
WHERE Proizvodjac = ANY (SELECT Proizvodjac FROM
Auto2)
;
EXIST
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:
ALGEBARSKE FUNKCIJE
Ovde
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
ADD_MONTHS
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
Rezultat: 31-MAR-98
MONTHS_BETWEEN
Primer:
Rezultat: Razlika = 6
ROUND
Ova komanda zaokruuje datum u datom
formatu:
SELECT ROUND(TO_DATE(18-APR-71,MM)
Najblizi_Mesec
FROM Kalendar
;
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.