44
Normalizacija Када податке чувамо у фасциклама, обично имамо велики број поновљених ставки. Тако, када на пример као продавци чувамо податке о наруџбама, имаћемо евиденцију о купцима, поруџбеницама и копије рачуна. У тим папирима се подаци о купцу понављају три пута а подаци о купљеним ставкама два пута. Ако се у рачунару формира база података стриктно према описаној форми, имали бисмо исто понављање података.

Normalizacija i SQLPrimeri

Embed Size (px)

DESCRIPTION

Microsoft Acess

Citation preview

Page 1: Normalizacija i SQLPrimeri

Normalizacija

• Када податке чувамо у фасциклама, обично имамо велики број поновљених ставки. Тако, када на пример као продавци чувамо податке о наруџбама, имаћемо евиденцију о купцима, поруџбеницама и копије рачуна. У тим папирима се подаци о купцу понављају три пута а подаци о купљеним ставкама два пута. Ако се у рачунару формира база података стриктно према описаној форми, имали бисмо исто понављање података.

Page 2: Normalizacija i SQLPrimeri

Normalizacija

• Треба имати у виду да није у питању само штедња простора. Већи проблем представља одржавање интегритета података - ако у случају са дуплираним подацима треба да извршимо неку измену - рецимо измену адресе купца, морамо водити рачуна да ту измену унесемо на три места - у евиденцији купаца, у евиденцији поруџбина и евиденцији рачуна. Ова појава дуплирања података у бази се обично назива редунданца и по правилу се приликом пројектовања структуре базе избегава

Page 3: Normalizacija i SQLPrimeri

Normalizacija• Овај проблем се у релационој бази решава тако, што се

адреса са осталим подацима о купцима чувала само у једној табели, подаци о поруџбинама (без адресе и осталих података о купцима) у другој табели, а подаци о испорукама и рачунима у трећој.

• Процес преструктуирања података ради избегавања редунданце се назива нормализација. Основа за нормализацију је функционална зависност. Ту се подразумева груписање ставки у табеле на начин који ће обезбедити релацију "један према један" између појединих ставки. Тако на пример, у табели "Kupci", име и презиме, као и адреса купца су функционално зависни од атрибута "број купца" (kupac_br). Другим речима, имамо само једну вредност “ime", “prezime" и "аdresu" купца за један дати “broj kupca".

Page 4: Normalizacija i SQLPrimeri

Normalizacija• Процес нормализације се своди на растављање

сложене релације (табеле) у мање релације (табеле) које ће у сваком кораку бити у вишој нормалној форми.

• До данас је формално дефинисано пет нормалних форми. Углавном се при креирању база података само прве три практично користе. Свака виша нормална форма задовољава услове за нижу - тако на пример, релација која је у трећој нормалној форми, аутоматски је и у првој и другој нормалној форми. Обрнуто не важи, тј. релација која је у првој нормалној форми, биће и у другој нормалној форми само ако задовољи тест за другу нормалну форму.

Page 5: Normalizacija i SQLPrimeri

Normalizacija - Прва нормална форма (1НФ)Тест за прву нормалну форму представља проверу да ли сваки атрибут у релацији (колона у табели) има "атомизирану" вредност, тј. јединствену вредност као што је на пример "број купца", "име купца" и слично.

Пример:

narucba_br kupac_br datum_nar adresa_por stavka_br opis kolicina cena_ukup 1001 101 1.12.91 Beograd 12345 cipele 100 200.000 1001 101 1.12.91 Beograd 12346 patike 200 300.000

Као што се из горњег примера види, у табелама које су у првој

нормалној форми може се појавити редунданца - дуплирање података.

Page 6: Normalizacija i SQLPrimeri

Normalizacija –друга нормална форма (2НФ)

