Sem_rad_BP - Knezevic Marko

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