You are on page 1of 47

Sveuilite Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

SQL baze podataka


Stjepan Poljak Josip Mikolaevi Zvonimir Ivanevi Slobodan Jeli

UVOD U SQL - SQL Structured Query Language - strukturirani jezik za upite - povjest SQL-a poinje 1970. godine kada je razvijen u IBM-ovom istraivakom laboratoriju u San Joseu-u, California. - slaba razvijenost do 80-tih godina. - 1981. godine SQL/DS a zatim se pojavljuju sustavi baza podataka Oracle i Reational Technology. - do 1989. godine 70-ak razliitih verzija SQL sustava - 1989. godine proirenje standarda pa nastaje SQL-89 uvoenje referencijskog integriteta. - 1992. godine SQL-2 ili SQL-92 proirenje standarda u pisanoj formi ( broj stranica ) vie od 4 puta nego u ranijoj verziji. - 1999. godine objavljen SQL-3 ili SQL-99 s novim mogunostima

Sam SQL opisuje to elimo dobiti kao rezultat, a ne kako doi do toga i to ga svrstava u neproceduralne programske jezike za razliku od npr. C programskog jezika. SQL je stvoren za rad sa relacijskim bazama podataka za koje dr. Codd 1970. godine iznosi 12 Coddovih pravila ( objavljenih u lanku A Relational of Data for Large Shared Data Banks ). SQL omoguava da tvorimo i promjenimo strukturu baze podataka, dodamo prava korisniku za pristup bazama podataka ili tablicama, da traimo informacije od baze podataka i da mjenjamo sadraj baze podataka. Za to imamo dvije vrste funkcija. - DDL ( Data Definition Language ) funkcija za definiciju podataka iji je tipian primjer naredba CREATE TABLE imeTablice(); - DML ( Data Manipulation Table ) funkcija za upravljanje podacima gdje se kao primjer moe navesti osnovna SQL naredba SELECT*FROM imeTablice

- Pristup podacima odvija se prema modelu klijent/posluitelj To je po Bernardu H. Boar autoru knjige Implementing Client/server Computing, definirano kao: Model rada u kojem je jedna aplikacija podjeljena izmeu vie procesa koji komuniciraju (transparentno prema korisnikom kraju) da bi zavrili procesiranje kao jedan jedinstveni zadatak. Klijent/posluitelj model vezuje procese da bi se dobila slika jedinstvenog sustava. Djeljivi resursi su pozicionirani klijenti koji imaju zahtjeve i mogu pristupiti ovlatenim servisima. Arhitektura je beskonano rekurzivna; pa posluitelji mogu postati klijenti i zahtijevati usluge od drugih posluitelja u mrei, itd..

TABLICE

Tablice predstavljaju dvodimenzionalne matrice iji redovi predstavljaju naziv i svojstvo objekata pohranjenih u tablicu, a stupci svojstva objekata izraena odgovarajuim tipom podataka. Uz pomo jedne n-torke opisali smo jedan objekt. npr:
MATINI BROJ IME PREZIME ULICA MJESTO

0102968383911

Pero

Peri

Gajeva 3

Zagreb

0302982383818

Ivan

Ivi

Poega

0305972383915

Marko

Mari

Divaltova 67

Osijek

Kako u SQL-u kreirati tablicu?????????


CREATE TABLE osoba ( maticni broj NVARCHAR(15), ime NVARCHAR(15) NOT NULL, prezime NVARCHAR(15) NOT NULL, ulica NVARCHAR(25), mjesto NVARCHAR(15) DEFAULT Zagreb PRIMARY KEY (maticni broj) );

PRIVREMENE TABLICE Privremene tablice su posebna vrsta tablica. One postoje samo za vrijeme dok smo prijavljeni na server. Koristimo ih za pohranjivanje rezultata nekakvih kompliciranih izraza a te rezultate mislimo koristiti u kasnijim izrazima upita ili kad je potrebno neto napraviti u vie odvojenih koraka. Tipian primjer je kreiranje tablice iste kao neka postojea u naem sluaju tablica osoba. Sada bi na toj novoj tablici mogli objavljivati razliite upite, brisanja, raunanja i na samome kraju to usporediti s neime drugim.