Тест којим се проверава да ли је табела, која је у првој нормалној форми уједно и у другој нормалној форми зависи од идентификације кључног атрибута у релацији (табели). Свака вредност кључа мора јединствено идентификовати ред у табели а сваки не-кључни атрибут мора зависити од кључа. У претходном примеру јасно је да ови услови нису задовољени. Тако на пример, “kolicina" и “cena_ukup" зависе од комбинације “narucba_br" и “stavka_br". Такође, “opis" практично зависи од шифре ставке (“stavka_br")

Page 7: Normalizacija i SQLPrimeri

Normalizacija –друга нормална форма (2НФ)

Према павилима за другу нормалну форму треба извршити декомпозицију на следећи начин:

Tabela Narucbenarucba_br kupac_br datum_nar adresa_pos1001 101 1.12.91 Beograd

Tabela Narucbe - Stavkenarucba_br stavka_br kolicina cena_ukup1001 12345 100 200.0001001 12346 200 300.000

Tabela Stavkestavka_br opis12345 cipele12346 patike

• У табели “Narucbe" кључ је поље “narucba_br"; кључ табеле “Narucbe - stavke" је комбинација поља “narucba_br" и “stavka_br" док је кључ у трећој табели поље “stavka_br".

• Разлог за раздвајање групе података у другој и трећој табели је да би се избегла редунданца услед понављања описа, што би се десило уколико би се иста ставка појавила у једној или више наручби

Page 8: Normalizacija i SQLPrimeri

Normalizacija –трећа нормална форма (3НФ)

Да би табела која је у другој нормалној форми задовољила и трећу нормалну форму, не сме постојати никаква зависност између некључних атрибута. Када погледамо претходне три табеле, видећемо да у првој постоји зависност података о адреси пошиљке од идентификационог броја купца (зависност “adresa_pos" од “kupac br"). Да би се задовољио услов за трећу нормалну форму, прву табелу треба поделити на следећи начин:

Tabela Narucbenarucba_br kupac_br datum_nar 1001 101 1.12.91

Tabela Kupcikupac_br adresa_pos 101 Beograd

Page 9: Normalizacija i SQLPrimeri

Normalizacija – трећа нормална форма (3НФ)

• Као што је напоменуто, у пракси се најчешће декомпозиција завршава на нивоу треће нормалне форме. Из наведеног примера се види да даља декомпозиција практично није могућа.

• Треба такође напоменути да примена наведених правила у великој мери зависи од конкретног случаја - функционалне зависности се често могу различито тумачити зависно од практичних потреба. На пример у случају адресе, поштански број и назив града су функционално зависни, међутим, из практичних разлога сигурно није згодно због тога адресу делити у две табеле.

• Нормализација базе је само један део процеса пројектовања базе који треба да обухвати и многе друге анализе. Често је потребно имати у виду и податке из других процеса који нису директно обухваћени базом. У сваком случају, врло је корисно развој базе података посматрати као динамички процес којим ће се база континуално усавршавати у складу са потребама.

Page 10: Normalizacija i SQLPrimeri

Upitni strukturni jezik - SQL

• Mogu ga koristiti krajnji korisnici• Interaktivo definisanje BP (DDL)• Manipulacija podacima (DML),

Stampanje izvestaja• AD-HOCK postavljanje pitanja• ANSII standard• Razvoj aplikacije ne zavisi od platforme

Page 11: Normalizacija i SQLPrimeri

Upit nad jednom tabelom SELECT kolona [,kolona...] FROM tabela

SELECT SIFRAO, NAZIVO, MESTOFROM ODELJENJE

SIFRAO NAZIVO MESTO 10 PRIPREMA PANCEVO 20 RAZVOJ N_SAD 30 PRODAJA BEOGRAD 40 PROIZVODNJA PAZOVA

SELECT *FROM RADNIK

SIFRAR PREZIME IME SI

FRARM:

JMBG RUKOV DATUMZ ZAPOSLENJA:

PLATA:

STIMUL SSS

SIFRAO

POL VRSTA:

827369 STEVIC ZORAN 01 1411952171033 827902 28/03/98 8000 600 20 M 2 827499 ALAGIC MILAN 02 2503964345612 827698 28/03/98 16000 600 30 M 827521 VUKIC MILOS 02 1130497055432 827698 28/03/98 12500 600 30 M 2 827566 JOVIC MIRA 03 1130497056435 827839 28/04/90 29750 700 20 Z 1 827654 MARTIC ZORA 02 1140496055444 827698 12/06/88 12500 1000 30 Z 1 827698 BOBIC IVAN 03 1405987055455 827839 15/11/89 28500 800 30 M 2 827782 CEBIC GORAN 03 1203970654566 827839 11/06/80 24500 500 10 M 2 827788 SUSIC ZORAN 04 1304954676755 827566 23/10/91 30000 650 20 M 2 827839 KLJAKIC STEVAN 05 1312952122344 827839 06/12/87 50000 600 10 M 2 827844 TUBIC MIRA 02 1312954342122 827698 08/03/78 15000 600 30 Z 1 827876 ALIMPIC PETAR 01 2503976343566 827788 09/05/92 11000 780 20 M 827900 JAKIC VLADAN 01 1211965457231 827698 28/03/90 9500 900 30 M 827902 FILIPIC DRAGAN 04 1210970534221 827566 20/11/96 30000 1000 20 M 2 827934 MILIC DRAGAN 01 0706956456465 827782 28/03/93 13000 790 10 M 2

Page 12: Normalizacija i SQLPrimeri

Izbor specificikovanih redova - klauzula WHERE

SELECT [DISTINCT] kolona [,kolona...]FROM tabela[WHERE uslov_selekcije]

Uslovi selekcije u WHERE klauzuli su: 

operatori poređenja (kao što su =, >, >=, <, <=), operatori ranga (BETWEEN i NOT BETWEEN),liste (IN, NOT IN),uzorci (LIKE i NOT LIKE),nepoznate vrednosti (IS NULL i IS NOT NULL), višestruki uslovi pretraživanja (AND,OR).

Page 13: Normalizacija i SQLPrimeri

Operatori poređenja

SELECT Sifrar, Prezime, Ime, Plata, Sifrao FROM RADNIK WHERE SIFRAO = '30'

Sifrar Prezime Ime Plata Sifrao

827499 ALAGIC MILAN 16000 30

827521 VUKIC MILOS 12500 30

827654 MARTIC ZORA 12500 30

827698 BOBIC IVAN 28500 30

827844 TUBIC MIRA 15000 30

827900 JAKIC VLADAN 9500 30

Page 14: Normalizacija i SQLPrimeri

Operatori ranga BETWEEN

SELECT PREZIME, PLATA FROM RADNIK WHERE PLATA BETWEEN 12000 AND 14000

PREZIME PLATAVUKIC 12500MARTIC 12500MILIC 13000

Operator BETWEEN omogućava da se izaberu redovi koji sadrže vrednosti u nekom rasponu, a koje je korisnik specifikovao.

Page 15: Normalizacija i SQLPrimeri

Operatori za liste IN

IN operator omogućava da se izaberu redovi koji sadrže

vrednost koja je jednaka jednoj od vrednosti navedene liste.

SELECT * FROM ODELJENJE WHERE SIFRA0 IN ('10','30')

WHERE SIFRAO = '10' OR SIFRAO = '30'

SIFRAO NAZIVO MESTO10 PRIPREMA PANCEVO30 PRODAJA BEOGRAD

Page 16: Normalizacija i SQLPrimeri

Operatori za definisanje uzoraka LIKE

Spisak svih radnika koji imaju " U" kao drugo slovo u prezimenu.

SELECT PREZIME FROM RADNIK WHERE PREZIME LIKE "?U*"

PREZIME

VUKIC

SUSIC

TUBIC

Page 17: Normalizacija i SQLPrimeri

Definisanje nepoznatih vrednosti IS NULL

