Upload
emirdi
View
13
Download
4
Embed Size (px)
DESCRIPTION
df
Citation preview
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
1 Baze podataka :: Predavanje
ZADAĆA IZ BAZE PODATAKA
0. RELACIONA SHEMA
RJ (RJ#, NAZIV, GRAD) RADNIK (RADNIK#, IME, KVALIFIKACIJA, ZARADA, RJ#) PROJEKAT (PROJEKAT#, NAZIV, SREDSTVA) UČEŠĆE (RADNIK#, PROJEKAT#, FUNKCIJA)
1.
Pretpostavimo da je potrebno da načinimo upit kojim se dobija tabelarni pregled kvalifikacione strukture zaposlenih (KVALIFIKACIJA) po radnim jedinicama (RJ#). SELECT RJ#, KVALIFIKACIJA FROM RADNIK O1 VKV O2 VSS O1 KV O2 VKV O3 VSS O3 VSS O1 VKV 2. Upit (1) definiše radnju selekcije kolona RJ# i KVALIFIKACIJA iz tabele RADNIK. To još uvek nije projekcija, jer se iz praktičnih razloga iz rezultata ne eliminišu jednake vrste. To je često veoma skup proces, a nekada i nije neophodan, pa stoga njegovo aktiviranje treba eksplicitno naznačiti: SELECT DISTINCT RJ#, KVALIFIKACIJA FROM RADNIK O1 KV O1 VKV O2 VKV O2 VSS O3 VSS
3
Upit (2) sada precizno definiše projekciju relacije RADNIK po atributima RJ# i KVALIFIKACIJA.
Tabela koja predstavlja rezultat upita može da se uredi. Na primer, pregled imena RADNIK-a i njihovih RJ-a prema abecednom redosledu imena radnika (IME) formira se upitom:
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
2 Baze podataka :: Predavanje
SELECT IME, RJ# FROM RADNIK ORDER BY IME DUSAN O1 DUSICA O3 MAJA O1 MARKO O1 RADOJE O2 RUZICA O3 ZIVORAD O2 4. Selekciju redova tabele RADNIK koji odgovaraju visokokvalifikovanim radnicima (VKV) dobijamo upitom: SELECT * FROM RADNIK WHERE KVALIFIKACIJA = 'VKV' R1 MAJA VKV 5000.0000 O1 R4 ZIVORAD VKV 5100.0000 O2 R7 DUSAN VKV 5300.0000 O1 5.
Kompozicija operacija selekcije i restrikcije sadržana je u upitu (2), koji formira tabelu imena visokokvalifikovanih radnika (VKV) i šifara njihovih radnih jedinica (RJ). Tabela je uređena po abecednom redosledu. SELECT IME, RJ# FROM RADNIK WHERE KVALIFIKACIJA = 'VKV' ORDER BY IME DUSAN O1 MAJA O1 ZIVORAD O2 6. Kvalifikacioni izraz može imati oblik složenijeg logičkog izraza. Tako u upitu (3), kojim se formira tabela visokokvalifikovanih radnika (VKV) čija je plata (ZARADA) veća od 20.000 dinara, to je konjukcija prostih poređenja vrednosti atributa sa zadatom konstantom. SELECT IME FROM RADNIK WHERE KVALIFIKACIJA ='VKV' AND ZARADA >5000 ZIVORAD DUSAN
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
3 Baze podataka :: Predavanje
7. Kvalifikaconi izraz u obliku disjunkcije srećemo u upitu (4), kojim se formira tabela imena radnika (RADNIK) onih radnih jedinica (RJ) čije su šifre 1 i 3. SELECT IME FROM RADNIK WHERE RJ# = 'O1' OR RJ# = 'O3' MAJA MARKO DUSICA RUZICA DUSAN 8. Elegantniji način izražavanja ovog upita ilustrovan je u primeru (5), a zasnovan je na upotrebi relacije pripadnosti (IN) elemenata skupu. SELECT IME FROM RADNIK WHERE RJ# IN (O1,O3) 9. Zajednička karakteristika svih do sada razmatranih primera je da predstavljaju upite nad jednom relacijom. Umetanjem upita nad jednom relacijom u upit nad drugom relacijom izražava se implicitno operecija prirodnog spajanja, odnosno dobija se upit nad dve relacije. Primer tog tipa je upit (6) kojim se formira tabela imena radnika koji su zaposleni u radnim jedinicama (RJ) u gradu Beogradu. SELECT IME FROM RADNIK WHERE RJ# IN SELECT RJ# FROM RJ# WHERE GRAD = 'SARAJEVO'
A) SELECT IME
FROM RADNIK
WHERE RJ# = 'O3'
DUSICA
RUZICA
B) SELECT RJ#
FROM RJ
WHERE GRAD = 'SARAJEVO'
O3
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
4 Baze podataka :: Predavanje
A I B) SKUPA SELECT IME
FROM RADNIK
WHERE RJ# ='O3' IN
SELECT RJ#
FROM RJ
WHERE GRAD = 'SARAJEVO'
9 RJESENJE SAMO ZAGRADE
SELECT IME
FROM RADNIK
WHERE RJ# IN (SELECT RJ#
FROM RJ
WHERE GRAD = 'SARAJEVO')
DUSICA
RUZICA
10. Upit (1) kojim se formira tabela imena radnika (IME) i lokacija njihovih radnih jedinica (GRAD) zadat je nad dve relacije: RADNIK i RJ. On predstavlja kompoziciju operacije spajanja ovih relacija po atributima RJ# i operacija projekcije relacije RADNIK po atributu IME i relacije RJ po atributu GRAD. SELECT RADNIK.IME,RJ.GRAD FROM RADNIK,RJ WHERE RADNIK.RJ# = RJ.RJ# MAJA TRAVNIK RADOJE TRAVNIK MARKO TRAVNIK ZIVORAD TRAVNIK DUSICA SARAJEVO RUZICA SARAJEVO DUSAN TRAVNIK 11. Složenijeg oblika je upit (2) kojim se formira tabela imena visokokvalifikovanih (VKV) radnika koji rade u GRAD-u u Beogradu i naziva tih radnih jedinica (NAZIV).
Pored operacija projekcije i spajanja, upit (2) sadrži i restrikcije relacija RADNIK i RJ. SELECT RADNIK.IME,RJ.NAZIV FROM RADNIK,RJ WHERE RADNIK.KVALIFIKACIJA = 'VKV' AND RADNIK. RJ# = RJ.RJ# AND RJ.GRAD = 'SARAJEVO'
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
5 Baze podataka :: Predavanje
12. Rezultat izvršenja radnje koju definiše upitni blok je relacija, što znači skup, pa se upitni blokovi mogu pojaviti kao operandi skupovnih operacija: unije (UNION), preseka (INTERSECT) i razlike (MINUS). Tako je moguće formirati upitne izraze koji mogu biti znatno složeniji od pojedinačnih upitnih blokova.
Na primer, upitom (1) traže se sve radne jedinice (RJ#) koje nemaju zaposlenih radnika. SELECT RJ# FROM RJ MINUS SELECT RJ# FROM RADNIK RJ# O1 O2 O3 RJ# O1 O2 O1 O2 O3 O3 O1 13. Poslednja dva reda upita izdvajaju iz tabele RADNIK one radne jedinice koje imaju zaposlene – jer su njihovi lični podaci dati u tabeli RADNIK. Prva dva reda upita izdvajaju iz tabele RJ sve radne jedinice. Oduzimanjem rezultata drugog dela upita od rezultata prvog dela upita dobija se traženi spisak radnih jedinica koje nemaju zaposlenih radnika.
Rezultat upita (2) su matični brojevi onih visokokvalifikovanih (VKV) radnika koji učestvuju na nekom projektu. SELECT RADNIK# FROM RADNIK WHERE KVALIFIKACIJA = 'VKV' INTERSECT SELECT RADNIK# FROM UCESCE
SELECT RADNIK#
FROM RADNIK
WHERE KVALIFIKACIJA = 'VKV'
R1
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
6 Baze podataka :: Predavanje
R4
R7
SELECT RADNIK#
FROM UCESCE
R1
R2
R2
R3
R3
R4
R5
R6
R6
R6
R7
14. Gornji upit sadrži veznu promenljivu X čiji je dijapazon (tj. skup iz kojeg ta promenljiva dobija vrednosti) relacija UČEŠĆE.
U ovom upitu takođe se pojavljuje skupovna relacija (CONTAINS).
Primetimo da gornji upit odgovara deljenju relacije UČEŠĆE (RADNIK#, PROJEKAT#, FUNKCIJA) relacijom koja predstavlja rezultat upita:
SELECT PROJEKAT#
FROM PROJEKAT
WHERE SREDSTVA > 3000
P1
P2
P3
15. Funkcionalnoj kompletnosti SQL-a znatno doprinose prisutne standardne funkcije: AVG (izračunavanje srednje vrednosti), SUM (izračunavanje zbira, sume), COUNT (utvrđivanje kardinalnosti skupa), MAX (nalaženje majveće vrednosti, maksimuma) i MIN (nalaženje najmanje vrednosti, minimuma).
Rezultat upita (1) je prosečna zarada (ZARADA) visokokvalifikovanih radnika (VKV).
SELECT AVG (ZARADA)
FROM RADNIK
WHERE KVALIFIKACIJA = 'VKV'
SVEUČILIŠTE/UNIVERZITET “VITEZ” TRAVNIK FAKULTET POSLOVNE INFORMATIKE [email protected]
7 Baze podataka :: Predavanje
5133.3333
16. Upit (2) daje odgovor na pitanje koliko različitih funkcija (FUNKCIJA) obavlja na projektima radnik sa matičnim brojem 946.
SELECT COUNT (DISTINCT FUNKCIJA)
FROM UCESCE
WHERE RADNIK# = 'R6'
SELECT COUNT (DISTINCT FUNKCIJA)
FROM UČEŠĆE
WHERE RADNIK# = 'R6'