Primjer kreiranja privremene tablice!!!!!;)


CREATE TABLE #privremenaosoba ( maticni broj NVARCHAR(15), ime NVARCHAR(15) NOT NULL, prezime NVARCHAR(15) NOT NULL, ulica NVARCHAR(25), mjesto NVARCHAR(15) DEFAULT Zagreb PRIMARY KEY (maticni broj) );

Naredbe SQL jezika


SQL DDL (engl. Data Definition Language) Definicija objekata u bazi podataka CREATE - kreiranje objekata baze DROP - uklanjanje objekata baze ALTER - izmjena definicije objekata baze GRANT - definiranje prava pristupa podacima REVOKE - uklanjanje definicije prava pristupa podacima

CREATE TABLE
Definiranje nove relacije, odnosno opis njene relacijske sheme (tablice)
U proirenoj sintaksi mogue je definirati ogranienja (CONSTRAINT) PRIMARY KEY (primarni klju tablice) UNIQUE (jedinstveni klju tablice) FOREIGN KEY (strani klju tablice, referencijalni integritet) definira se atribut (ili skup atributa) promatrane tablice koji se referenciraju na primarni klju iste ili neke druge tablice

Primjer:
CREATE TABLE grad( pbr SMALLINT, naziv VARCHAR(50), CONSTRAINT grad_pk PRIMARY KEY(pbr) );

CREATE TABLE stanovnici( jmbg INT, "ime osobe" VARCHAR(30) NOT NULL, "prezime osobe" VARCHAR(30) NOT NULL, pbr SMALLINT, adresa VARCHAR(100) NOT NULL, CONSTRAINT stanovnici_pk PRIMARY KEY(jmbg), CONSTRAINT stanovnici_fk_grad FOREIGN KEY(pbr) REFERENCES grad(pbr) );

grad
pbr naziv

stanovnici
jmbg ime osobe prezime osobe pbr adresa

DROP TABLE
Uklanjanje (brisanje) relacije iz baze podataka Za razliku od DELETE koja izbacuje samo n-torke iz relacije, ova naredba izbacuje i definiciju relacije pa relacija i njena relacijska shema vie ne postoji Sintaksa: DROP TABLE table_name

Primjer: DROP TABLE osobe

ALTER TABLE
Izmjena definicije postojee relacije
Dodavanje atributa: ALTER TABLE stanovnici ADD

dat_rod DATETIME;

Uklanjanje atributa: ALTER TABLE radno_mjesto DROP COLUMN broj_zaposlenih; Izmjena postojeih atributa: ALTER TABLE racuni ALTER COLUMN nacin_placanja CHAR(1);

Vlasnik relacije je uvijek korisnik koji ju je definirao naredbom CREATE TABLE, a pravo na izvravaje SQL naredbi i kreiranje objekata vlasnik na druge osobe prenosi naredbom GRANT Za naredbe DDL-a primjeri: GRANT CREATE TABLE, CREATE VIEW TO korisnik; GRANT CREATE PROCEDURE TO korisnik; Za naredbe DML-a primjeri: GRANT SELECT ON student TO stuslu; GRANT SELECT(ime_stud, prez_stud) ON student TO korisnik; GRANT DELETE ON mjesto TO korisnik;

GRANT

REVOKE
Oduzimanje prava korisnicima na izvravanje SQL naredbi i/ili kreiranje objekata (suprotno od naredbe GRANT) Sintaksa za naredbe
REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ]

Sintaksa za objekte

REVOKE [ GRANT OPTION FOR ] { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } { TO | FROM } security_account [ ,...n ] [ CASCADE ] [ AS { group | role } ]