Spisak svih radnika kojima nije definisana kolona Vrsta.

SELECT Prezime,Ime,VrstaFROM RADNIKWHERE VRSTA IS NULL;

Prezime Ime Vrsta

ALAGIC MILAN

ALIMPIC PETAR

JAKIC VLADAN

Page 18: Normalizacija i SQLPrimeri

Višestruki uslovi pretraživanja AND

SELECT PREZIME, SIFRARM, PLATA FROM RADNIK WHERE SIFRARM = '03' AND PLATA > 28000

Lista DIREKTORA (03), koju zarađuju više od 28000 dinara.

PREZIME SIFRARM PLATA

JOVIC 03 29750

BOBIC 03 28500

Page 19: Normalizacija i SQLPrimeri

Višestruki uslovi pretraživanja OR

SELECT PREZIME, SIFRARM, PLATA FROM RADNIK WHERE SIFRARM ='03' OR PLATA > 28000

Lista DIREKTORA (03), ili svih onih koji zara|uju više od 28000 dinara

PREZIME SIFRARM PLATAJOVIC 03 29750BOBIC 03 28500CEBIC 03 24500SUSIC 04 30000KLJAKIC 05 50000FILIPIC 04 30000

Page 20: Normalizacija i SQLPrimeri

Izračunavanje vrednosti u SELECT listi

SELECT PREZIME,PLATA,STIMUL,PLATA+STIMUL FROM RADNIK WHERE SIFRARM = '02'

Treba izlistati prezime, platu, stimulaciju i sumu plate i stimulacije za sve Radnike sa SIFRARM= '02'

SELECT PREZIME,PLATA,STIMUL,PLATA+STIMUL AS UKUPNO FROM RADNIK WHERE SIFRARM = '02'

PREZIME PLATA STIMUL UKUPNOALAGIC 16000 600 16600VUKIC 12500 600 13100MARTIC 12500 1000 13500TUBIC 15000 600 15600

Page 21: Normalizacija i SQLPrimeri

Sortiranje redova pomoću ORDER BY klauzule

ORDER BY klauzula kontroliše redosled prikazivanja redova.

SELECT [DISTINCT] kolona [,kolona...]FROM tabela[WHERE uslov-selekcije]ORDER BY (izraz|pozicija)[ASC | DESC]

SELECT PLATA, SIFRARM, PREZIME FROM RADNIK WHERE SIFRAO= '30' ORDER BY PLATA

PLATA SIFRARM PREZIME

9500 01 JAKIC12500 02 MARTIC12500 02 VUKIC15000 02 TUBIC16000 02 ALAGIC28500 03 BOBIC

Page 22: Normalizacija i SQLPrimeri

Korišćenje GROUP BY klauzule

GROUP BY klauzula logički deli tabelu na grupe n-torki tako da u okviru jedne grupe sve n-torke imaju istu vrednost zadate kolone. Ovim se omogućuje da funkcije za dobijanje sumarnih informacija budu primenjene na svaku ovakvu grupu posebno, umesto na celu tabelu. SELECT [DISTINCT] kolona [,kolona...]FROM tabela[WHERE uslov-selekcije][GROUP BY izraz {,izraz}]ORDER BY (izraz|pozicija)[ASC | DESC]

SELECT SIFRAO, MAX (PLATA) FROM RADNIK GROUP BY SIFRAO Rezultat SQL upita je:

SIFRAO MAX (PLATA)10 5000020 3000030 28500

Page 23: Normalizacija i SQLPrimeri

Korišćenje GROUP BY u okviru WHERE klauzule

Kada se koristi GROUP BY u okviru WHERE klauzule onda se redovi koji ne zadovoljavaju uslov u okviru WHERE klauzule eliminišu pre grupisanja.

SELECT SIFRARM, AVG (PLATA), COUNT (*)FROM RADNIK WHERE PLATA > 25000 GROUP BY SIFRARM;

Rezultat SQL upita je:

