Professional Documents
Culture Documents
02 SQL Jezik
02 SQL Jezik
Predmet:
Baze podataka
Dr Slavica Kordić
Milan Čeliković
Vladimir Dimitrieski
Branko Terzić
Marko Vještica
Rad u učionici (1/2)
• Podaci o nalozima na računaru:
– User name: swX-Y
• X – broj indeksa, Y – godina upisa
– Password: Stud3nt
Rad u učionici (2/2)
• Podaci potrebni za konektovanje na bazu
podataka (db2016):
– Username: swXY
• X – broj indeksa, Y – godina upisa
– Password: ftn
– Host Name: 192.168.0.102
– Port Number: 1522
– Oracle SID, database name: db2016
SQL (Structured Query Language)
• SQL
– standardni jezik relacionih sistema za
upravljanje bazama podataka
– jezik visokog nivoa deklarativnosti
– objedinjuje funkcije jezika za definiciju
podataka, jezik za manipulaciju podacima i
upitni jezik
4
SQL (Structured Query Language)
6
SQL (Structured Query Language)
8
SQL (Structured Query Language)
9
Primer
radnik({Mbr, Ime, Prz, Sef, Plt, God,Pre}, {Mbr}),
projekat({Spr, Ruk, Nap, Nar}, {Spr}),
radproj({Spr, Mbr, Brc}, {Spr + Mbr}),
radnik[Sef] radnik[Mbr],
projekat[Ruk] radnik[Mbr],
radproj[Mbr] radnik[Mbr],
radproj[Spr] projekat[Spr].
10
Tabela radnik
• Mbr - maticni broj radnika
• Ime - ime radnika
• Prz - prezime radnika
• Sef - maticni broj direktno nadredjenog rukovodioca
- radnika
• Plt - mesecni iznos plate radnika
• God - Datum rodjenja radnika
• Pre – godišnja premija na platu radnika
11
Tabela projekat
• Spr - sifra projekta
• Ruk - rukovodilac projekta
• Nap - naziv projekta
• Nar - narucilac projekta
12
Tabela radproj
• Spr - sifra projekta
• Mbr - maticni broj radnika
• Brc - broj casova nedeljnog angazovanja na
projektu
13
Kreiranje tabele
CREATE TABLE [šema.]<naziv_tabele>
(<naziv_kolone> <tip_podatka> [DEFAULT
izraz] [, ...]
CONSTRAINT <naziv_ogranicenja>
<definicija_ogranicenja> [, ...]);
15
Naziv tabele i kolone
• mora početi slovom,
• mora biti između 1 i 30 znakova dužine,
• mora sadržati samo velika i mala slova,
cifre, _, $ i #,
• ne sme se poklapati sa nazivom nekog
drugog objekta koji je kreirao isti korisnik,
• ne sme biti rezervisana reč Oracle
servera.
• nazivi nisu case sensitive.
16
Tabela radnik
CREATE TABLE radnik
(
Mbr integer NOT NULL,
Ime varchar2(20) NOT NULL,
Prz varchar2(25) NOT NULL,
Sef integer,
Plt decimal(10, 2),
Pre decimal(6, 2),
God date NOT NULL,
CONSTRAINT radnik_PK PRIMARY KEY (Mbr),
CONSTRAINT radnik_FK FOREIGN KEY (Sef) REFERENCES
Radnik (Mbr),
CONSTRAINT radnik_CH CHECK (Plt>500)
);
17 /
Tabela projekat
CREATE TABLE projekat
(
Spr integer not null,
Ruk integer not null,
Nap varchar2(30),
Nar varchar2(30),
CONSTRAINT projekat_PK PRIMARY KEY (Spr),
CONSTRAINT projekat_FK FOREIGN KEY (Ruk)
REFERENCES Radnik (Mbr),
CONSTRAINT projekat_UK UNIQUE (Nap)
); 18 /
Tabela radproj
CREATE TABLE radproj
(
Spr integer NOT NULL,
Mbr integer NOT NULL,
Brc integer NOT NULL,
CONSTRAINT radproj_PK PRIMARY KEY (Spr, Mbr),
CONSTRAINT radproj_rad_FK FOREIGN KEY (Mbr)
REFERENCES radnik(Mbr),
CONSTRAINT radproj_prj_FK FOREIGN KEY (Spr)
REFERENCES projekat(Spr)
);
19 /
Kreiranje tabela
• Pokrenuti skriptu za kreiranje baze
podataka
20
Tabela faze_projekta
• Kreirati tabelu faze_projekta
faze_projekta[Spr] projekat[Spr],
faze_projekta[Rukfp] radnik[Mbr]
21
Tabela faze_projekta
22
Izmena definicije tabele
• ALTER TABLE
Alter table iskaz služi za:
– dodavanje nove kolone,
– modifikaciju postojeće kolone,
– definisanje podrazumevane vrednosti za novu
kolonu,
– brisanje kolone
– dodavanje oraničenja.
23
ALTER TABLE
ALTER TABLE <naziv_tabele>
ADD (<naziv_kolone> <tip_podatka> [DEFAULT izraz]
[, <naziv_kolone> <tip_podatka>]...);
25
Brisanje definicije tabele
26
Brisanje definicije tabele
27
Ažuriranje baze podataka
• INSERT
• DELETE
• UPDATE
28
Ažuriranje baze podataka
• INSERT – dodavanje nove torke
29
Ažuriranje baze podataka
• Pokrenuti skripte za unos podataka
30
Ažuriranje baze podataka
• INSERT – dodavanje nove torke
32
Ažuriranje baze podataka
• DELETE – brisanje postojećih torki
delete radnik;
33
Ažuriranje baze podataka
• UPDATE – modifikacija postojećih torki
UPDATE <naziv_tabele>
SET <obeležje>= <aritm_izraz>
{,<obeležje>= <aritm_izraz>}
[WHERE (<uslov_selekcije>)]
34
Ažuriranje baze podataka
• UPDATE – modifikacija postojećih torki
update radnik
set plt = plt*1.2;
update radnik
set plt = plt*1.2
where mbr = 201;
35
Transakcija
• najmanja jedinica obrade podataka, takva da
– prevodi BP iz jednog u drugo (ne nužno različito)
konzistentno stanje, s obzirom na implementirana
ograničenja
– sadrži operacije upita ili/i operacije ažuriranja
podataka u BP
• efekti izvođenja transakcije se, na kraju, u celosti
– potvrđuju (COMMIT) i tada postaju vidljivi ostalim
korisnicima u sistemu, ili
– poništavaju (ROLLBACK) i ostavljaju obrađivani deo
BP u stanju kakvo je važilo neposredno pre početka
njenog izvođenja 36
Izražavanje upita i osnovna
struktura naredbe SELECT
• Sve vrste upita se u SQL-u izražavaju putem
naredbe SELECT. Osnovna struktura SELECT
naredbe je:
SELECT *| <lista_obeležja>
FROM <lista_tabela>
[WHERE <uslov_selekcije>]
38
Upiti nad jednom tabelom
• Prikazati imena i prezimena svih radnika.
39
DISTINCT
SELECT [DISTINCT] <lista_obeležja>
FROM <lista_tabela>
WHERE <uslov_selekcije>
40
WHERE <uslov_selekcije>
SELECT *|[DISTINCT] <lista_obeležja>|izraz
FROM <lista_tabela>
WHERE <uslov_selekcije>
41
Aritmetički izrazi
SELECT *|[DISTINCT] <lista_obeležja>|izraz
FROM <lista_tabela>
WHERE <uslov_selekcije>
42
Null vrednost
x IS NULL – x je nula vrednost
x IS NOT NULL – x nije nula vrednost
44
BETWEEN
• Izlistati ime, prz, god radnika rođenih
između 1953 i 1975.
45
NOT BETWEEN
• Izlistati ime, prz, god radnika koji nisu
rođeni između 1953 i 1975.
46
LIKE
<obeležje> LIKE <uzorak>
48
LIKE
• Izlistati mbr, ime, prz radnika čije ime
sadrži slovo A na drugoj poziciji.
49
LIKE
• Izlistati imena radnika koja počinju na
slovo E.
50
LIKE
• Izlistati radnike koji u svom prezimenu
imaju slovo E.
51
IN
• Izlistati matične brojeve radnika koji rade
na projektima sa šifrom 10, 20 ili 30.
52
IN
• Izlistati matične brojeve radnika koji rade
na projektu sa šifrom 10 ili rade 2, 4, ili 6
sati.
53
IN
• Izlistati matične brojeve radnika koji se
zovu Ana ili Sanja.
54
NOT IN
• Izlistati matične brojeve radnika koji se ne
zovu Ana ili Sanja.
55
Uređivanje izlaznih rezultata
SELECT *| <lista_obeležja>
FROM <lista_tabela>
WHERE <uslov_selekcije>
ORDER BY <podlista_obeležja>
56
ORDER BY
• Prikazati radnike koji imaju šefa sortirano
po prezimenu.
57
ORDER BY
• Neki primeri upotrebe klauzule ORDER BY.
59
ORDER BY
• Prikazati matične brojeve, imena,
prezimena i plate radnika, po opadajućem
redolsedu iznosa plate.
60
Uređivanje izlaznih rezultata
• Prikazati matične brojeve, konkatenirana
imena i prezimena radnika, kao i plate,
uvećane za 17%.
SELECT Mbr,
Ime || ' ' || Prz “Ime i prezime”,
Plt * 1.17 Plata
FROM Radnik;
61
ANY
x Ə ANY (<lista_vrednosti>)
Ə {<, >, <=, >=, !=, =}
Primer:
x = ANY (<lista_vrednosti>)
62
ANY
• Prikazati matične brojeve radnika, imena i
prezimena i platu radnika koji se zovu
Pera ili Moma.
63
ALL
x Ə ALL (<lista_vrednosti>)
Ə {<, >, <=, >=, !=, =}
Primer:
x != ALL (<lista_vrednosti>)
64
ALL
• Prikazati matične brojeve radnika, imena i
prezimena i platu radnika koji se ne zovu
Pera ili Moma.
65
Upotreba skupovnih funkcija
• Prikazati matične brojeve radnika, kao i plate,
uvećane za NULL vrednost.
67
Funkcija count
• COUNT(*) – vraća ukupan broj
selektovanih torki
• COUNT(<obeležje>) – vraća ukupan broj
selektovanih torki, za koje vrednost
<obeležja> nije nula vrednost
• COUNT(DISTINCT <obeležje>) – vraća
ukupan broj različitih torki, za koje
vrednost <obeležja> nije nula vrednost
68
Funkcija count
• Koliko ima radnika?
70
Funkcije max i min
• Prikazati minimalnu i maksimalnu platu
radnika.
71
Funkcija sum
• SUM(<obeležje>) – vraća zbir vrednosti
datog <obeležja>, za sve selektovane
torke, uključujući višestruko ponavljanje
istih torki
• SUM(DISTINCT <obeležje>) – vraća zbir
vrednosti datog <obeležja>, za sve
različite selektovane torke
72
Funkcija sum
• Prikazati broj radnika i ukupnu mesečnu
platu svih radnika.
73
Funkcija avg
• AVG(<obeležje>) – vraća srednju vrednost
datog <obeležja>, za sve selektovane
torke, uključujući višestruko ponavljanje
istih torki
• AVG(DISTINCT <obeležje>) – vraća
srednju vrednosti datog <obeležja>, za
sve različite selektovane torke
74
Funkcija avg
• Prikazati broj radnika, prosečnu platu i
ukupnu godišnju platu svih radnika.
75
Funkcija round
• ROUND(<izraz>, <broj_decimala>) –
vraća zaokruženu vrednost datog <izraza>
na dati <broj_decimala>
76
Funkcija round
• Prikazati prosečnu platu svih radnika
zaokruženo na jednu decimalu.
select round(avg(plt), 1)
from radnik;
77
GROUP BY
• Prikazati koliko radnika radi na svakom
projektu i koliko je ukupno angažovanje na
tom projektu?
78
HAVING
• Izlistati mbr radnika koji rade na više od dva
projekta.
79