Data Manipulation Language


Data Manipulation Language ili DML je podskup jezika koristen za dodavanje, brisanje ili mijenjanje podataka naredbe: SELECT, UPDATE, INSERT, DELETE, MERGE

SELECT
vraca skup rezultata iz zapisa jedne ili vise tablica koristi se za dobijanje nijednog ili vise redaka iz jedne ili vise glavnih tablica, privremenih tablica ili pogleda iz baze podataka pri SELECT upitu korisnik definira opis zeljenog skupa rezultata, ali ne definira koje ce fizicke operacije biti obavljene za dobivanje tog rezultata

naredbe koje se koriste uz SELECT: WHERE definira redove koji se traze GROUP BY koristi se za kombiniranje redova sa srodnim vrijednostima u elemente sa manjim skupom redaka HAVING definira koji se redovi (traze) uz GROUP BY ORDER BY definira koji se stupci koriste za sortiranje rezultata

UPDATE
koristi se za promjenu vrijednosti u postojecem redu ili redovima neki nacini koristenja: UPDATE tablica SET stupac=vrijednost UPDATE tablica SET stupac=vrijednost WHERE neki_uvjet Zadnji primjer pokazuje mijenjanje vrijednosti uz neki uvjet, dakle mozemo staviti npr. WHERE stupac= OR stupac IS NULL tada UPDATE promijeni vrijednosti samo onih redova koji imaju taj stupac prazan

DELETE
koristi se za brisanje podataka neki nacini koristenja: DELETE FROM tablica DELETE FROM tablica WHERE stupac=vrijednost prvi primjer je za brisanje redova u tablici (ne smije biti vezana za neki osnovni/strani kljuc) drugi primjer je za brisanje redova uz uvjet da im je stupac jednak vrijednost

INSERT
koristi se za unosenje podataka u tablicu, red po red; vrijednosti koje se unose moraju biti istog tipa podataka kao polja u koja ih unosimo i moraju odgovarati velicini kolone neki nacini koristenja: INSERT INTO tablica VALUES (vrijednost 1, ... , vrijednost n) INSERT INTO tablica (stupac_1, ... , stupac_n) VALUES (vrijednost 1, ... , vrijednost n)

oba primjera predstavljaju isti kod samo napisan na drugi nacin: za unosenje vrijednosti (od 1 do n) u stupce (od 1 do n) moguce je unositi podatke i koristeci kombinaciju naredbi INSERT i SELECT INSERT INTO tablica SELECT stupac_1, ... ,stupac_n primjer pokazuje kako u tablici dodati podatke iz neke druge tablice

MERGE
koristi se za kombinaciju podataka iz vise tablica vrsta kombinacije INSERT i UPDATE elemenata definirana po SQL:2003 standardima, iako neke baze podataka pruzaju slicnu funkcionalnost preko drugacije sintakse, koja se nekad zove upsert sintaksa koristenja naredbe MERGE: MERGE INTO tablica USING tablica ON (uvjet)

INDEKSI

Ako ne postoji nikakav indeks SQL server pristupa i skladiti podatke za due vremensko razdoblje nego kada postoje indeksi (skup podataka bez indekasa naziva se hrpa). Kod pristupa tako spremljenim podacima, SQL server mora sekvencijalno pretraivati tablicu. Tablici se mogu pridruiti dva tipa indeksa i to grupirajui i negrupirajui. Grupirajui indeksi mjenjaju fiziki raspored podataka u bazi pomou kojega se ubrzava pristup podacima. Negrupirajui indeksi. Ovi indeksi ne mjenjaju fiziki raspored podataka u bazi, ve odravaju pokazae ka samim podacima. Postoje i dvije metode pravljenja indeksa. Prvi je grafiki pomou Eneterprise Managera a drugi je koritenje arobnjaka index Tuning.