Sifrarm AVG (PLATA) COUNT (*)03 29125 204 30000 205 50000 1

Page 24: Normalizacija i SQLPrimeri

Korišćenje kombinacije GROUP BY i ORDER BY klauzula

SELECT SIFRARM, AVG (PLATA)FROM RADNIKGROUP BY SIFRARMORDER BY AVG (PLATA);

Rezultat SQL upita je:

Sifrarm: AVG (PLATA)01 1037502 1400003 2758304 3000005 50000

Page 25: Normalizacija i SQLPrimeri

Korišćenje HAVING klauzuleKlauzula HAVING ima zadatak da specificira uslove pretra`ivanja u okviru GROUP BY klauzule.

SELECT [DISTINCT] kolona [,kolona...]FROM tabela[WHERE uslov-selekcije][GROUP BY izraz {,izraz}][HAVING grupni uslov]ORDER BY (izraz|pozicija)[ASC | DESC]

Treba prikazati šifru odeljenja i srednju aritmetičku vrednost za odeljenje koje ima više od tri zaposlena radnika u odeljenju korišćenjem HAVING klauzule.

SELECT SIFRAO, AVG (PLATA)FROM RADNIKGROUP BY SIFRAOHAVING COUNT (*) > 3;Sifrao AVG (PLATA)20 18125.230 15666.7

Page 26: Normalizacija i SQLPrimeri

Grupni upiti SELECT COUNT (*) FROM RADNIK WHERE SIFRAO = '20'

COUNT (*)6

SELECT AVG (PLATA)AS SREDNJA_ARIT_VRED FROM RADNIK

SREDNJA_ARIT_VRED19350,066

SELECT SUM (PLATA) FROM RADNIK WHERE SIFRARM='02'

SUM (PLATA)56000

SELECT MIN (PLATA) FROM RADNIK WHERE SIFRARM='02'

MIN (PLATA)12500

SELECT MAX (PLATA) FROM RADNIK WHERE SIFRARM='02'

MAX (PLATA)16000

Page 27: Normalizacija i SQLPrimeri

Podupit sa povratkom jednog redaPodupit sa povratkom jednog reda treba posmatrati kroz primer definisanja najmanje plate u tabeli ODELJENJE. Podupiti se re{avaju u dva koraka: Prvo se nalazi ninimalna plata u tabeli RADNIK: SELECT MIN (PLATA) FROM RADNIK

MIN (PLATA)8000Drugi korak je da se na|e ime Radnika i posao sa najmanjom platom u tabeli RADNIK korišćenjem ugnježdenog podupita: SELECT PREZIME,SIFRARM,PLATA FROM RADNIK WHERE PLATA = (SELECT MIN (PLATA) FROM RADNIK) PREZIME SIFRARM PLATASTEVIC 01 8000

Za podupit sa povratkom jednog reda koriste se komparacioni ili logi~ki operatori: =, <, >, <= i dr.

Page 28: Normalizacija i SQLPrimeri

Podupit sa povratkom skupa vrednosti (više redova)

Lista svih zaposlenih sa istim zanimanjem kao radnik JOVIC u tabeli RADNIK SELECT PREZIME,SIFRARM FROM RADNIK WHERE SIFRARM=

(SELECT SIFRARM FROM RADNIK WHERE PREZIME = 'JOVIC')

PREZIME SIFRARMJOVIC 03BOBIC 03CEBIC 03

Page 29: Normalizacija i SQLPrimeri

Podupit sa povratkom skupa vrednosti (više redova)

Izlistati sve Radnike koji zara|uju više od proseka SELECT PREZIME,PLATA FROM RADNIK WHERE PLATA >

(SELECT AVG (PLATA) FROM RADNIK)

PREZIME PLATAJOVIC 29750BOBIC 28500CEBIC 24500SUSIC 30000KLJAKIC 50000FILIPIC 30000

Page 30: Normalizacija i SQLPrimeri

Podupit sa operatoroma IN

Lista Radnika u odeljenju 10 sa istim SIFRARM u odnosu na odeljenje 30: SELECT PREZIME,SIFRARM FROM RADNIK WHERE SIFRAO= '10' AND SIFRARM IN (SELECT SIFRARM FROM RADNIK WHERE SIFRAO= '30')

PREZIME SIFRARMCEBIC 03MILIC 01

Page 31: Normalizacija i SQLPrimeri

Višestepeni podupitiTreba izlistati radnike koji rade isti posao kao JOVIC ili imaju platu koja je ve}a od plate ili jednaka kao plata FILIPIC, i to u rastućem nizu SIFRARM i PLATA: SELECT PREZIME, SIFRARM, SIFRAO, PLATA FROM RADNIK WHERE SIFRARM = (SELECT SIFRARM FROM RADNIK WHERE PREZIME=' JOVIC') OR PLATA > (SELECT PLATA FROM RADNIK WHERE PREZIME= 'FILIPIC') ORDER BY SIFRAO, PLATA

PREZIME SIFRARM SIFRAO PLATAKLJAKIC 05 10 50000

Page 32: Normalizacija i SQLPrimeri

Povezivanje više tabela (JOIN )

Spajanje na jednakost (Equal Join),Korišćenje grupnih funkcuja u JOIN-u,Spajanje na osnovu nejednakosti (Not- Equal Join),Spajanje sa samim sobom (self- Join),Spoljno spajanje (Other Join).

Page 33: Normalizacija i SQLPrimeri

Spajanje na jednakost (Equal Join)

SELECT PREZIME,MESTO FROM RADNIK,ODELJENJE WHERE PREZIME = 'ALAGIC' AND RADNIK.SIFRAO = ODELJENJE.SIFRAO

PREZIME MESTOALAGIC BEOGRAD

Page 34: Normalizacija i SQLPrimeri

Korišćenje grupnih funkcuja u JOIN-uNa primer, na kom je SIFRARM mestu i koliko je radnika radilo (COUNT) na svakom od poslova u svakom odeljenju, kao i kolike su suma (SUM) i prose~na plata (AVG) u ovako formiranim grupama.

SELECT NAZIVO,SIFRARM,SUM (PLATA),COUNT(*),AVG(PLATA) FROM RADNIK,ODELJENJE WHERE RADNIK.SIFRAO = ODELJENJE.SIFRAO GROUP BY NAZIVO,SIFRARM

NAZIVO SIFRARM SUM(PLATA) COUNT (*)AVG(PLATA)PRIPREMA 01 13000 1 13000PRIPREMA 03 24500 1 24500PRIPREMA 05 50000 1 50000PRODAJA 01 9500 1 9500PRODAJA 02 56000 4 14000PRODAJA 03 28500 1 28500RAZVOJ 01 19001 3 6333,67RAZVOJ 03 29750 1 29750RAZVOJ 04 60000 2 30000

Page 35: Normalizacija i SQLPrimeri

Korišćenje HAVING klauzule

U sledećem primeru biće prikazani poslovi koje obavljaju više ili najmanje dva radnika u svakom odeljenju korišćenjem HAVING klauzule.

SELECT NAZIVO,SIFRARM,SUM (PLATA)COUNT (*), AVG (PLATA) FROM RADNIK,ODELJENJE WHERE RADNIK.SIFRAO =ODELJENJE.SIFRAO GROUP BY NAZIVO,SIFRARM HAVING COUNT (*) >= 2

NAZIVO SIFRARM SUM(PLATA) COUNT(*) AVG(PLATA)

PRODAJA 02 56000 4 14000RAZVOJ 01 19001 3 6333,6RAZVOJ 04 60000 2 30000

Page 36: Normalizacija i SQLPrimeri

Spajanje tabele sa samom sobom (Self Join)

SELECT PODR.PREZIME,PODR.SIFRARM, PODR.RUKOV, NADR.SIFRAR AS SEF, NADR.PREZIME, NADR.SIFRARM FROM RADNIK PODR, RADNIK NADR WHERE PODR.RUKOV = NADR.SIFRAR

PREZIME SIFRARM RUKOV SIFRAO PREZIME SIFRARM:SUSIC 04 827566 827566 JOVIC 03FILIPIC 04 827566 827566 JOVIC 03ALAGIC 02 827698 827698 BOBIC 03VUKIC 02 827698 827698 BOBIC 03MARTIC 02 827698 827698 BOBIC 03TUBIC 02 827698 827698 BOBIC 03JAKIC 01 827698 827698 BOBIC 03MILIC 01 827782 827782 CEBIC 03ALIMPIC 01 827788 827788 SUSIC 04JOVIC 03 827839 827839 KLJAKIC 05BOBIC 03 827839 827839 KLJAKIC 05CEBIC 03 827839 827839 KLJAKIC 05KLJAKIC 05 827839 827839 KLJAKIC 05STEVIC 01 827902 827902 FILIPIC 04

Page 37: Normalizacija i SQLPrimeri

Spoljno spajanje (Other Join) Left Join Spoljnim spajanjem Left Join biraju se svi redovi iz prve tabele i samo oni redovi iz druge tabele čiji se sadržaj veznih polja jednak sa sadr`ajem u prvoj tabeli. Ovu konstataciju treba posmatrati kroz sledeći primer.

