Upload
marko-knezevic
View
232
Download
0
Embed Size (px)
Citation preview
7/31/2019 Sem_rad_BP - Knezevic Marko
1/17
PANEVROPSKI UNIVERZITET APEIRON
FAKULTET INFORMACIONIH TEHNOLOGIJA
Redovne studijeSmjer Informacione Tehnologije
Predmet
BAZE PODATAKA
Inspektorat RS
(seminarski rad)
Predmetni nastavnikProf. dr Lazo Rolji
Student
Kneevi Marko
Index br: 76-08/R-IT
Banja Luka
10.06.2012
7/31/2019 Sem_rad_BP - Knezevic Marko
2/17
SEMINARSKI RAD Marko Knezevi
SADRAJ
FAKULTET INFORMACIONIH TEHNOLOGIJA ..................................................................1Redovne studije .......................................................................................................................1
Smjer Informacione Tehnologije .............................................................................................1
Predmet ....................................................................................................................................1BAZE PODATAKA ................................................................................................................1
2.1. Pravila pisanja koda ..............................................................................................................32.2. Primjeri osnovnih kodova ....................................................................................................33.3. Upiti ....................................................................................................................................11
3.3.1. Naredba SELECT ....................................................................................................113.3.3. Auriranje podataka u tabeli .......................................................................................163.3.4. Brisanje podataka iz tabele .........................................................................................16
________________________________________________________________________ 2
7/31/2019 Sem_rad_BP - Knezevic Marko
3/17
SEMINARSKI RAD Marko Knezevi
2.1. Pravila pisanja koda
SQL ne pravi razliku izmeu malih i velikih slova (tj. nije casesensitive) i to znai da su
sljedee dvije naredbe iz primjera jednake:
primjer 1: select prezime from osoba where ime = Milan
primjer 2: SELECT prezime FROM osoba WHERE ime = Milan
Radi lakeg prepoznavanja koda preporuljivo je da se naredbe piu velikim slovima
(primjer 2.), a sve ostalo malim slovima.
U nekim bazama niz znakova (string) mora biti napisan kao to je u bazi. Znai, u
gornjim naredbama nije isto ako pie Milan ili MILAN ali isto to ne mora vrijediti i zaMicrosoft SQL.
Komentari su tekst koji piemo kao podsjetnik i oni nemaju nikakvu vezu sa kodom
osim to daju odreenu informaciju programeru koji ita kod, tj. oni se ne izvravaju.
Postoje dvije vrste komentara:
-- ovo je komentartj. oznaka za komentar je -- a iza slijedi tekst komentara
/* komentar */ ovo je takoe komentar koji se protee kroz vie redova
Imena objekata u SQL (imena tabela, kolona, pogleda) prave se tako da prvi znak morabiti a-z, A-Z ili podvueno (underline) _, te u nekim sluajevima, @ i #.
Razmak i ostali specijalni znakovi se mogu koristiti ali nije preporuljivo.
2.2. Primjeri osnovnih kodova
Prilikom koritenja nekog DBMS-a (MircrosoftSQL), potrebno je izabrati bazu sa kojom
emo da radimo. Prvo emo pogledati spisak baza na serveru. Da bismo to uradili koristimosledeu komandu (OBAVEZNO je ;na kraju svake komande).
Iskoristiemo bazu test koju sam napravio, da bih pokazao upotrebu naredbe DROP
koja slui za brisanje baze.
DROP DATABASE test;
Nakon ove naredbe baza e biti obrisana. Vana napomena je da nee biti nikakvogupozorenja tj. pitanja tipa "Da li ste sigurni?".
________________________________________________________________________ 3
7/31/2019 Sem_rad_BP - Knezevic Marko
4/17
SEMINARSKI RAD Marko Knezevi
Zbog toga se preporuuje, da se sa ovom naredbom bude operezno, jer se jednom komandom
moe obrisati baza koja sadri jako bitne podatke, to bi moglo imati ogromne posljedice.
Kreiranje baze je veoma jednostavno (kao i njeno brisanje). Baza se kreira uz pomokljune rijei CREATE:
CREATE DATABASE bp;
Ovdje sam izabrao da ime baze bude "bp".
Za kreiranje tabela koristi se sledei kod:
CREATE TABLE (
-> ,
-> < tip kolone 2> ,
->);
Unoenje sadraja u neku tabelu se vri naredbomINSERT, na dva naina:
INSERT INTO SET
->imeKolone1=vrijednost1
->imeKolone2=vrijednost2
->;
________________________________________________________________________ 4
7/31/2019 Sem_rad_BP - Knezevic Marko
5/17
SEMINARSKI RAD Marko Knezevi
ili
INSERT INTO
->(imeKolone1, imeKolone2, ...)
->VALUES (vrijednost1, vriednost2, ...);
Pregled sadraja u tabelama se vri komandom SELECT i to je jedna od
najkomplikovanijih naredbi u SQL-u, zato to je ona glavna i od nje ne zavisi fleksibilnost
odgovora. Opti oblik ove naredbe izgleda (slui za ispis kompletne tabele):
SELECT * FROM
Sve promjene u bazi se obavljaju pomou kljune rei UPDATE. Ova naredba sadri
elemente naredbe INSERT(za podeavanje vrijednosti kolone) i elemente komande SELECT
(za izbor sadraja koji emo modifikovati). Uopteno oblik komande UPDATEizgleda ovako:
UPDATE SET
->=, ...
->WHERE
Brisanje sadraja u SQL-u je "opasno lako". Komanda za brisanje sadraja je sledea:
DELETE FROM WHERE ;
Komanda koja brie itav sadraj tabele:
DELETE FROM ;
________________________________________________________________________ 5
7/31/2019 Sem_rad_BP - Knezevic Marko
6/17
SEMINARSKI RAD Marko Knezevi
3.1. Tabele
Poslije pravljenja baze podataka, prvo to treba da se uradi je da se odrede entiteti (koji
su u relacionim bazama podataka predstavljeni kao tabele), atributi (kolone), tipovi i domeni
podataka.Ova baza ima 7 tabela koje moete vidjeti ispod, zajedno sa atributima i tipovima
podataka.
Vrijednosti domena predstavljaju skup svih istovrsnih podataka u toj tabeli.
SQL naredba koja pravi tabelu zaposleni:
CREATETABLE [dbo].[ZAPOSLENI]([Zaposlenik#] [smallint] NOTNULL,[Ime] [varchar](20)NOTNULL,
[Prezime] [varchar](30)NOTNULL,[JMBG] [char](13)NOTNULL,[Kvalifikacija] [varchar](10)NOTNULL,[Odjeljenje#] [tinyint] NOTNULL,[Inspekcija#] [tinyint] NOTNULL,[RadnoMjesto#] [tinyint] NOTNULL,
CONSTRAINT [PK_ZAPOSLENI] PRIMARYKEYCLUSTERED(
[Zaposlenik#] ASC)
________________________________________________________________________ 6
7/31/2019 Sem_rad_BP - Knezevic Marko
7/17
SEMINARSKI RAD Marko Knezevi
TABELE:
1. Zaposleni
2. Odjeljenja
3. Inspekcije
________________________________________________________________________ 7
7/31/2019 Sem_rad_BP - Knezevic Marko
8/17
SEMINARSKI RAD Marko Knezevi
4. Plate
uti klju pored kolone oznaava Primary Key ogranienje koje nam osigurava da e
nam vrijednosti u navedenoj koloni biti jedinstvene.
Svaka prva kolona u tabelama ima primarni klju zato to sam elio da mi te kolone
obezbijede jedinstvenost podataka za odreenu tabelu.
Ovdje sam koristio sledee tipove podataka paljivo odabrane da se ne bih nepotrebno
rasipao sa memorijom:
tinyint (0-255) 1B
smallint (-32768 - +32767) 2B
char, varchar
smalldateandtime 4B
Kolona Allow Nulls nam oznaava koja kolona smije ostati prazna, a koja ne. Ja
nisam ni jednu kolonu ostavio da moe biti prazna iz razloga to smatram da su svi podaci
potrebni u tabeli.
Sada u detaljno da objasnim tabelu zaposlenih, jer smatram da je ona najvanija, a i
samim tim predstavlja tabelu spajanja sa ostalim tabelama.
________________________________________________________________________ 8
7/31/2019 Sem_rad_BP - Knezevic Marko
9/17
SEMINARSKI RAD Marko Knezevi
ATRIBUTI:
Zaposlenik# - smallint numeriki tip podatka iz klase integer, a njega sam odabrao
zbog pretpostavke da u skorije vrijeme nee biti vei broj radnih mjesta od onoliko koliko ovaj
tip dozvoljava.
Ime, Prezime - varchar(20) i (30) - varijabibilni alfanumerki tip sa maksimalnomduinom od 20 karaktera, jer mislim da neu naii na ime ili prezime vee od 20, odnosno 30
znakova. Ovdje sam odabrao varchar iz razloga to elim da utedim na memoriji, jer on
zauzima onoliko bajtova koliki je broj znakova za razliku od char koji zazuzima punu
vrijednost.
________________________________________________________________________ 9
7/31/2019 Sem_rad_BP - Knezevic Marko
10/17
SEMINARSKI RAD Marko Knezevi
Kao to se vidi na dijagramu tabela Zaposleni je tabela spajanja koja spaja sve ostale
tabele, jer je ova baza tako i osmiljena. Ovdje su prikazane sve veze meu tabelama i one su
jedan prema vie i ostvarene su pomou Primarnog i Stranog kljua (Primary Key, ForeignKey).
Dakle, pomou ovih kljueva sam obezbijedio referencijalni integritet podataka.
Npr. svi isti atributi u raliitim tabelama su povezani FK-PK vezom tako da ukoliko neko
pokua da unese zaposlenika u tabeli zaposleni za odjeljenje# koji ne postoji u tabeli
odjeljenja nee uspjeti, jer baza podataka to nee dozvoliti. Isto vai i za RadnoMjesto#,
Inspekcija#, ...
________________________________________________________________________ 10
7/31/2019 Sem_rad_BP - Knezevic Marko
11/17
SEMINARSKI RAD Marko Knezevi
3.3. Upiti
Upiti su naredbe pomou kojih manipuliemo podacima u bazi podataka.
3.3.1. Naredba SELECT
Ovo je glavna i najkompleksnija naredba u SQL-u i slui za prikazivanje izdvajanje)
podataka iz tabela.
Primjer 2.
--inspekcijeselect inspekcija# ID,nazivinspekcije Naziv from inspekcije
orderby ID asc
Rezultat ovog upita je:
Na prethodnom upitu sam koristio alijase koji nam slue da odreenu kolonu
imenujemo prilikom izvravanja naredbeselect.
Naredba order by slui za sortiranje podataka po odreenoj koloni.
Primjer 3.
select*from zaposleniwhere ime='Milan'
Rezultat ovog upita je:
Ovdje sam izvrio restrikciju, tj. izdvajanje samo onih redova koji zadovoljavaju
kriterijum koji sam zadao.
________________________________________________________________________ 11
7/31/2019 Sem_rad_BP - Knezevic Marko
12/17
SEMINARSKI RAD Marko Knezevi
3.3.1.1. Spajanja
Spajanja slue da bismo kombinovali podatke iz vie tabela. Postoje 4 vrste spajanja:
1. Inner Join (unutranje spajanje)
2. Outer Join (vanjsko spajanje: lijevo i desno)
3. Full Join (potpuno spajanje)
4. Cross Join (unakrsno spajanje)
U ovom radu u da koristim samo unutranje spajanje.
Primjer 4.
SQL upit po ansi standardu:
select zaposlenik# 'ID',Ime,Prezime,JMBG,Kvalifikacija,nazivodjeljenjaOdjeljenje,nazivinspekcije Inspekcija,nazivradnogmjesta 'Radno Mjesto'from zaposleniinnerjoin odjeljenjaon odjeljenja.odjeljenje#=zaposleni.odjeljenje#innerjoin radnamjestaon radnamjesta.radnomjesto#=zaposleni.radnomjesto#innerjoin inspekcijeon zaposleni.inspekcija#=inspekcije.inspekcija#
Rezultat ovog upita je:
Dakle, ovdje sam izvrio spajanje vie tabela i podataka i time dobio potpune rezultate u
kojima sam prikazao detalje o svakom zaposlenom.
________________________________________________________________________ 12
7/31/2019 Sem_rad_BP - Knezevic Marko
13/17
SEMINARSKI RAD Marko Knezevi
Primjer 5.
--izvrsene kontroleselect izvrsenekontrole.izvkontrola# "R.B.",odjeljenja.nazivodjeljenjaOdjeljenje,zaposleni.ime+' '+zaposleni.prezimeInspektor,kontrole.vrstakontrole Kontrola,inspekcije.nazivinspekcijeInspekcija,izvrsenekontrole.subjektkontrole "SubjektKontrole",izvrsenekontrole.datumkontrole Datum
from izvrsenekontrole,odjeljenja,zaposleni,inspekcije,kontrolewhere zaposleni.zaposlenik#=izvrsenekontrole.zaposlenik# and
zaposleni.odjeljenje#=odjeljenja.odjeljenje# andizvrsenekontrole.kontrola#=kontrole.kontrola# andinspekcije.inspekcija#=zaposleni.inspekcija#
Rezultat ovog upita je:
Umjesto da izvrim projekciju imena i prezima pojedinano, ja sam ih spojio u jednu
kolonuInspektor.
________________________________________________________________________ 13
7/31/2019 Sem_rad_BP - Knezevic Marko
14/17
SEMINARSKI RAD Marko Knezevi
3.3.1.2. Relacioni operatori
Postoje sljedei relacioni operatori:
= jednako
< manje
> vee
>< razliito
= vee jednako
Ostali operatori: IN, LIKE, BETWEEN, ...
Primjer 6.
select plate.plata# 'R/B',zaposleni.ime+' '+zaposleni.prezimeZaposleni,odjeljenja.nazivodjeljenja Odjeljenje,plate.iznosplate'Plata u KM'from zaposleni,plate,odjeljenjawhere zaposleni.zaposlenik#=plate.zaposlenik# andodjeljenja.odjeljenje#=zaposleni.odjeljenje#and iznosplate>1600orderby'Plata u KM'asc
Rezultat ovog upita je:
Ovdje sam koristio operator > da bih izdvojio sve zaposlene sa platom veom od
1600 KM i izvrio sortiranje rezultata po koloni Plata u KM u rastuem redoslijedu.
________________________________________________________________________ 14
7/31/2019 Sem_rad_BP - Knezevic Marko
15/17
SEMINARSKI RAD Marko Knezevi
3.3.1.3. Standardne (agregatne) funkcije
SUM zbir vrijednosti u koloni
AVG prosjena vrijednost u koloni
MIN minimalna vrijednost u koloni
MAX maksimalna vrijednost u koloni
COUNT prebrojavanje redova koji ispunjavaju odreeni uslov
Primjer 10.
SELECTmin(iznosplate)'Najmanja Plata',max(iznosplate)'Najvea Plata',avg(iznosplate)'Prosjena Plata'FROM plate
Rezultat ovog upita je:
________________________________________________________________________ 15
7/31/2019 Sem_rad_BP - Knezevic Marko
16/17
SEMINARSKI RAD Marko Knezevi
Primjer 11.
selectsum(iznosplate)'Ukupno Plate'from plate
Rezultat ovog upita je:
Primjer 12.
selectcount(ime)'Broj imena zaposlenih'from zaposleni
Rezultat ovog upita je:
3.3.3. Auriranje podataka u tabeli
SQL naredba kojom se vri auriranje podataka u tabeli je UPDATE.
Primjer 14.Zaposleni pod ifrom 14 je preao u drugo odjeljenje da radi, tj. iz odjeljenja 1 u
odjeljenje 4 i sada se to mora evidentirati u bazi podataka.
update zaposleniset odjeljenje#=4where zaposlenik#=14
Rezultat ovog upita je auriranje atributa odjeljenje# u tabelu zaposleni i za
zaposlenika sa ifrom 14 i tabela izgleda ovako:
3.3.4. Brisanje podataka iz tabele
Ukoliko elimo da obriemo neke podatke to radimo sa SQL naredbom DELETE.
Primjer 15.
________________________________________________________________________ 16
7/31/2019 Sem_rad_BP - Knezevic Marko
17/17
SEMINARSKI RAD Marko Knezevi
delete zaposleniwhere zaposlenik#=14
Sada je izbrisan zapis zaposlenika sa ifrom 14. Sa ovom naredbom treba biti obazriv,
jer ako jednom podatak obriemo ne moemo ga vratiti.
________________________________________________________________________ 17