- Formiranje indeksa po atributu IME_PREZIME relacije trgovac CREATE INDEX IME_INDEX ON TRGOVAC(IME_PREZIME); - Formiranje jedinstvenog indeksa po atributu MB relacije CREATE UNIQUE INDEX MB_INDEX ON TRGOVAC (MB); - Naredba DROP INDEX slui za izbacivanje postojeeg indexa i baze podataka i njegove definicije iz kataloga podataka. DROP INDEX IME_INDEX; ( izbacuje se postojei indeks IME_INDEKS relacije TRGOVAC)

UPITI (Queries)

jedna od najmonijih osobina SQL baza podataka povezivanje tabela dohvaanje podataka po zadanim kriterijima komande koje rade sljedee:

kreiranje i uklanjanje tabela dodavanje, mijenjanje ili uklanjanje redaka i polja pretraivanje vie tabela radi pronalaenja odreenih informacija mijenjanje informacija o zatiti

Primjer 1.
SELECT U.Ime, U.Prezime, U.JMBG, U.[Datum sklapanja radnog ugovora], U.[Mjesena plaa] FROM Uposlenik AS U WHERE [Mjesena plaa]>=1000;

Bezuvjetno spajanje tabela

cilj SQL upita: manipuliranje podacima iz vie tabela BEZUVJETNO SPAJANJE TABELA = Kartezijev produkt redaka iz svih tabela koje elimo spojiti
SELECT * FROM Tabela1, Tabela2;

Redak redak1

Oznaka tabela1

Redak redak1

Oznaka tabela2

redak2
redak3

tabela1
tabela1

redak2
redak3

tabela2
tabela2

Redak redak1 redak1 redak1 redak2 redak2 redak2 redak3

Oznaka tabela1 tabela1 tabela1 tabela1 tabela1 tabela1 tabela1

Redak redak1 redak2 redak3 redak1 redak2 redak3 redak1

Oznaka tabela2 tabela2 tabela2 tabela2 tabela2 tabela2 tabela2

redak3
redak3

tabela1
tabela1

redak2
redak3

tabela2
tabela2

R r1 , r2 , r3 , T t1 , t2 , t3

R T r1 , t1 , r1 , t2 , r1 , t3 , r2 , t1 , r2 , t2 , r2 , t3 , r3 , t1 , r3 , t2 , r3 , t3

R T

= Kartezijev produkt skupova R i T

Spajanje tabela po uvjetu jednakosti


bezuvjetno spajanje rijetko se koristi uglavnom je zadan uvjet po kojemu se tabele spajaju jedan od uvjeta je i JEDNAKOST

Primjer 2. SELECT Lijek.[Bar-kod], Lijek.Naziv, Proizvoa.Naziv FROM Lijek, Proizvoa WHERE Lijek.Proizvoa=Proizvoa.ifra;

UVJET JEDNAKOSTI

Lijek.Proizvoa = Proizvoa.ifra

LIJEK - PROIZVOA

Unutarnji spojevi (INNER JOINS)


slue za uitavanje zapisa iz vie tabela da bi dao jedan skup zapisa naredba JOIN spaja tabele na osnovu zajednikog stupca i daje zapise ije se vrijednosti poklapaju u spojenim tabelama
Primjer 3. SELECT Lijek.[Bar-kod], Lijek.Naziv, Proizvoa.Naziv FROM Proizvoa INNER JOIN Lijek ON Proizvoa.ifra=Lijek.Proizvoa;

proizvoaima u tabeli Proizvoa pridruuju se lijekovi koje oni proizvode a nalaze se u tabeli Lijek proizvoai koji nisu proizveli niti jedan lijek u tabeli Lijek ne nalaze se u rezultatu

Spoljanji spojevi (OUTER JOINS)

postoje tri vrste spoljanjih spojeva:


DESNI SPOLJANJI SPOJ LIJEVI SPOLJANJI SPOJ POTPUNI SPOLJANJI SPOJ