SELECT NAZIVO, PREZIME, SIFRARM, PLATAFROM ODELJENJE LEFT JOIN RADNIK ON RADNIK.SIFRAO = ODELJENJE.SIFRAO

Nazivo Prezime Sifrarm: PlataPRIPREMA CEBIC 03 24500PRIPREMA KLJAKIC 05 50000PRIPREMA MILIC 01 13000RAZVOJ STEVIC 01 8000RAZVOJ JOVIC 03 29750RAZVOJ SUSIC 04 30000RAZVOJ ALIMPIC 01 11000RAZVOJ FILIPIC 04 30000PRODAJA ALAGIC 02 16000PRODAJA VUKIC 02 12500PRODAJA MARTIC 02 12500PRODAJA BOBIC 03 28500PRODAJA TUBIC 02 15000PRODAJA JAKIC 01 9500PROIZVODNJA

Može se primetiti da odeljenje PROIZVODNJA nema radnike, ali da je i ono uzeto u razmatranje, jer je postavljen uslov da se uzimaju svi redovi prve tabele (ODELJENJE), bez obzira na to da li imaju sprezanje.

Page 38: Normalizacija i SQLPrimeri

Spoljnim spajanjem Right Joinbiraju se svi redovi iz druge tabele i samo oni redovi iz prve tabele čiji je sadržaj veznih polja jednak sadr`aju veznih polja druge tabele. Da bi se prikazao primer i za ovaj oblik spoljnog spajanja, samo treba promeniti redosled tabela, pa je sada tabela sa desne strane ODELJENJE.

SELECT NAZIVO, PREZIME, SIFRARM, PLATAFROM RADNIK RIGHT JOIN ODELJENJE ON RADNIK.SIFRAO = ODELJENJE.SIFRAO

Nazivo Prezime Sifrarm Plata:PRIPREMA CEBIC 03 24500PRIPREMA KLJAKIC 05 50000PRIPREMA MILIC 01 13000RAZVOJ STEVIC 01 8000RAZVOJ JOVIC 03 29750RAZVOJ SUSIC 04 30000RAZVOJ ALIMPIC 01 11000RAZVOJ FILIPIC 04 30000PRODAJA ALAGIC 02 16000PRODAJA VUKIC 02 12500PRODAJA MARTIC 02 12500PRODAJA BOBIC 03 28500PRODAJA TUBIC 02 15000PRODAJA JAKIC 01 9500PROIZVODNJA

Mo`e se primetiti da odeljenje 40 PROIZVODNJA nema radnike ali da je i ono uzeto u razmatranje, jer je postavljen uslov da se uzimaju svi redovi druge (ODELJENJE) tabele bez obzira da li imaju sprezanje.

