920 likes | 1.25k Vues
Lekcija 9. Baze podataka. Uvod u SQL Jezik relacione BP. SQL S tructured Q uery L anguage. Strukturni upitni jezik za RBP, modifikovana rel. algebra Razvio ga je IBM u okviru projekta System R Danas je SQL ugrađen u sve vodeće SUBP ANSI standard American National Standards Institute
E N D
Lekcija 9 Baze podataka Uvod u SQL Jezik relacione BP Predavanja
SQLStructured Query Language • Strukturni upitni jezikza RBP, modifikovana rel. algebra • Razvio ga je IBM u okviru projekta System R • Danas je SQL ugrađen u sve vodeće SUBP • ANSI standardAmerican National Standards Institute • Standardizacija: • Zaštita programa od zastarevanja • Vertikalna kompatibilnost • Prenosivost programa na druge računare • Standardizacija za relacione BP • Prvi standard 1986, dopunjen 1989 • Značajnije dopune 1992. (ANSI SQL), 1995., 1999. • Razvoj SQL-a traje i danas Predavanja
SQL • Svaki programski jezik obuhvata podatke i manipulacije nad tim podacima • SQL-jezik: • Objekti manipulacije su relacije • Rezultati manipulacija su relacije • Terminologija: • relacija tabela • n-torka red (vrsta) • Vrednosti u n-torkama za jedan atribut kolona • SQL se zasniva na relacionom računu n-torki Predavanja
SQL • SQL sadrži naredbe za: • definisanje relacija (shema) • ažuriranje podataka (unos, izmena, brisanje) • postavljanje upita • sortiranje i formatiranje ispisa • aritmetičke operacije nad podacima • definisanje pogleda (view) • kontrolu sigurnosti • itd.... • SQL podržava 3 osnovne funkcije BP: definicije, manipulacije i kontrolu Predavanja
SQL- definicije - • Definicija BP: struktura, koje tabele, koji atributi, koji tipovi, koja ograničenja, pomoćni indeksi za direktan pristup(DDL – Data Definition Language) • CREATE TABLE – kreiranje tabele u BPDROP TABLE – uklanjanje tabele iz BP ALTER TABLE – izmena definicije tabeleCREATE INDEX – kreiranje indeksaDROP INDEX – uklanjanje indeksaCREATE VIEW – kreiranje pogledaDROP VIEW – uklanjanje pogleda Predavanja
SQL- manipulacije - • Manipulacija BP: • upit nad bazom podataka (izveštavanje), • ažuriranje (unos, izmena, brisanje) • (DML – Data manipulation Language) • SELECT – prikaz željenog sadržaja RBPUPDATE – izmena vrednosti kolona tabeleDELETE – izbacivanje redova tabeleINSERT – dodavanje redova u tabelu Predavanja
SQL- kontrola - • Kontrola pristupa podacima: • koji korisnici imaju pristup, • kojim podacima, • šta mogu da rade sa tim podacima • (DCL – Data Control Language) • GRANT (dodeljivanje ovlašćenja nad objektima baze drugim korisnicima od strane vlasnika) • REVOKE (ukidanje ovalašćenja dodeljenih pomoću GRANT) Predavanja
SQL • SQL – neodgovarajući naziv - nije samo upitni jezik • SQL podržava oba režima rada sa BP: • Interaktivni: korisnik zadaje jednu po jednu SQL naredbu, preko tastature, ishod se prikazuje na monitoru, pristup BP je ograničen jedino pravima korisnika • Programski: korisnik pokreće program u kome su ugrađene SQL naredbe, pristup BP je ograničen pravima korisnika i sadržajem programa • SQL blokovi ugrađeni u klasični viši programski jezik Predavanja
SQL • Logičke operacije: AND, OR i NOT • Operacije poređenja: • =, <, >, , , • IN, ANY, ALL, BETWEEN, IS NULL, LIKE, … • Skupovne operacije: • UNION, INTERSECT, EXCEPT • Funkcije nad skupovima podataka: • COUNT, SUM, MIN, MAX, AVG • Izrazi se mogu grupisati pomoću zagrada Predavanja
SQLtipovi podataka • INTEGER: (INT), ceo broj sa ili bez predznaka čiji broj cifara zavisi od konkretne implement. • SMALLINT: ceo broj sa brojem cifara manjim u odnosu na INTEGER • REAL: realni broj sa ili bez predznaka, preciznost zavisi od konkreten implement. • DOUBLE PRECISION: (DOUBLE), proširena preciznost u odnosu na REAL • DECIMAL(m,n): (DEC(m,n)), decimalni broj sa ili bez predznaka, m-cifara, a n-decimalnih Predavanja
SQLtipovi podataka • CHARACTER(n): (CHAR(n)), niz znakova fiksne dužine n • Konstanta tipa CHAR se piše između jednostrukih navodnika • VARCHAR(n) - niz znakova dužine najviše n • TEXT – tekst proizvoljne dužine • Praktično sve implementacije SQL-a podržavaju dodatne tipove podataka kao što su: • BOOLEAN – TRUE/FALSE (tačno/netačno) • DATE – datum (‘2004-12-01’) • TIME – vreme (’16:50:07’) Predavanja
SQL- sintaksa - • SQL ne pravi razliku između velikih i malih slova (case insensitive). Sledeće dve naredbe su jednake: • select prezime from osoba where ime = ‘Marko’; • SELECT prezime FROM osoba WHERE ime = ‘Marko’; • Komentari: • -- ovo je komentar • /* ovo je komentar koji se proteže u više redova */ • Za nazive (imena) se ne smeju koristiti rezervisane reči Predavanja
SQL- sintaksa - • Separator naredbi:naredba1;naredba2; • FORMAT naredbi: Sledeće naredbe su ispravno napisane • SELECT * FROM student WHERE BrInd ≤ 100; • SELECT * FROM student WHERE BrInd ≤ 100; • SELECT * FROM student WHERE BrInd ≤ 100; Predavanja
Kreiranje tabela • Prilikom kreiranja tabele (definicija njene strukture i osobina) neophodno je navesti: • Ime tabele, mora biti unikatno u BP • Ime svake kolone, mora biti unikatno unutar tabele • Tip svake kolone • Jedno ili više ograničenja za kolone, koje ih imaju • Jedno ili više ograničenja za svaku tabelu, ako postoje Predavanja
Kreiranje tabela • Sintaksa naredbe kreiranja tabele:CREATE TABLE ImeTabele (ImeKoloneTipKoloneOgraničenjeKolone ...{, ImeKoloneTipKoloneOgraničenjeKolone ...} [OgraničenjeTabele{, OgraničenjeTabele}]); • ImeTabele i ImeKolone – pravila koja važe za većinu varijabli: prvi znak je slovo, ostali znaci su slova, cifre, posebni znaci itd.) • TipKolone – SQL tip podataka • Uz svaku kolonu mogu se navesti jedno ili više ograničenja za tu kolonu Predavanja
Kreiranje tabela • Osnovne klauzule OgraničenjeKolone: • NOT NULL – u koloni nije dozvoljena NULL • UNIQUE – u koloni nije dozvoljeno ponavljanje iste vrednosti • PRIMARY KEY – kolona je primarni ključ, nije dozvoljena NULL vrednost niti ponavljanje vrednosti • CHECK (Predikat) – svaka vrednost u koloni mora da zadovolji uslov zadat logičkim izrazom Predikat. U izrazu se ne mogu navoditi druge kolone Predavanja
Kreiranje tabela • DEFAULT=Konstanta– ako se prilikom unošenja jednog reda podataka u tabelu za kolonu ne zada vrednost, podrazumeva se Konstanta • REFERENCES ImeTabele - specifikacija referencijalnog integriteta za jednu kolonu • kolona je strani ključ u odnosu na tabelu ImeTabele, • mora imati ili vrednost primarnog ključa u toj tabeli ili NULL (ako nema NOT NULL ograničenja) Predavanja
Kreiranje tabela • Za celu tabelu se mogu zadati: • ni jedno, • jedno ili • više ograničenja. • Ograničenja mogu da važe za jednu ili više kolona • UNIQUE(ListaKolona) – nije dozvoljeno ponavljanje istih vrednosti kombinacija • PRIMARY KEY(ListaKolona) – navedene kolone su primarni ključ,... • Konstrukcija ListaKolona označava:ImeKolone{, ImeKolone} Predavanja
Kreiranje tabela • Klauzule za dinamičku specifikaciju referencijalnog integriteta, • Šta se dešava u slučaju pokušaja brisanja reda u ciljnoj tabeli ImeTabele, • Šta se dešava u slučaju pokušaja izmene vrednosti primarnog ključa u ciljnoj tabeli ImeTabele • DELETE OF ImeTabele{RESTRICTED CASCADES NULLS} • UPDATE OF ImeTabele{RESTRICTED CASCADES NULLS} Predavanja
Kreiranje tabela • Sva ograničenja navedena u CREATE TABLE su aktivna u svakom trenutku postojanja tabele • SUBP će odbiti svaki pokušaj sa tabelom, koji je u suprotnosti sa ograničenjima • Olakšica za projektante i programere BP • Provere se ne moraju ugrađivati u aplikativne programe • Deklarativna moć naredbe CREATE TABLE je od velikog značaja, naročito kod dinamičke specifikacije referencijalnog integriteta Predavanja
Kreiranje tabela • Primer: Kompletna definicija BP Biblioteka • CREATE TABLE Oblast (SifO CHAR(2) PRIMARY KEY,Naziv CHAR(20) NOT NULL UNIQUE ); • CREATE TABLE Naslov (SifN CHAR(4) PRIMARY KEY,Naziv CHAR(20) NOT NULLSifO CHAR(2) NOT NULL REFERENCES OblastUPDATE OF Oblast CASCADES,DELETE OF Oblast RESTRICTED ); Predavanja
Kreiranje tabela • CREATE TABLE Autor (SifA CHAR(3) PRIMARY KEY,Ime CHAR(15) NOT NULL ); • CREATE TABLE Clan (SifC CHAR(3) PRIMARY KEY,Ime CHAR(15) NOT NULL ); • CREATE TABLE Knjiga (SifK CHAR(3) PRIMARY KEY,SifN CHAR(4) NOT NULL REFERENCES NaslovUPDATE OF Naslov CASCADES,DELETE OF Naslov RESTRICTED ); Predavanja
Kreiranje tabela • CREATE TABLE Autor (SifA CHAR(3) PRIMARY KEY,Ime CHAR(15) NOT NULL ); • CREATE TABLE Clan (SifC CHAR(3) PRIMARY KEY,Ime CHAR(15) NOT NULL ); • CREATE TABLE Knjiga (SifK CHAR(3) PRIMARY KEY,SifN CHAR(4) NOT NULL REFERENCES NaslovUPDATE OF Naslov CASCADES,DELETE OF Naslov RESTRICTED ); Predavanja
Kreiranje tabela • CREATE TABLE Je_Autor (SifA CHAR(3) REFERENCES Autor,SifN CHAR(4) REFERENCES Naslov,Koji INT NOT NULL CHECK(Koji>0)PRIMARY KEY (SifA,SifN),UPDATE OF Autor CASCADES,DELETE OF Autor RESTRICTED,UPDATE OF Naslov CASCADES,DELETE OF Naslov RESTRICTED ); Predavanja
Kreiranje tabela • CREATE TABLE Drzi (SifK CHAR(3) PRIMARY KEYREFERENCES Knjiga,SifC CHAR(3) NOT NULL REFERENCES Clan,DatumDATE NOT NULLUPDATE OF Knjiga CASCADES,DELETE OF Knjiga RESTRICTED,UPDATE OF Clan CASCADES,DELETE OF Clan RESTRICTED ); Predavanja
Primer Datum Sala Prezime Vreme Ime Ocena Ime Prezime BrInd Ispit Student Profesor Adresa IdProf Email NaucnoZvanje Telefon Predmet IdPredmeta NazivPredmeta Predavanja
Primer • Primer: • Studenti(BrInd, Ime, Prezime, Adresa, Telefon, Email) • Profesori(IdProf, Ime Prezime, NaucnoZvanje) • Predmeti(IdPredmet, NazivPredmeta) • Ispit(Brind, IdPredmet, IdProf, Ocena, Sala, Datum, Vreme) Predavanja
Primer • Kreiranje tabele Studenti • CREATE TABLE Studenti (BrInd INT PRIMARY KEY CHECK(0<BrInd≤300), Ime VARCHAR(20) NOT NULL,Prezime VARCHAR(20) NOT NULL,Adresa VARCHAR(50) NOT NULL,Telefon VARCHAR(15),Email VARCHAR(30)); Predavanja
Primer • CREATE TABLE Ispit (BrInd INT REFERENCES Studenti, IdPredmet INT REFERENCES Predmeti,IdProf INT REFERENCES Profesori,Ocena INT NOT NULL CHECK (5≤Ocena≤10),Sala CHAR(5) UNIQUE,Datum DATE,Vreme TIMEPRIMARY KEY (BrInd,IdPredmeta,IdProf)UPDATE OF Studenti CASCADES,DELETE OF Studenti RESTRICTED,UPDATE OF Predmeti CASCADES,DELETE OF Predmeti RESTRICTED,UPDATE OF Profesori CASCADES,DELETE OF Profesori RESTRICTED); Predavanja
Uklanjanje tabela • Izbor dinamičke specifikacije referencijalnih integriteta, kod uklanjanja predstavlja delikatnu operaciju • Ako se nepromišljeno koristi RESTRICTED, nameće se krut režim, npr. ne mogu se ukloniti pogrešno uneti podaci iz tabele • Naredba uklanjanja tabele iz BPDROP TABLEImeTabele ; • Tabela koja se uklanja mora biti prazna. U suprotnom SUBP neće izvršiti tu naredbu Predavanja
Kreiranje indeksa • Indeks – pomoćna datoteka za ubrzanje pristupa podacima u osnovnoj datoteci • U osnovnoj datoteci zapisi se nalaze u nekom fizičkom redosledu (redosled unošenja) • Indeks – može se preuređivati u rastućoj ili opadajućoj vrednosti indeksnog niza • Sintaksa naredbe kreiranja indeksa:CREATE [UNIQUE] INDEX ImeIndeksa ON ImeTabele (ListaKolona) Predavanja
Kreiranje indeksa • UNIQUE – opcija da indeks mora biti unikatan. U tabeli na koju se indeks odnosi ne sme se više puta ponoviti vrednost ListaKolona • ImeIndeksa – unikatni naziv indeksa u BP • Ime tabele – tabela na koju se indeks odnosi • ListaKolona – navođenje jedne ili više kolona, po kojima se formira INDEKS • Nad istom tabelom se može definisati više indeksa (za različite pristupe podacima) • Indeks se može kreirati odmah (dok je tabela prazna) ili naknadno Predavanja
Kreiranje i uklanjanje indeksa • Klauzula UNIQUE u definiciji indeksa ima efekat na klauzulu UNIQUE kod tabele: • SUBP odbija svaku izmenu podataka u tabeli koja narušava unikatnost indeksa • SUBP odbija kreiranje unikatnog indeksa za tabelu čiji zatečeni sadržaj narušava tu unikatnost • Indeks se može bilo kada i bez obzira na sadržaj svoje tabele ukloniti naredbom:DROP INDEX ImeIndeksa Predavanja
je_autor1 (SIFA) • AP0 • AP1 • DM0 • DM0 • IT0 • JN0 • ZP0 • ZP0 je_autor (SIFA SIFN KOJI) AP0 RBP0 1 JN0 RBP0 2 DM0 RK00 1 ZP0 PP00 1 DM0 PP00 2 AP1 PJC0 1 IT0 PP00 3 ZP0 PJC0 2 • je_autor2 (SIFN) • PJC0 • PJC0 • PP00 • PP00 • PP00 • RBP0 • RBP0 • RK00 Indeksi • Primer: Ako se želi brz pristup podacima u tabeli Je_Autor po dva osnova, po šifri autora i po šifri naslova, kreiraju se dva indeksa: • CREATE INDEX Je_Autor1 ON Je_Autor(SifA); • CREATE INDEX Je_Autor2 ON Je_Autor(SifN); Predavanja
Indeksi • Napomene: • Svaka indeksna datoteka ima dva dela: • ListaKolona, po kojima se vrši pretraživanje i po kojima se vrši uređivanje indeksa • Indeks, koji služi za vezu sa osnovnom datot. • Primer: Kreiranje indeksa nad jednim atributom koji nije primarni. Zadata je tabela gradjanin (matbr#,prezime,ime,datrodj,adresa) • Redni broj zapisa (record number) vodi se u većini programskih paketa • Neka je INDGRAD indeksna datoteka Predavanja
Indeksi gradjanin indgrad Predavanja
Indeksi • Nisu svi atributi dobri kandidati za indeks. Npr. bit-map, text ili slika • Po pravilu su strani ključevi kandidati za indeks • Indeksiranje ima i svojih nedostataka: Prilikom ažuriranja osnovne tabele (brisanje, unošenje), mora se vršiti reindeksiranje, pa se gubi na vremenu. • Tabele sa malim brojem podataka u zapisu se ne indeksiraju, jer se pretraga može efikasno izvršiti brzim računarima. Predavanja
Izmena postojeće tabele • Naredba ALTER • Sintaksa:ALTER TABLE ImeTabeleADD (ImeKolone Tip, [ImeKolone Tip]...); • Primer: U tabelu Odeljenje dodati kolone Sef_Od i Br_ZapALTER TABLE OdeljenjeADD (Šef_Od INTEGER, Br_Zap NUMBER(2)); • Primer: U istoj tabeli povećati dužinu za Br_ZapALTER TABLE OdeljenjeMODIFY (Br_Zap NUMBER(6)); Predavanja
Kreiranje i uklanjanje pogleda • Osnovne tabele – fizički postoje na disku • Pogled – virtuelna (izvedena) tabela • Nastaje kao rezultat upita • Sintaksa naredbe kreiranja pogleda:CREATE VIEW ImePogleda [ListaKolona] AS Upit; • ImePogleda- unikatno ime u BP • Upit – naredba upita SELECT • Pogled nasleđuje tipove kolona iz osnovnihtabela • Uklanjanje – DROP VIEW ImePogleda; Predavanja
Prednosti pogleda • Jednostavnost korišćenja, uprošćavaju se upiti • Tajnost, mehanizam za kontrolu pristupa podacima (korisnik vidi samo neke podatke) • Performanse, definicija pogleda se čuva u kompajliranom, prevedenom obliku • Nezavisnost podataka, menjaju se definicije pogleda, a ne aplikacije koji koriste podatke iz BP preko pogleda • Vrsta potprograma u SQL-u • Jednom kreiran može da se koristi u podupitima, u WHERE i HAVING klauzulama • Zamenjuje komplikovane upite Predavanja
UPIT- SELECT - • Najznačajnija i najčešće korišćena SQL naredba za manipulaciju podacima • Kod svakog upita zadajemo (u principu): • Koje podatke tražimo kao rezultat, • Iz kojih tabela to tražimo, • Koji uslov treba da zadovolje podaci, da bi bili uključeni u rezultat • U kom redosledu želimo prikaz podataka Predavanja
Prost upit nad jednom tabelom • Podrazumeva se naredba upita SELECT, nad jednom tabelom • Kao rezultat daje niz redova (ili jedan ili nijedan) koji zadovoljavaju eventualno zadati uslov • SELECT lista – podrazumeva se specifikacija podataka u rezultatu upita • Specifikacija – zadata jednim ili sa više izraza odvojenih zarezima (R-lista) • Rezultat upita ne mora biti relacija (unikatnost) Predavanja
Prost upit nad jednom tabelom • Sintaksa • SELECT * {[ALL DISTINCT] R-Lista} FROM ImeTabele [WHERE R-Predikat] [ORDER BY ImeKolone [DESC] {, ImeKolone [DESC]} …]; • *- Specijalni slučaj R-liste, kada u rezultat želimo da uključimo sve kolone tabele • ALL– iz rezultata neuklanja istovetne redove,DISTINCT– suprotno. Podrazumeva se ALL. • R-Listase zadaje kao jedan ili više R-Izraza, pored naziva kolone javljaju se i konstante Predavanja
Prost upit nad jednom tabelom • Klauzula FROM (“odakle”), specificira se ImeTabele. To je ime osnovne tabele ili pogleda nad kojim se vrši upit. Ovo je obavezna klauzula. • R_Predikat , uslov prikazivanja rezultata, • to je logički izraz izračunljiv nad svakim pojedinim redom tabele. • Rezultat upita se dobija samo za one vrednosti R_Predikata koje daju istinitosnu vrednost. • Najčešće je to relacioni izraz (>,<,=,…) sa kolonama,a sa desne strane može se javiti i konstanta • ORDER BY – daje željeni redosled prikaza rezultata. Podrazumeva se rastući redosled (ASC). U suprotnom se navodi DESC uz odgovarajuću kolonu. Uvek je poslednja klauzula u SELECT bloku. Predavanja
Prost upit nad jednom tabelom • Najjednostavniji mogući SQL upit je u formi:SELECT * FROM ImeTabele; • Ova naredba prikazuje sve redove tabele čije je ime navedeno iza FROM klauzule • U svakom redu prikazuju se vrednosti svih kolona, onim redom kako je to zapisano u datoteci (tj. kreirano sa CREATE TABLE) • Kod upita se obično traži prikaz samo određenih kolona, ili prikaz svih kolona u redosledu koji je drugačije određen. • Ovo odgovara operaciji projekcije, ali se ne elimišu višestruka ponavljanja istih vrednosti Predavanja
Prost upit nad jednom tabelom • Primeri: Upiti sa dobijenim rezultatima • Upit za prikaz cele tabele – (simbol *) • Ogovara restrikciji - kada nema uslova PSELECT *FROM Student ; Student SELECT Predavanja
Prost upit nad jednom tabelom • Upit za prikaz cele tabele u željenom redosleduSELECT * FROM StudentORDER BY Ime; Student SELECT Predavanja 28.11.2006. Predavanja 47
Prost upit nad jednom tabelom • Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT FakultetFROM Student; Student SELECT Predavanja
Prost upit nad jednom tabelom • Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata :SELECT DISTINCT FakultetFROM Student; Student SELECT Predavanja 28.11.2006. Predavanja
Prost upit nad jednom tabelom • Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata , a u željenom redosledu:SELECT DISTINCT FakultetFROM StudentORDER BY Fakultet ; Student SELECT Predavanja 28.11.2006. Predavanja