Desni spoljanji spoj (RIGHT OUTER JOIN ili RIGHT JOIN)

uvijek vee zapise iz tabele s desne strane odredbe JOIN sa zapisima iz tabele s lijeve strane
Primjer 4.
SELECT [Bar-kod], Lijek.Naziv, Proizvoa.Naziv FROM Proizvoa RIGHT JOIN Lijek ON Proizvoa.ifra=Lijek.Proizvoa;

Lijevi spoljanji spoj (LEFT OUTER JOIN ili LEFT JOIN)

uvijek vee zapise iz tabele s lijeve strane odredbe JOIN sa zapisima iz tabele s desne strane
Primjer 5. SELECT [Bar-kod], Lijek.Naziv, Proizvoa.Naziv FROM Proizvoa LEFT JOIN Lijek ON Proizvoa.ifra=Lijek.Proizvoa;

Potpuni spoljanji spoj (FULL OUTER JOIN ili OUTER JOIN)


koristimo ga kada elimo vidjeti sve zapise iz obje tabele

Spajanje vie tabela

Zadatak: Ispisati sve lijekove zajedno sa njihovim farmaceutskim oblicima

PROBLEM: umjesto naziva - nalazi se ifra

Rjeenje: Spojiti tabele Lijek, Farmaceutski oblik, Kratica Farmaceutski oblik

Primjer 6.
SELECT Lijek.[Bar-kod], Lijek.Naziv, [Kratica - Farmaceutski oblik].[ifrirani pojam] FROM ([Kratica - Farmaceutski oblik] INNER JOIN [Farmaceutski oblik] ON [Kratica - Farmaceutski oblik].ifra=[Farmaceutski oblik].Naziv) INNER JOIN Lijek ON [Farmaceutski oblik].ifra=Lijek.[Farmaceutski oblik];

Postoje samo kao definicije upita nad jednom ili vie tablica
ne uvaju podatke u sebi (prividne relacije bez vlastitih podataka)

Pogledi

Omoguuju
prilagodbu logikog modela podataka specifinim potrebama korisnika provoenje zatite protiv neovlatenog pristupa podacima

Izvravaju se u trenutku upita pomou naredbe CREATE VIEW Pogled se brie naredbom DROP VIEW

CREATE VIEW
Kreiranje pogleda Sintaksa:

CREATE VIEW [< owner > . ] view_name [ ( column [ ,...n ] ) ] AS select_statement CREATE SELECT FROM WHERE VIEW muski_studenti AS mbr_stud, ime_stud, prez_stud student spol = 'M';

Primjer:

Procedure
procedura je upit koji se cuva u bazi podataka pisanje procedure se zapocinje sa CREATE PROCEDURE ime_procedure AS programski_kod pozivanje procedure se obavlja sa EXEC ime_procedure moze biti bez ili sa ulaznim parametrima

prednosti: smanjuje promet kroz mrezu (sacuvane su na posluzitelju) promjene se stoga obavljaju samo na jednom mjestu

USKLADITENE PROCEDURE (eng. Stored Procedures)


Upit koji se uva u SQL Server-ovoj bazi podataka, nije ugraena u osnovne komponente aplikacija na klijentskim raunalima Osnovni cilj:
Poveanje brzine prijenosa podataka unutar mree Prevoenje upita povezivanje tabela

SELECT Lijek.[Bar-kod], Lijek.Naziv, Lijek.Cijena FROM Lijek INNER JOIN ([Farmakoterapijska skupina] INNER JOIN [Specifikacija FSL] ON [Farmakoterapijska skupina].ifra=[Specifikacija FSL].ifra) ON Lijek.Kod=[Specifikacija FSL].Kod WHERE ((([Farmakoterapijska skupina].Naziv)="Analgetik")) ORDER BY Lijek.Naziv;

Problem: uestalo slanje upita serveru od strane klijenta = zaguenje mree, gubljenje dijelova upita, ponovno slanje

