47
SQL baze podataka Stjepan Poljak Josip Mikolašević Zvonimir Ivančević Slobodan Jelić Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

sql (1).ppt

Embed Size (px)

Citation preview

  • SQL baze podatakaStjepan PoljakJosip MikolaeviZvonimir IvaneviSlobodan Jeli

    Sveuilite Josipa Jurja Strossmayerau OsijekuOdjel za matematiku

  • 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/posluiteljTo 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..

  • TABLICETablice 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 BROJIMEPREZIMEULICAMJESTO0102968383911PeroPeriGajeva 3Zagreb0302982383818IvanIviPoega0305972383915MarkoMariDivaltova 67Osijek

  • 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 ZagrebPRIMARY KEY (maticni broj));

  • PRIVREMENE TABLICEPrivremene 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 ZagrebPRIMARY KEY (maticni broj));

  • Naredbe SQL jezikaSQL DDL (engl. Data Definition Language)Definicija objekata u bazi podatakaCREATE - kreiranje objekata bazeDROP - uklanjanje objekata bazeALTER - izmjena definicije objekata bazeGRANT - definiranje prava pristupa podacimaREVOKE - uklanjanje definicije prava pristupa podacima

  • CREATE TABLEDefiniranje 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

    stanovnici

    pbrnaziv

    jmbgime osobeprezime osobepbradresa

  • DROP TABLEUklanjanje (brisanje) relacije iz baze podatakaZa razliku od DELETE koja izbacuje samo n-torke iz relacije, ova naredba izbacuje i definiciju relacije pa relacija i njena relacijska shema vie ne postojiSintaksa:DROP TABLE table_namePrimjer:DROP TABLE osobe

  • ALTER TABLEIzmjena 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);

  • GRANTVlasnik 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-aprimjeri: GRANT CREATE TABLE, CREATE VIEW TO korisnik; GRANT CREATE PROCEDURE TO korisnik;Za naredbe DML-aprimjeri: GRANT SELECT ON student TO stuslu; GRANT SELECT(ime_stud, prez_stud) ON student TO korisnik; GRANT DELETE ON mjesto TO korisnik;

  • 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 LanguageData Manipulation Language ili DML je podskup jezika koristen za dodavanje, brisanje ili mijenjanje podatakanaredbe: SELECT, UPDATE, INSERT, DELETE, MERGE

  • SELECTvraca skup rezultata iz zapisa jedne ili vise tablicakoristi se za dobijanje nijednog ili vise redaka iz jedne ili vise glavnih tablica, privremenih tablica ili pogleda iz baze podatakapri 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 trazeGROUP BY koristi se za kombiniranje redova sa srodnim vrijednostima u elemente sa manjim skupom redakaHAVING definira koji se redovi (traze) uz GROUP BYORDER BY definira koji se stupci koriste za sortiranje rezultata

  • UPDATEkoristi se za promjenu vrijednosti u postojecem redu ili redovimaneki nacini koristenja: UPDATE tablica SET stupac=vrijednostUPDATE tablica SET stupac=vrijednostWHERE neki_uvjetZadnji 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

  • DELETEkoristi se za brisanje podatakaneki nacini koristenja:DELETE FROM tablicaDELETE FROM tablica WHERE stupac=vrijednostprvi 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

  • INSERTkoristi 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 koloneneki nacini koristenja:INSERT INTO tablicaVALUES (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 SELECTINSERT INTO tablicaSELECT stupac_1, ... ,stupac_nprimjer pokazuje kako u tablici dodati podatke iz neke druge tablice

  • MERGEkoristi se za kombinaciju podataka iz vise tablicavrsta kombinacije INSERT i UPDATE elemenatadefinirana po SQL:2003 standardima, iako neke baze podataka pruzaju slicnu funkcionalnost preko drugacije sintakse, koja se nekad zove upsertsintaksa koristenja naredbe MERGE:MERGE INTO tablica USING tablica ON (uvjet)

  • INDEKSIAko 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 trgovacCREATE INDEX IME_INDEX ON TRGOVAC(IME_PREZIME);Formiranje jedinstvenog indeksa po atributu MB relacijeCREATE 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 podatakapovezivanje tabeladohvaanje podataka po zadanim kriterijimakomande koje rade sljedee:kreiranje i uklanjanje tabeladodavanje, mijenjanje ili uklanjanje redaka i poljapretraivanje vie tabela radi pronalaenja odreenih informacijamijenjanje informacija o zatitiPrimjer 1.

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

  • cilj SQL upita: manipuliranje podacima iz vie tabela

    BEZUVJETNO SPAJANJE TABELA = Kartezijev produkt redaka iz svih tabela koje elimo spojitiBezuvjetno spajanje tabelaSELECT *FROM Tabela1, Tabela2;

    RedakOznakaredak1tabela1redak2tabela1redak3tabela1

    RedakOznakaredak1tabela2redak2tabela2redak3tabela2

  • = Kartezijev produkt skupova R i T

    RedakOznakaRedakOznakaredak1tabela1redak1tabela2redak1tabela1redak2tabela2redak1tabela1redak3tabela2redak2tabela1redak1tabela2redak2tabela1redak2tabela2redak2tabela1redak3tabela2redak3tabela1redak1tabela2redak3tabela1redak2tabela2redak3tabela1redak3tabela2

  • bezuvjetno spajanje rijetko se koristiuglavnom je zadan uvjet po kojemu se tabele spajajujedan od uvjeta je i JEDNAKOSTSpajanje tabela po uvjetu jednakostiPrimjer 2.

    SELECT Lijek.[Bar-kod], Lijek.Naziv, Proizvoa.NazivFROM Lijek, ProizvoaWHERE Lijek.Proizvoa=Proizvoa.ifra;

    UVJET JEDNAKOSTILijek.Proizvoa = Proizvoa.ifraLIJEK - PROIZVOA

  • slue za uitavanje zapisa iz vie tabela da bi dao jedan skup zapisanaredba JOIN spaja tabele na osnovu zajednikog stupca i daje zapise ije se vrijednosti poklapaju u spojenim tabelamaUnutarnji spojevi (INNER JOINS)Primjer 3.

    SELECT Lijek.[Bar-kod], Lijek.Naziv, Proizvoa.NazivFROM Proizvoa INNER JOIN Lijek ON Proizvoa.ifra=Lijek.Proizvoa;

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

  • postoje tri vrste spoljanjih spojeva:

    DESNI SPOLJANJI SPOJLIJEVI SPOLJANJI SPOJPOTPUNI SPOLJANJI SPOJSpoljanji spojevi (OUTER JOINS)Desni spoljanji spoj (RIGHT OUTER JOIN ili RIGHT JOIN) uvijek vee zapise iz tabele s desne strane odredbe JOIN sa zapisimaiz tabele s lijeve strane Primjer 4.

    SELECT [Bar-kod], Lijek.Naziv, Proizvoa.NazivFROM 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 zapisimaiz tabele s desne strane Primjer 5.

    SELECT [Bar-kod], Lijek.Naziv, Proizvoa.NazivFROM 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

  • Zadatak: Ispisati sve lijekove zajedno sa njihovim farmaceutskim oblicimaSpajanje vie tabelaPROBLEM: 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];

  • PoglediPostoje samo kao definicije upita nad jednom ili vie tablicane uvaju podatke u sebi (prividne relacije bez vlastitih podataka)Omoguuju prilagodbu logikog modela podataka specifinim potrebama korisnikaprovoenje zatite protiv neovlatenog pristupa podacimaIzvravaju se u trenutku upita pomou naredbe CREATE VIEWPogled se brie naredbom DROP VIEW

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

  • Procedureprocedura je upit koji se cuva u bazi podatakapisanje procedure se zapocinje sa CREATE PROCEDURE ime_procedure AS programski_kodpozivanje procedure se obavlja sa EXEC ime_proceduremoze biti bez ili sa ulaznim parametrima

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

  • Upit koji se uva u SQL Server-ovoj bazi podataka, nije ugraena u osnovne komponente aplikacija na klijentskim raunalimaOsnovni cilj:Poveanje brzine prijenosa podataka unutar mreePrevoenje upita povezivanje tabelaUSKLADITENE PROCEDURE (eng. Stored Procedures)SELECT Lijek.[Bar-kod], Lijek.Naziv, Lijek.CijenaFROM Lijek INNER JOIN ([Farmakoterapijska skupina] INNER JOIN [Specifikacija FSL] ON [Farmakoterapijska skupina].ifra=[Specifikacija FSL].ifra) ON Lijek.Kod=[Specifikacija FSL].KodWHERE ((([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 PROCEDUREUpit velikog prometa pohraniti na server kao uskladitenu proceduruSQL Server-u proslijediti samo naziv uskladitene procedureSintaksa:

    EXEC ime_uskladitene_procedure

  • nema prosljeivanja parametarazahtjeva dodatnu sintaksu za definiranje uskladitene procedureUskladitene procedure bez ulaznih parametaraCREATE PROCEDURE DBO.Analgetici ASSELECT Lijek.[Bar-kod], Lijek.Naziv, Lijek.CijenaFROM Lijek INNER JOIN ([Farmakoterapijska skupina] INNER JOIN [Specifikacija FSL] ON [Farmakoterapijska skupina].ifra=[Specifikacija FSL].ifra) ON Lijek.Kod=[Specifikacija FSL].KodWHERE ((([Farmakoterapijska skupina].Naziv)="Analgetik"))ORDER BY Lijek.Naziv;poziv procedure (implementacija: MS SQL Server 2000)USE LjekarnaEXEC Analgetici

  • Problem: to ako korisnik eli spisak lijekova iz neke druge farmakoterapijske skupine (a ne analgetike kao u prethodnom primjeru)?Rjeenje: Uskladitena procedura sa ulaznim parametrimapotrebno je definirati ulaznu varijabluUskladitene procedure sa ulaznim parametrimaCREATE PROCEDURE DBO.SkupinaL @skupina varchar(30) ASSELECT Lijek.[Bar-kod], Lijek.Naziv, Lijek.CijenaFROM Lijek INNER JOIN ([Farmakoterapijska skupina] INNER JOIN [Specifikacija FSL] ON [Farmakoterapijska skupina].ifra=[Specifikacija FSL].ifra) ON Lijek.Kod=[Specifikacija FSL].KodWHERE ((([Farmakoterapijska skupina].Naziv)=@skupina))ORDER BY Lijek.Naziv;

    @skupina @varchar(30) = Analgetikpoziv procedure (implementacija: MS SQL Server 2000)USE LjekarnaEXEC SkupinaL Antipiretik

  • uskladitena procedura koja se ne poziva naredbom EXEC nego se automatski aktivira prilikom izvravanja odreenih akcija od strane korisnikaPrimjer: Unos roka valjanosti lijeka u bazu podataka rok valjanosti ne smije biti dui od 60 mjeseci okidai su uvari referencijalnog integriteta baze podataka3 tipa okidaa koji se esto koriste:INSERTDELETEUPDATEOKIDAI (engl. Triggers)Okidai tipa INSERTpromjena sadraja unutar baze podatakaspreavanje umetanja novog zapisalanano 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 insertedINSERT LijekVALUES (12, 3838989512453, Haldol, 8, 7, 60, 1, 1, 54.88)12 383898. 54.8812 383898. 54.88

    Okida tipa INSERT na primjeru baze podataka Ljekarnaaktivira se promjenom cijene lijekanakon uitavanja cijene, SQL Server pohranjuje podatke u gore navedene tabeleaktivira 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 INSERTASUPDATE LijekSET Lijek.Cijena = inserted.CijenaFROM Lijek JOIN insertedON Lijek.Kod = inserted.Kod;Koritenjem naredbe INSERT na tabeli Lijek, aktivirat e se okida UnosNoveCijene!!!