Page 39: Normalizacija i SQLPrimeri

Spajanje korišćenjem operatora UNION

Na primer, u okviru tabele RADNIK treba izdvojiti zajednička radna mesta u odeljenju 10 i 30.

SELECT SIFRARMFROM RADNIKWHERE Sifrao = '10'UNION SELECT SIFRARMFROM RADNIKWHERE Sifrao = '30'

SIFRARM01020305

Page 40: Normalizacija i SQLPrimeri

Održavanje baze podatakaUbacivanje redova u tabelu-INSERT

Naredba za dodavanje jednog sloga ima sledeću sintaksu:INSERT INTO tabela [ (kolona,kolona,...)‚ VALUES (vrednost,vrednost,...)] Za unos podataka naredba INSERT se može definisati u dve varijante:varijanta NE definisanjem kolone u koju se unose vrednosti preko VALUES INSERT INTO ODELJENJE VALUES ('50', 'NABAVKA', 'CACAK') varijanta SA definisanjem kolone u koju se unose vrednosti preko VALUES INSERT INTO ODELJENJE (SIFRAO, NAZIVO, MESTO) VALUES ('50', 'NABAVKA', 'CACAK')

Ako se želi dodati istovremeno više slogova, onda naredba INSERT INTO ima sledeću sintaksu:INSERT INTO tabela [ (kolona,kolona,..)‚ SELECT kolona, kolona... FROM tabela Za definisani primer piše se:INSERT INTO ODELJENJE ( SIFRAO, NAZIVO, MESTO )SELECT '50', 'NABAVKA', 'CACAK' FROM RADNIK

Page 41: Normalizacija i SQLPrimeri

Izmena vrednosti memorisanih u poljima-UPDATE

Naredba UPDATE koristi se za kreiranje upita sa kojim se može izvršiti promena vrednosti podataka u poljima tabele.Sintaksa ove naredbe je: UPDATE tabela alias SET kolona ,kolona...]=izraz, podupit WHERE uslov