Rijeenje: USKLADITENE PROCEDURE


Upit velikog prometa pohraniti na server kao uskladitenu proceduru SQL Server-u proslijediti samo naziv uskladitene procedure

Sintaksa: EXEC ime_uskladitene_procedure

Uskladitene procedure bez ulaznih parametara


nema prosljeivanja parametara zahtjeva dodatnu sintaksu za definiranje uskladitene procedure


CREATE PROCEDURE DBO.Analgetici AS SELECT Lijek.[Bar-kod], Lijek.Naziv, Lijek.Cijena FROM Lijek INNER JOIN ([Farmakoterapijska skupina] INNER JOIN [Specifikacija FSL] ON [Farmakoterapijska skupina].ifra=[Specifikacija FSL].ifra) ON Lijek.Kod=[Specifikacija FSL].Kod WHERE ((([Farmakoterapijska skupina].Naziv)="Analgetik")) ORDER BY Lijek.Naziv;

poziv procedure (implementacija: MS SQL Server 2000)


USE Ljekarna EXEC Analgetici

Uskladitene procedure sa ulaznim parametrima

Problem: to ako korisnik eli spisak lijekova iz neke druge farmakoterapijske skupine (a ne analgetike kao u prethodnom primjeru)? Rjeenje: Uskladitena procedura sa ulaznim parametrima potrebno je definirati ulaznu varijablu
CREATE PROCEDURE DBO.SkupinaL @skupina varchar(30) AS SELECT Lijek.[Bar-kod], Lijek.Naziv, Lijek.Cijena FROM Lijek INNER JOIN ([Farmakoterapijska skupina] INNER JOIN [Specifikacija FSL] ON [Farmakoterapijska skupina].ifra=[Specifikacija FSL].ifra) @skupina @varchar(30) = Analgetik ON Lijek.Kod=[Specifikacija FSL].Kod WHERE ((([Farmakoterapijska skupina].Naziv)=@skupina)) ORDER BY Lijek.Naziv;

poziv procedure (implementacija: MS SQL Server 2000)


USE Ljekarna EXEC SkupinaL Antipiretik

OKIDAI (engl. Triggers)

uskladitena procedura koja se ne poziva naredbom EXEC nego se automatski aktivira prilikom izvravanja odreenih akcija od strane korisnika Primjer: Unos roka valjanosti lijeka u bazu podataka rok valjanosti ne smije biti dui od 60 mjeseci okidai su uvari referencijalnog integriteta baze podataka 3 tipa okidaa koji se esto koriste:

INSERT DELETE UPDATE

Okidai tipa INSERT


promjena sadraja unutar baze podataka spreavanje umetanja novog zapisa lanano auriranje tabela u bazi podataka konzistencija baze

Princip rada okidaa:

kada korisnik pokuava unijeti zapis, SQL Server kopira taj zapis u dvije tabele:

tabelu okidaa (engl. Trigger Table) specijalnu tabelu inserted

INSERT Lijek VALUES (12, 3838989512453, Haldol, 8, 7, 60, 1, 1, 54.88)

12

383898.

54.88

12

383898.

54.88

Okida tipa INSERT na primjeru baze podataka Ljekarna

aktivira se promjenom cijene lijeka nakon uitavanja cijene, SQL Server pohranjuje podatke u gore navedene tabele aktivira se okida INSERT i koristei podatke iz tabele inserted mijenja sadraj stupca Cijena u tabeli Lijek

Sintaksa za kreiranje okidaa INSERT (Implementacija SQL Server 2000)


CREATE TRIGGER UnosNoveCijene ON [Lijek]
FOR INSERT AS UPDATE Lijek SET Lijek.Cijena = inserted.Cijena FROM Lijek JOIN inserted ON Lijek.Kod = inserted.Kod;

Koritenjem naredbe INSERT na tabeli Lijek, aktivirat e se okida UnosNoveCijene!!!

You might also like