Professional Documents
Culture Documents
BP Lekcija 09 - SQL
BP Lekcija 09 - SQL
SQL
Jezik relacione BP
Kreiranja
SQL 1
SQL - Structured Query Language
SQL 2
SQL
SQL 3
SQL
SQL 4
SQL
SQL 5
SQL
- definicije -
SQL 6
SQL
- manipulacije -
• Manipulacija BP:
– upit nad bazom podataka (izveštavanje),
– ažuriranje (unos, izmena, brisanje)
• (DML – Data manipulation Language)
• SELECT – prikaz željenog sadržaja RBP
UPDATE – izmena vrednosti kolona tabele
DELETE – izbacivanje redova tabele
INSERT – dodavanje redova u tabelu
SQL 7
SQL
- kontrola -
SQL 8
SQL
SQL 9
SQL
SQL 10
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), proširena preciznost u
odnosu na REAL
• DECIMAL(m,n): (DEC(m,n)), decimalni broj sa ili bez
predznaka, m-cifara, a n-decimalnih
SQL 11
SQL
tipovi podataka
SQL 12
SQL
- sintaksa -
SQL 13
SQL
- sintaksa -
• Separator naredbi:
naredba1;
naredba2;
• FORMAT naredbi: Sledeće naredbe su ispravno napisane
– SELECT *
FROM student
WHERE BrInd ≤ 100;
– SELECT * FROM student WHERE BrInd ≤ 100;
– SELECT *
FROM student
WHERE
BrInd ≤ 100;
SQL 14
Kreiranje baze
-----------
SQL 16
Kreiranje tabela
SQL 17
Kreiranje tabela
SQL 18
Kreiranje tabela
SQL 19
Kreiranje tabela
SQL 21
Kreiranje tabela
SQL 22
Primer
Datum
Prezime Sala
Vreme
Ime Ocena Ime Prezime
BrInd
Student Ispit Profesor
Adresa
Email IdProf
NaucnoZvanje
Telefon
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 26
Primer
SQL 27
Uklanjanje tabela
SQL 28
Kreiranje indeksa
SQL 29
Kreiranje indeksa
SQL 30
Kreiranje i uklanjanje indeksa
SQL 31
Indeksi
• Napomene:
• Svaka indeksna datoteka ima dva dela:
– ListaKolona, po kojima se vrši pretraživanje i po kojima
se vrši uređivanje indeksa
– Indeks - služi za vezu sa osnovnom datot.
• Indeks za vezu sa osnovnom datotekom je redni broj
unosa
SQL 33
Indeksi
Ispit Ispit_i1
ind BrInd IdPredme IdProf Ocena ... ind BrInd
ta
1 AAA01 PJ DZ 1 AAA01
2 BBD56 PJ DZ 6 AAA10
3 ABC23 RM MV 3 ABC23
4 HHH11 IT RP 5 ABC23
5 ABC23 IT RP 7 BBB04
6 AAA10 BP MV 2 BBD56
7 BBB04 IT RP 4 HHH11
8 HHH11 BP MV 8 HHH11
SQL 34
Indeksi
SQL 35
Izmena postojeće tabele
• 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 povećati dužinu za Br_Zap
ALTER TABLE Odeljenje
MODIFY (Br_Zap NUMBER(6));
SQL 36
Kreiranje i uklanjanje
pogleda
SQL 37
Prednosti pogleda
SQL 38
Baze podataka
SQL
Jezik relacione BP
Upiti
SQL 39
UPIT
- SELECT -
SQL 40
UPIT
- SELECT -
SQL 41
UPIT
- SELECT -
SQL 42
UPIT
- SELECT -
SQL 43
Prost upit nad jednom tabelom
SQL 44
Prost upit nad jednom tabelom
• Sintaksa
• SELECT * {[ALL DISTINCT] R-Lista}
FROM ImeTabele
[WHERE R-Predikat]
[ORDER BY ImeKolone [DESC]
{, ImeKolone [DESC]} …];
• * - Specijalni slučaj R-liste, kada u rezultat želimo da
uključimo sve kolone tabele
• ALL – iz rezultata neuklanja istovetne redove,
DISTINCT – suprotno. Podrazumeva se ALL.
• R-Lista se zadaje kao jedan ili više R-Izraza, pored naziva
kolone javljaju se i konstante
SQL 45
Prost upit nad jednom tabelom
SQL 47
Prost upit nad jednom tabelom
Student
BrInd Ime Prezime BrInd Ime Prezime
1 Marko Marković 1 Marko Marković
2 Petar Petrović SELECT 2 Petar Petrović
3 Aleksa Perić 3 Aleksa Perić
SQL 48
Prost upit nad jednom tabelom
Student
BrInd Ime Prezime BrInd Ime Prezime
1 Marko Marković 1 Marko Marković
2 Petar Petrović SELECT 2 Petar Petrović
3 Aleksa Perić 3 Aleksa Perić
SQL 49
Prost upit nad jednom tabelom
Student
BrInd Ime Prezime BrInd Ime Prezime
1 Marko Marković 3 Aleksa Perić
2 Petar Petrović SELECT
1 Marko Marković
3 Aleksa Perić 2 Petar Petrović
Predavanja 50
SQL 50
Prost upit nad jednom tabelom
• Upit za prikaz samo jedne kolone iz tabele i bez
eliminacije duplikata
SELECT Fakultet
FROM Student;
• Odgovara upitu relacione algebre
Fakultet(Student)
Student
BrInd Ime Prezime Fakultet Fakultet
1 Marko Marković PFB PFB
2 Petar Petrović FIM FIM
3 Aleksa Perić FIM SELECT FIM
4 Marko Marić FTHM FTHM
5 Petar Lazić PFB PFB
6 Jovan Marić PFB PFB
SQL 51
Prost upit nad jednom tabelom
Student
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
Fakultet
2 Petar Petrović FIM
PFB
3 Aleksa Perić FIM SELECT
FIM
4 Marko Marić FTHM
FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
28.11.2006. Predavanja
SQL 52
Prost upit nad jednom tabelom
Student
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM BrInd Ime Prezime
3 Aleksa Perić FIM 2 Petar Petrović
SELECT
4 Marko Marić FTHM 3 Aleksa Perić
5 Petar Lazić PFB
6 Jovan Marić PFB
SQL 54
Prost upit nad jednom tabelom
SQL 55
Prost upit nad jednom tabelom
SQL 56
Prost upit nad jednom tabelom
Racun
SifP NazivP Kolicina Cena SifP NazivP Cena
005 P1 1 1800,00 005 P1 180000,00
010 P2 6 300,00 010 P2 30000,00
020 P3 5 250,00 020 P3 25000,00
SELECT
001 P3 2 1100,00 001 P3 110000,00
003 P3 4 600,00 003 P3 60000,00
011 P1 3 700,00 011 P1 70000,00
SQL 57
Prost upit nad jednom tabelom
SQL 58
Prost upit nad jednom tabelom
sa izvedenim rezultatom
SQL 59
Prost upit nad jednom tabelom
sa svodnim rezultatom
SQL 61
Prost upit nad jednom tabelom sa
izvedenim rezultatom
SQL 62
Prost upit nad jednom tabelom sa
izvedenim rezultatom
SQL 63
Prost upit nad jednom tabelom
sa izvedenim rezultatom
SQL 64
Prost upit nad jednom tabelom
sa izvedenim rezultatom
Racun
SifP NazivP Kolicina Cena
005 P1 1 1800,00
010 P2 6 300,00
020 P3 5 250,00
SELECT 1800+300+250+1100 ....
001 P3 2 1100,00
003 P3 4 600,00
011 P1 3 700,00
SQL 65
Prost upit nad jednom tabelom
sa izvedenim rezultatom
Racun
SifP NazivP Kolicina Cena
005 P1 1 1800,00
010 P2 6 300,00
020 P3 5 250,00
SELECT 250 1800
001 P3 2 1100,00
003 P3 4 600,00
011 P1 3 700,00
SQL 66
Prost upit nad jednom tabelom
sa izvedenim rezultatom
SQL 67
Prost upit nad jednom tabelom
sa izvedenim rezultatom
SQL 68
Prost upit nad jednom tabelom
sa izvedenim rezultatom
SQL 69
Prost upit nad jednom tabelom
sa izvedenim rezultatom
Pozajmica (SifP,SifC,SifK,Dana)
SQL 70
Svodni upit nad jednom tabelom
SQL 71
Svodni upit nad jednom tabelom
SQL 73
Svodni upit nad jednom tabelom
SQL 74
Svodni upit nad jednom tabelom
GROUP BY
SifC, Dana
SQL 75
Svodni upit nad jednom tabelom
• Primeri:
• Upit za prikaz šifara autora i broja naslova koje su napisali
SQL 76
Svodni upit nad jednom tabelom
SQL 78
Svodni upit nad jednom tabelom
• SELECT BrInd,AVG(Ocena)
FROM Ispit
GROUP BY BrInd;
Ispit
BrInd IdPred IdProf Ocena Sala Datum Vreme
100/2007 BP03 MV01 8
200/2007 BP03 MV01 7
100/2007 OOP02 RP00 6
150/2008 BP03 MV01 7
250/2008 OOP02 RP00 8
300/2006 RM03 MV01 7
100/2007 RM03 MV01 9
300/2006 RM03 MV01 8
SQL 79
Svodni upit nad jednom tabelom
• SELECT IdPred,AVG(Ocena)
FROM Ispit
GROUP BY IdPred;
Ispit
BrInd IdPred IdProf Ocena Sala Datum Vreme
100/2007 BP03 MV01 8
200/2007 BP03 MV01 7
100/2007 OOP02 RP00 6
150/2008 BP03 MV01 7
250/2008 OOP02 RP00 8
300/2006 RM03 MV01 7
100/2007 RM03 MV01 9
300/2006 RM03 MV01 8
SQL 80
Svodni upit nad jednom tabelom
• SELECT IdProf,AVG(Ocena)
FROM Ispit
GROUP BY IdProf;
Ispit
BrInd IdPred IdProf Ocena Sala Datum Vreme
100/2007 BP03 MV01 8
200/2007 BP03 MV01 7
100/2007 OOP02 RP00 6
150/2008 BP03 MV01 7
250/2008 OOP02 RP00 8
300/2006 RM03 MV01 7
100/2007 RM03 MV01 9
300/2006 RM03 MV01 8
SQL 81
Svodni upit nad jednom tabelom
• SELECT IdProf,IdPred,AVG(Ocena)
FROM Ispit
GROUP BY IdProf, IdPred;
Ispit
BrInd IdPred IdProf Ocena Sala Datum Vreme
100/2007 BP03 MV01 8
200/2007 BP03 MV01 7
100/2007 OOP02 RP00 6
150/2008 BP03 MV01 7
250/2008 OOP02 RP00 8
300/2006 RM03 MV01 7
100/2007 RM03 MV01 9
300/2006 RM03 MV01 8
SQL 82
Svodni upit nad jednom tabelom
• SELECT IdProf,IdPred,BrInd,AVG(Ocena)
FROM Ispit
GROUP BY IdProf, IdPred; neispravno
Ispit
BrInd IdPred IdProf Ocena Sala Datum Vreme
100/2007 BP03 MV01 8
200/2007 BP03 MV01 7
100/2007 OOP02 RP00 6
150/2008 BP03 MV01 7
250/2008 OOP02 RP00 8
300/2006 RM03 MV01 7
100/2007 RM03 MV01 9
300/2006 RM03 MV01 8
SQL 83
Dekartov (Kartezijanov) proizvod
SQL 84
Dekartov (Kartezijanov) proizvod
Student Predmet
BrInd Ime Prezime Sifra Naziv
100/2010 Marko Marković SPRI01 Informatika
200/2011 Petar Petrović SPRI02 Matematika
SPRI03 Engleski jezik 1
Upis = Student × Predmet
BrInd Ime Prezime Sifra Naziv
100/2010 Marko Marković SPRI01 Informatika
100/2010 Marko Marković SPRI02 Matematika
100/2010 Marko Marković 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 85
Upiti nad više tabela
• Drugačija sintaksa:
SELECT * FROM Student CROSS JOIN Predmet;
SQL 86
spajanje
SQL 87
spajanje
Linija Avion
Let Udaljenost Tip Dolet
AA251 1000 B747 15000
UX112 4000 A320 7000
CC222 11000 DC9 3000
• SELECT *
FROM Linija, Avion
WHERE Dolet Udaljenost;
• Drugačija sintaksa:
SELECT *
FROM Linija JOIN Avion
ON Dolet Udaljenost;
Dolet Udaljenost
• SELECT *
FROM Linija, Avion
WHERE Dolet Udaljenost
AND Udaljenost 3000;
• Drugačija sintaksa:
SELECT *
FROM Linija JOIN Avion ON Dolet Udaljenost
WHERE Udaljenost 3000;
SQL 90
Spoljašnje spajanje
Student UpisaniPredmet
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
Student UpisaniPredmet
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
StudentPredmet 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
MogucMentor = StudentPredmet >< *ProfesorPredmet
Predmet = PredmetProf
BrInd 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 94
Desno spoljašnje spajanje
SELECT StudentPredmet.*, ProfesorPredmet.*,
FROM StudentPredmet RIGHT OUTER JOIN PredmetProf
ON Predmet = PredmetProf;
StudentPredmet 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
MogucMentor = StudentPredmet >< *ProfesorPredmet
Predmet = PredmetProf
BrInd 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
95
Puno spoljašnje spajanje
• Svi zapisi iz obe relacije će se pojaviti u rezultatu
StudentPredmet ProfesorPredmet
BrInd Ime Predmet IdProf PredmetProf
100/2009 Marko Baze podatka MV Baze podataka
101/2009 Petar Programiranje DZ Programiranje
105/2008 Nikola Zaštita IS AJ Baze podataka
AJ Internet tehnologije
MogucMentor = StudentPredmet * >< *ProfesorPredmet
Predmet = PredmetProf
Ili SELECT *
SQL 96
Puno spoljašnje spajanje
• Svi zapisi iz obe relacije će se pojaviti u rezultatu
StudentPredmet ProfesorPredmet
BrInd Ime Predmet IdProf PredmetProf
100/2009 Marko Baze podatka MV Baze podataka
101/2009 Petar Programiranje DZ Programiranje
105/2008 Nikola Zaštita IS AJ Baze podataka
AJ Internet tehnologije
MogucMentor = StudentPredmet * >< *ProfesorPredmet
Predmet = PredmetProf
BrInd 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 Zaštita IS NULL NULL
SQL 97
Upiti nad više tabela
SQL 98
Upiti nad više tabela
SQL 99
Upiti nad više tabela
SQL 100
Upiti nad više tabela
• Upit koji daje šifre i nazive naslova knjiga koje članovi drže
kod sebe (spajaju se tabele Drzi, Knjiga i Naslov po dva
uslova jednakosti kolona koja se kombinuju sa AND)
SQL 101
Upiti nad više tabela
SQL 102
Prost upit sa svodnim rezultatom
nad više tabela
• Sintaksa:
SELECT G-Lista
FROM ImeTabele [NadimakTabele] {,…}
[WHERE R-Predikat]
• Primer: Upit koji daje ukupno trajanje pozajmica svih knjiga
sa šifrom naslova ‘PP00’
SELECT SUM(Dana)
FROM Pozajmica P, Knjiga K
WHERE P.SifK=K.SifK AND SifN=‘PP00’
SQL 103
Klauzule WHERE i HAVING
SQL 104
Klauzule WHERE i HAVING
SQL 105
Klauzule WHERE i HAVING
SQL 106
Klauzule WHERE i HAVING
SQL 107
Klauzule WHERE i HAVING
SQL 109
Upiti sa podupitima
• Primer 1:
Sastaviti upit koji daje podatke o pozajmicama
natprosečnog trajanja.
1) Određuje 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 111
Upiti sa podupitima
• Primer 2:
Sastaviti upit koji daje imena članova čije je ukupno
trajanje pozajmica veće 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 izvršava se za svakog člana
• Spoljni SELECT određuje kolonu koja se koristi u
podupitu
SQL 112
Upiti sa podupitima
• Primer 3:
Sastaviti upit koji daje imena članova koji drže knjige.
Ovo je primer za korišćenje IN forme predikata. Šifre
članova koji drže knjige daje nekorelisani podupit
SELECT Ime
FROM Clan
WHERE SifC IN (SELECT SifC
FROM Drzi);
SQL 113
Upiti sa podupitima
• Primer 4:
Sastaviti upit koji daje podatke o pozajmicama koje su
trajale duže od svih pozajmica člana šifre ‘PP0’.
SELECT *
FROM Pozajmica
WHERE Dana > ALL (SELECT Dana
FROM Pozajmica
WHERE SifC=‘PP0’);
SQL 114
Unija, razlika i presek upita
SQL 115
Unija, razlika i presek upita
• Primer 1:
Sastaviti upit koji daje šifre knjiga koje su bile u prometu
Članovi ih drže kod sebe ili su ranije pozajmljivane.
SELECT SifK
FROM Drzi
UNION
SELECT DISTINCT SifK
FROM Pozajmica;
SQL 116
Unija, razlika i presek upita
• Primer 2:
Sastaviti upit koji daje naslove knjiga koje su kod članova, a
ranije nisu pozajmljivane
SQL 117
Baze podataka
SQL
- Ažuriranja i kontrole -
SQL naredbe
ažuriranja
• Primer 1:
Ubacivanje podatka o novom naslovu
INSERT INTO Naslov
VALUES(‘PJC#’,
’Programski jezik C#’,’C#’);
• Primer 2:
Neka je kreirana nova tabela NaslovPJ(SifN,Naziv).
Ubacujemo u tu tabelu podatke za naslove iz oblasti ‘PJ’ na
osnovu sadržaja tabele Naslov
INSERT INTO NaslovPJ
SELECT SifN, Naziv
FROM Naslov
WHERE SifO=‘PJ’;
• Primer 1:
Neka je u tabeli Naslov za naslov šifre SifN=‘RBP0’
greškom uneta šifra oblasti ‘PJ’, sledi izmena:
UPDATE Naslov
SET SifO=‘BP’
WHERE SifN=‘RBP0’;
• Primer 2:
Neka je jedan broj članova brisan iz evidencije. Pri tome za
tabelu Pozajmica nije specificiran referencijalni integritet.
Usled toga šifre članova u Pozajmica treba ručno postaviti
na NULL vrednost.
UPDATE Pozajmica
SET SifC=NULL
WHERE SifC NOT IN (SELECT SifC
FROM Clan);
• Primer 3:
Upis kamata od 6% za račune sa iznosom većim od
800.000,00 dinara i kamate od 5% za račune sa iznosom
manjim od 800.000,00 dinara:
UPDATE Depozit
SET Stanje=Stanje*1.06
WHERE Stanje > 800.000,00;
UPDATE Depozit
SET Stanje=Stanje*1.05
WHERE Stanje <= 800.000,00;
• U ovom primeru je bitan redosled ažuriranja
• Primer 1:
Uklanjanje podataka o članu šifre ‘MM0’ koji niti drži neku
knjigu niti je imao pozajmice:
• Primer 2:
Za uklanjanje svih neaktivnih članova, onih koji nisu uzeli ni
jednu knjigu, povremeno treba zadavati:
• Izvedene tabele
• Dobija se izvršavanjem upita kojim je definisan pogled
• Kreiranje:
CREATE VIEW ImePogleda [ListaKolona]
AS R-Upit;
• ImePogleda mora biti novo (ne sme da postoji)
• ListaKolona – ili se nasleđuje iz upita koji ga definiše ili se
mora navesti (npr. spajanje)
• Jednom kreiran pogled, može se koristiti za druge upite, i
ponekad i kod ažuriranja.
• Vrste kontrole:
– Ko može da pristupa BP
– Čemu može da pristupa u BP
– Šta može da radi sa onim čemu može da pristupi
• Kontrola pristupa se obezbeđuje sa funkcijama:
– Kreiranje i uklanjanje korisnika – naloga za rad sa BP
– Dodela i uklanjanje opštih prava za rad sa BP
– Dodela i uklanjanje posebnih prava
• Kreiranje korisnika
143