Professional Documents
Culture Documents
BP Lekcija 10 - SQL Upiti
BP Lekcija 10 - SQL Upiti
SQL
Jezik relacione BP
SQL
UPIT
- SELECT -
Pogodnost SQL-a
Upiti su veoma dobro optimizovani
Upiti se efikasno izvravaju
SQL
UPIT
- SELECT -
SQL
UPIT
- SELECT -
SQL
UPIT
- SELECT -
SQL
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
Prezime
BrInd Ime
Prezime
Marko
Markovi
Marko
Markovi
Petar
Petrovi
Petar
Petrovi
Aleksa
Peri
Aleksa
Peri
SELECT
SQL
Prezime
BrInd Ime
Prezime
Marko
Markovi
Marko
Markovi
Petar
Petrovi
Petar
Petrovi
Aleksa
Peri
Aleksa
Peri
SELECT
SQL
10
Student
BrInd Ime
Prezime
BrInd Ime
Prezime
Marko
Markovi
Aleksa
Peri
Petar
Petrovi
Marko
Markovi
Aleksa
Peri
Petar
Petrovi
28.11.2006.
SELECT
Predavanja
SQL
11
11
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
PFB
SELECT
SQL
FIM
12
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
Predavanja
SQL
13
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
Predavanja
SQL
14
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
15
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
16
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
17
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
18
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
19
SQL
20
21
SQL
22
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
23
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
24
Prezime
Fakultet
Marko
Markovi
PFB
Petar
Petrovi
FIM
Aleksa
Peri
FIM
Marko
Mari
FTHM
Petar
Lazi
PFB
Jovan
Mari
PFB
SELECT
SQL
25
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 ....
26
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
27
SifP
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
28
SQL
29
30
SQL
31
SQL
32
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
33
SQL
34
35
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
36
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
37
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
38
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
39
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
40
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
41
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
42
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
43
SQL
44
Student
Prezime
Sifra
Naziv
100/2010 Marko
Markovi
SPRI01
Informatika
200/2011 Petar
Petrovi
SPRI02
Matematika
SPRI03
Engleski jezik 1
BrInd
Ime
Ime
Prezime
Sifra
Naziv
SPRI01
Informatika
SPRI02
Matematika
SPRI03
Engleski jezik 1
200/2011 Petar
Petrovi
SPRI01
Informatika
200/2011 Petar
Petrovi
SPRI02
Matematika
200/2011 Petar
Petrovi
SPRI03
Engleski jezik 1
SELECT *
FROM Student, Predmet;
SQL
45
SQL
46
spajanje
Neka je zadata relacija r(R) i s(S), pri emu je RS=
Neka postoji atribut A iz R i atribut B iz S nad kojima je
mogue izvriti
AB
je operator poreenja; <,,= ,>,
SQL
47
spajanje
Avion
Linija
Let
Udaljenost
Tip
Dolet
AA251
1000
B747
15000
UX112
4000
A320
7000
CC222
11000
DC9
3000
Udaljenost
Tip
Dolet
AA251
1000
B747
15000
AA251
1000
A320
7000
AA251
1000
DC9
3000
UX112
4000
B747
15000
UX112
4000
A320
7000
CC222
11000
B747
15000
SQL
48
spajanje
SELECT *
FROM Linija, Avion
WHERE Dolet Udaljenost;
Drugaija sintaksa:
SELECT *
FROM Linija JOIN Avion
ON Dolet Udaljenost;
spajanje nad 3 relacije (r1, r2, r3):
SELECT *
FROM r1
JOIN r2 ON JoinCondition
JOIN r3 ON Join Condition;
SQL
49
spajanje
Kako pronai linije i avione koji na tim linijama mogu leteti,
ali samo za one linije na kojima je udaljenost vea od
3000km
Dolet Udaljenost
SELECT *
FROM Linija, Avion
WHERE Dolet Udaljenost
AND Udaljenost 3000;
Drugaija sintaksa:
SELECT *
FROM Linija JOIN Avion ON Dolet Udaljenost
WHERE Udaljenost 3000;
SQL
50
Spoljanje spajanje
Zapis <105/2008, Nikola> nee se pojaviti u rezultatu zato
to ne postoji ni jedan zapis koji zadovoljava uslov prirodnog
spajanja sa tim zapisom
UpisaniPredmet
Student
BrInd
Ime
BrInd
Predmet
100/2009
Marko
100/2009
Baze podataka
101/2009
Petar
101/2009
Baze podataka
105/2008
Nikola
100/2009
Internet tehnologije
Ime
Predmet
100/2009
Marko
Baze podataka
100/2009
Marko
Internet tehnologije
101/2009
Petar
Baze podataka
SQL
51
Student
BrInd
Ime
BrIndSt
Predmet
100/2009
Marko
100/2009
Baze podataka
101/2009
Petar
101/2009
Baze podataka
105/2008
Nikola
100/2009
Internet tehnologije
Ime
BrIndSt
100/2009
Marko
100/2009
Marko
101/2009
Petar
105/2008
Nikola
NULL
SQL
Predmet
NULL
52
Student
BrInd
Ime
BrIndSt
Predmet
100/2009
Marko
100/2009
Baze podataka
101/2009
Petar
101/2009
Baze podataka
105/2008
Nikola
100/2009
Internet tehnologije
Ime
BrIndSt
100/2009
Marko
100/2009
Marko
101/2009
Petar
105/2008
Nikola
NULL
SQL
Predmet
NULL
53
ProfesorPredmet
BrInd
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podatka
MV
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
AJ
Baze podataka
AJ
Internet tehnologije
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podataka
MV
Baze podataka
100/2009
Marko
Baze podataka
AJ
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
NULL
NULL
NULL
AJ
InternetTehnologije
SQL
54
ProfesorPredmet
BrInd
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podatka
MV
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
AJ
Baze podataka
AJ
Internet tehnologije
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podataka
MV
Baze podataka
100/2009
Marko
Baze podataka
AJ
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
NULL
NULL
NULL
AJ
InternetTehnologije
55
ProfesorPredmet
BrInd
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podatka
MV
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
105/2008
Nikola
Zatita IS
AJ
Baze podataka
AJ
Internet tehnologije
56
ProfesorPredmet
BrInd
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podatka
MV
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
105/2008
Nikola
Zatita IS
AJ
Baze podataka
AJ
Internet tehnologije
Ime
Predmet
IdProf
PredmetProf
100/2009
Marko
Baze podataka
MV
Baze podataka
100/2009
Marko
Baze podataka
AJ
Baze podataka
101/2009
Petar
Programiranje
DZ
Programiranje
NULL
NULL
NULL
AJ
InternetTehnologije
105/2008
Nikola
Zatita IS
NULL
NULL
SQL
57
SQL
58
SQL
59
SQL
60
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
61
SQL
62
63
SQL
64
65
66
Upiti sa podupitima
SQL
67
Upiti sa podupitima
68
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
69
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
70
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
71
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
72
73
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
74
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
75