Ako se uzme već poznata tabela RADNIK i doda svim radnicima sa zanimanjem 04 (PROJEKTANT) po 100 dinara povećanja zarade, to iziskuje izvršenje UPDATE naredbe, na sledeći način: UPDATE RADNIKSET PLATA = PLATA + 100WHERE SIFRARM = '04'

Page 42: Normalizacija i SQLPrimeri

Dodavanje nove kolone postojećoj tabeli-ALTER TABLE

ALTER TABLE naziv ADD (tip kolone [ogranicenja‚])

ALTER TABLE RADNIK ADD SIF TEXT (3)

Page 43: Normalizacija i SQLPrimeri

Brisanje redova iz tabele-DELETE

Naredbom DELETE brišu se redovi iz jedne ili više tabela preko liste u okviru FROM dela rečenice, ali koji zadovoljavaju uslov definisan pod WHERE delom rečenice.Sintaksa ove naredbe je:

DELETE FROM tabela WHERE uslovKako u odeljenju 40 (tabela ODELJENJE) nema zaposlenih (tabela RADNIK) može se brisati na slede}i način:

DELETE FROM ODELJENJE WHERE SIFRAO = '40'

Page 44: Normalizacija i SQLPrimeri

Brisanje tabela- DROP TABLE

Ukoliko se želi izbrisati cela tabela, koristi se naredba DROP TABLE.

Sintaksa ove naredbe je:

DROP TABLE naziv tabele

Ako se želi izbrisati tabela HPOSAO, piše se:

DROP TABLE HPOSAONa taj način briše se definicija tabele iz baze podataka zajedno sa podacima koje tabela sadrži; naredbu DROP može izvesti samo onaj ko je kreirao tabelu ili ima DBA privilegiju.