Professional Documents
Culture Documents
SQL
Jezik relacione BP
SQL
Standardizacija za relacione BP
Prvi standard 1986, dopunjen 1989
Znaajnije dopune 1992. (ANSI SQL), 1995., 1999., 2003.
Razvoj SQL-a traje i danas
SQL
SQL
ta SQL moe da uradi?
SQL
SQL
Primena SQL-a kod Web prezentacija
Za izgradnju Web sajtova koji prikazuju podatke iz baze
podataka neophodno je sledee:
SQL
SQL
Svaki programski jezik obuhvata podatke i manipulacije nad
tim podacima
SQL-jezik:
Objekti manipulacije su relacije
Rezultati manipulacija su relacije
Terminologija:
relacija tabela
n-torka red (vrsta)
Vrednosti u n-torkama za jedan atribut kolona
SQL
SQL
SQL
SQL
- definicije -
SQL
- manipulacije Manipulacija BP:
upit nad bazom podataka (izvetavanje),
auriranje (unos, izmena, brisanje)
SQL
- kontrola Kontrola pristupa podacima:
koji korisnici imaju pristup,
kojim podacima,
ta mogu da rade sa tim podacima
(DCL Data Control Language)
GRANT (dodeljivanje ovlaenja nad objektima baze
drugim korisnicima od strane vlasnika)
REVOKE (ukidanje ovalaenja dodeljenih pomou
GRANT)
SQL
SQL
SQL
10
SQL
SQL
11
SQL
tipovi podataka
INTEGER: (INT), ceo broj sa ili bez predznaka iji broj cifara
zavisi od konkretne implement.
SMALLINT: ceo broj sa brojem cifara manjim u odnosu na
INTEGER
REAL: realni broj sa ili bez predznaka, preciznost zavisi od
konkreten implement.
DOUBLE PRECISION: (DOUBLE), proirena preciznost u
odnosu na REAL
DECIMAL(m,n): (DEC(m,n)), decimalni broj sa ili bez
predznaka, m-cifara, a n-decimalnih
SQL
12
SQL
tipovi podataka
CHARACTER(n): (CHAR(n)), niz znakova fiksne duine n
Konstanta tipa CHAR se pie izmeu jednostrukih
navodnika
VARCHAR(n) - niz znakova duine najvie n
TEXT tekst proizvoljne duine
Praktino sve implementacije SQL-a podravaju dodatne
tipove podataka kao to su:
BOOLEAN TRUE/FALSE (tano/netano)
DATE datum (2004-12-01)
TIME vreme (16:50:07)
SQL
13
SQL
- sintaksa SQL ne pravi razliku izmeu velikih i malih slova (case
insensitive). Sledee dve naredbe su jednake:
select prezime from osoba where
ime = Marko;
SELECT prezime FROM osoba WHERE ime = Marko;
Komentari:
-- ovo je komentar
/* ovo je komentar
koji se protee
u vie redova */
Za nazive (imena) se ne smeju koristiti rezervisane rei
SQL
14
SQL
- sintaksa Separator naredbi:
naredba1;
naredba2;
FORMAT naredbi: Sledee naredbe su ispravno napisane
SELECT *
FROM student
WHERE BrInd 100;
SELECT * FROM student WHERE BrInd 100;
SELECT *
FROM
student
WHERE
BrInd
100;
SQL
15
Kreiranje tabela
SQL
16
Kreiranje tabela
17
Kreiranje tabela
18
Kreiranje tabela
SQL
19
Kreiranje tabela
20
Kreiranje tabela
21
Kreiranje tabela
SQL
22
Primer
Datum
Sala
Prezime
Ime
Vreme
Ocena
Ime
Prezime
BrInd
Ispit
Student
Profesor
Adresa
IdProf
Email
Telefon
NaucnoZvanje
Predmet
IdPredmeta
Naziv
SQL
23
Primer
Primer:
Student(BrInd, Ime, Prezime, Adresa, Telefon, Email)
Profesor(IdProf, Ime Prezime, NaucnoZvanje)
Predmet(IdPredmet, Naziv)
Ispit(Brind, IdPredmet, IdProf, Ocena, Sala, Datum, Vreme)
SQL
24
Primer
SQL
25
Primer
SQL
PRIMARY KEY,
NOT NULL UNIQUE);
26
Primer
27
Uklanjanje tabela
Izbor dinamike specifikacije referencijalnih integriteta, kod
uklanjanja predstavlja delikatnu operaciju
Ako se nepromiljeno koristi RESTRICTED, namee se krut
reim, npr. ne mogu se ukloniti pogreno uneti podaci iz
tabele
Naredba uklanjanja tabele iz BP
DROP TABLE ImeTabele ;
Briu se u BP sve informacije o tabeli ImeTabele
Zavisno od SUBP-a:
tabela koja se uklanja mora biti prazna (u suprotnom SUBP nee
izvriti tu naredbu) ili
ne mora biti prazna (SUBP e obavezno izvriti naredbu)
SQL
28
Kreiranje indeksa
29
Kreiranje indeksa
30
SQL
31
Indeksi
Primer: Ako se eli brz pristup podacima u tabeli Ispit po dva
osnova, po BrInd i IdPredmeta, kreiraju se dva indeksa:
CREATE INDEX Ispit_i1 ON Ispit(BrInd);
CREATE INDEX Ispit_i2 ON Ispit(IdPredmeta);
Ispit_i1 (BrInd)
AAA01
AAA10
ABC23
ABC23
BBB04
BBD56
HHH11
HHH11
Ispit_i2 (IdPredmeta)
BP
BP
IT
IT
IT
PJ
PJ
RM 32
Indeksi
Napomene:
Svaka indeksna datoteka ima dva dela:
ListaKolona, po kojima se vri pretraivanje i po kojima
se vri ureivanje indeksa
Indeks - slui za vezu sa osnovnom datot.
Indeks za vezu sa osnovnom datotekom je redni broj
unosa
SQL
33
Indeksi
Ispit
Ispit_i1
ind
BrInd
IdPredme
ta
IdProf
AAA01
PJ
BBD56
Ocena
ind
BrInd
DZ
AAA01
PJ
DZ
AAA10
ABC23
RM
MV
ABC23
HHH11
IT
RP
ABC23
ABC23
IT
RP
BBB04
AAA10
BP
MV
BBD56
BBB04
IT
RP
HHH11
HHH11
BP
MV
HHH11
SQL
...
34
Indeksi
SQL
35
Naredba ALTER
Sintaksa:
ALTER TABLE ImeTabele
ADD (ImeKolone Tip, [ImeKolone Tip]...);
Primer: U tabelu Odeljenje dodati kolone Sef_Od i Br_Zap
ALTER TABLE Odeljenje
ADD (ef_Od INTEGER, Br_Zap NUMBER(2));
Primer: U istoj tabeli poveati duinu za Br_Zap
ALTER TABLE Odeljenje
MODIFY (Br_Zap NUMBER(6));
SQL
36
Kreiranje i uklanjanje
pogleda
37
Prednosti pogleda
38
UPIT
- SELECT -
Pogodnost SQL-a
Upiti su veoma dobro optimizovani
Upiti se efikasno izvravaju
SQL
39
UPIT
- SELECT -
SQL
40
UPIT
- SELECT -
SQL
41
UPIT
- SELECT -
SQL
42
SQL
43
Sintaksa
SELECT * {[ALL DISTINCT] R-Lista}
FROM ImeTabele
[WHERE R-Predikat]
[ORDER BY ImeKolone [DESC]
{, ImeKolone [DESC]} ];
* - Specijalni sluaj R-liste, kada u rezultat elimo da
ukljuimo sve kolone tabele
ALL iz rezultata neuklanja istovetne redove,
DISTINCT suprotno. Podrazumeva se ALL.
R-Lista se zadaje kao jedan ili vie R-Izraza, pored naziva
kolone javljaju se i konstante
SQL
44
46
Prezime
BrInd Ime
Prezime
Marko
Markovi
Marko
Markovi
Petar
Petrovi
Petar
Petrovi
Aleksa
Peri
Aleksa
Peri
SELECT
SQL
47
Student
BrInd Ime
Prezime
BrInd Ime
Prezime
Marko
Markovi
Aleksa
Peri
Petar
Petrovi
Marko
Markovi
Aleksa
Peri
Petar
Petrovi
28.11.2006.
SELECT
SQL
Predavanja
48
48
Prezime
Fakultet
Fakultet
Marko
Markovi
PFB
PFB
Petar
Petrovi
FIM
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
FTHM
Petar
Lazi
PFB
PFB
Jovan
Mari
PFB
SELECT
SQL
FIM
PFB
49
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
28.11.2006.
Fakultet
SELECT
PFB
FIM
FTHM
SQL
Predavanja
50
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
28.11.2006.
Fakultet
SELECT
FIM
FTHM
PFB
SQL
Predavanja
51
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
BrInd Ime
Prezime
Petar
Petrovi
Aleksa
Peri
52
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
BrInd Ime
Prezime
Aleksa
Peri
Petar
Petrovi
53
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
BrInd Ime
Prezime
Aleksa
Peri
Marko
Mari
Petar
Petrovi
54
NazivP
Kolicina
Cena
SifP
NazivP
Cena
005
P1
1800,00
005
P1
180000,00
010
P2
300,00
010
P2
30000,00
020
P3
250,00
020
P3
25000,00
001
P3
1100,00
001
P3
110000,00
003
P3
600,00
003
P3
60000,00
011
P1
700,00
011
P1
70000,00
SELECT
SQL
55
NazivP
Kolicina
Cena
005
P1
1800,00
010
P2
NULL
020
P3
250,00
001
P3
1100,00
003
P3
NULL
011
P1
NULL
SifP
SELECT
010
003
011
SQL
56
SQL
57
SQL
59
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
60
Student
BrInd Ime
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
61
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
62
NazivP
Kolicina
Cena
005
P1
1800,00
010
P2
300,00
020
P3
250,00
001
P3
1100,00
003
P3
600,00
011
P1
700,00
SELECT
SQL
1800+300+250+1100 ....
63
NazivP
Kolicina
Cena
005
P1
1800,00
010
P2
300,00
020
P3
250,00
001
P3
1100,00
003
P3
600,00
011
P1
700,00
SELECT
SQL
250
1800
64
NazivP
Kolicina
Cena
005
P1
1800,00
010
P2
300,00
020
P3
250,00
001
P3
1100,00
003
P3
600,00
011
P1
700,00
SELECT
SQL
2500
1250
65
SQL
66
67
SQL
68
69
SifP
1
2
3
4
5
6
SifC
JJ0
JJ0
PP0
PP0
JJ1
JJ1
Dana
5
7
2
4
6
3
SifC Dana
JJ0 12
PP0 6
JJ1
9
Rezultat
JJ0 12
Uslov:
SUM(Dana)>10
70
SQL
71
72
SifP
1
2
3
4
5
6
SifC
JJ0
JJ0
PP0
PP0
JJ1
JJ1
Dana
5
7
2
4
6
3
SifC Dana
JJ0 12
PP0 6
JJ1
9
Rezultat
JJ0 12
HEAVING
SUM(Dana)>10
GROUP BY
SifC, Dana
SQL
73
Primeri:
Upit za prikaz ifara autora i broja naslova koje su napisali
SELECT SifA, COUNT(*)
FROM Je_Autor
GROUP BY SifA ;
AP0
JN0
DM0
ZP0
AP1
IT0
SQL
1
1
2
2
1
1
74
75
IdPred
IdProf
Ocena
100/2007
BP03
MV01
200/2007
BP03
MV01
100/2007
OOP02
RP00
150/2008
BP03
MV01
250/2008
OOP02
RP00
300/2006
RM03
MV01
100/2007
RM03
MV01
300/2006
RM03
MV01
SQL
Sala
Datum
Vreme
76
IdPred
IdProf
Ocena
100/2007
BP03
MV01
200/2007
BP03
MV01
100/2007
OOP02
RP00
150/2008
BP03
MV01
250/2008
OOP02
RP00
300/2006
RM03
MV01
100/2007
RM03
MV01
300/2006
RM03
MV01
8
SQL
Sala
Datum
Vreme
77
IdPred
IdProf
Ocena
100/2007
BP03
MV01
200/2007
BP03
MV01
100/2007
OOP02
RP00
150/2008
BP03
MV01
250/2008
OOP02
RP00
300/2006
RM03
MV01
100/2007
RM03
MV01
300/2006
RM03
MV01
8
SQL
Sala
Datum
Vreme
78
IdPred
IdProf
Ocena
100/2007
BP03
MV01
200/2007
BP03
MV01
100/2007
OOP02
RP00
150/2008
BP03
MV01
250/2008
OOP02
RP00
300/2006
RM03
MV01
100/2007
RM03
MV01
300/2006
RM03
MV01
8
SQL
Sala
Datum
Vreme
79
IdPred
IdProf
Ocena
100/2007
BP03
MV01
200/2007
BP03
MV01
100/2007
OOP02
RP00
150/2008
BP03
MV01
250/2008
OOP02
RP00
300/2006
RM03
MV01
100/2007
RM03
MV01
300/2006
RM03
MV01
8
SQL
Sala
Datum
Vreme
80
SQL
81
SQL
82
SQL
83
Upit koji daje ifre i nazive naslova knjiga koje lanovi dre
kod sebe (spajaju se tabele Drzi, Knjiga i Naslov po dva
uslova jednakosti kolona koja se kombinuju sa AND)
SELECT DISTINCT N.SifN, Naziv
FROM Drzi D, Knjiga K, Naslov N
WHERE D.SifK=K.SifK AND K.SifN=N.SifN;
SQL
84
SQL
85
SQL
86
87
88
SQL
89
90
Upiti sa podupitima
SQL
92
Upiti sa podupitima
Upiti sa podupitima
Primer 1:
Sastaviti upit koji daje podatke o pozajmicama
natprosenog trajanja.
1) Odreuje se prosek trajanja svih pozajmica
2) Trajanje svake pozajmice poredimo sa dobijenom
srednjom vrednosti
SELECT *
FROM Pozajmica
WHERE Dana > (SELECT AVG (Dana)
FROM Pozajmica);
Radi se o nekorelisanom podupitu
SQL
94
Upiti sa podupitima
Primer 2:
Sastaviti upit koji daje imena lanova ije je ukupno
trajanje pozajmica vee od 10 dana. Za svakog lana iz
tabele Clan treba prema njegovoj ifri utvrditi da li je
njegovo ukupno trajanje pozajmica iznad 10
SELECT Ime
FROM Clan C
WHERE 10 < (SELECT SUM (Dana)
FROM Pozajmica
WHERE SifC=C.SifC);
Podupit je korelisan i izvrava se za svakog lana
Spoljni SELECT odreuje kolonu koja se koristi u
podupitu
SQL
95
Upiti sa podupitima
Primer 3:
Sastaviti upit koji daje imena lanova koji dre knjige.
Ovo je primer za korienje IN forme predikata. ifre
lanova koji dre knjige daje nekorelisani podupit
SELECT Ime
FROM Clan
WHERE SifC IN (SELECT SifC
FROM Drzi);
SQL
96
Upiti sa podupitima
Primer 4:
Sastaviti upit koji daje podatke o pozajmicama koje su
trajale due od svih pozajmica lana ifre PP0.
Reenje primenom ALL konstrukcije
SELECT *
FROM Pozajmica
WHERE Dana > ALL (SELECT Dana
FROM Pozajmica
WHERE SifC=PP0);
SQL
97
98
Primer 1:
Sastaviti upit koji daje ifre knjiga koje su bile u prometu
lanovi ih dre kod sebe ili su ranije pozajmljivane.
SELECT SifK
FROM Drzi
UNION
SELECT DISTINCT SifK
FROM Pozajmica;
SQL
99
Primer 2:
Sastaviti upit koji daje naslove knjiga koje su kod lanova, a
ranije nisu pozajmljivane
SELECT DISTINCT Naziv
FROM Naslov N, Knjiga K
WHERE N.SifN=K.SifN
AND SifK IN (SELECT SifK
FROM Drzi
EXCEPT
SELECT DISTINCT SifK
FROM Pozajmica);
SQL
100