baze podataka
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
Baze podatakaBaze podataka
28.11.2006. Predavanja 1
Uvod u SQL
Jezik relacione BP
Lekcija 9Lekcija 9
SQLStructured Query Language
• 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 • 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
28.11.2006. Predavanja 2
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
28.11.2006. Predavanja 3
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
28.11.2006. Predavanja 4
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
28.11.2006. Predavanja 5
SQL- manipulacije -
• Manipulacija BP: – upit nad bazom podataka (izveštavanje), – ažuriranje (unos, izmena, brisanje)
• (DML – Data manipulation Language)• SELECT – prikaz željenog sadržaja RBP
UPDATE – izmena vrednosti kolona tabeleDELETE – izbacivanje redova tabeleINSERT – dodavanje redova u tabelu
28.11.2006. Predavanja 6
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)
28.11.2006. Predavanja 7
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
28.11.2006. Predavanja 8
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
28.11.2006. Predavanja 9
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
28.11.2006. Predavanja 10
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’)
28.11.2006. Predavanja 11
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
28.11.2006. Predavanja 12
SQL- sintaksa -
• Separator naredbi:naredba1;naredba2;
• FORMAT naredbi: Sledeće naredbe su ispravno napisane– SELECT *
FROM studentWHERE BrInd ≤ 100;
– SELECT * FROM student WHERE BrInd ≤ 100;– SELECT *
FROM studentWHERE
BrInd ≤ 100;28.11.2006. Predavanja 13
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
28.11.2006. Predavanja 14
Kreiranje tabela
• Sintaksa naredbe kreiranja tabele:CREATE TABLE ImeTabele (
ImeKolone TipKolone OgraničenjeKolone ...{, ImeKolone TipKolone Ogranič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
28.11.2006. Predavanja 15
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
28.11.2006. Predavanja 16
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)
28.11.2006. Predavanja 17
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}28.11.2006. Predavanja 18
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}
28.11.2006. Predavanja 19
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
28.11.2006. Predavanja 20
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 );
28.11.2006. Predavanja 21
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 );
28.11.2006. Predavanja 22
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 );
28.11.2006. Predavanja 23
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 );
28.11.2006. Predavanja 24
Kreiranje tabela
• CREATE TABLE Drzi (SifK CHAR(3) PRIMARY KEY
REFERENCES 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 );
28.11.2006. Predavanja 25
Primer
28.11.2006. Predavanja 26
Student Profesor
Predmet
IspitBrInd
Ime
Prezime
Adresa
TelefonEmail
Ime Prezime
NaucnoZvanjeIdProf
IdPredmeta NazivPredmeta
Ocena
Sala
Datum
Vreme
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)
28.11.2006. Predavanja 27
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));
28.11.2006. Predavanja 28
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);
28.11.2006. Predavanja 29
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 TABLE ImeTabele ;
• Tabela koja se uklanja mora biti prazna. U suprotnom SUBP neće izvršiti tu naredbu
28.11.2006. Predavanja 30
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)
28.11.2006. Predavanja 31
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
naknadno28.11.2006. Predavanja 32
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
28.11.2006. Predavanja 33
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);
28.11.2006. Predavanja 34
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
je_autor1 (SIFA) AP0 AP1
DM0 DM0 IT0 JN0
ZP0 ZP0
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
28.11.2006. Predavanja 35
Indeksi
28.11.2006. Predavanja 36
Redbr matbr# prez ime datrodj adresa
1 13248 Antić Zoran
2 43286 Jović Milan
3 56732 Marić Goran
4 56879 Babić Dragan
5 42116 Rodić Petar
6 89764 Lazić Ana
7 13589 Perić Vera
ind prez
1 Antić
4 Babić
2 Jović
6 Lazić
3 Marić
7 Perić
5 Rodić
gradjanin indgrad
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.
28.11.2006. Predavanja 37
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));
28.11.2006. Predavanja 38
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 osnovnih tabela• Uklanjanje – DROP VIEW ImePogleda;
28.11.2006. Predavanja 39
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
28.11.2006. Predavanja 40
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
28.11.2006. Predavanja 41
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)
28.11.2006. Predavanja 42
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-Lista se zadaje kao jedan ili više R-Izraza, pored naziva
kolone javljaju se i konstante28.11.2006. Predavanja 43
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.
28.11.2006. Predavanja 44
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
28.11.2006. Predavanja 45
Prost upit nad
jednom tabelom
• Primeri: Upiti sa dobijenim rezultatima• Upit za prikaz cele tabele – (simbol *)• Ogovara restrikciji - kada nema uslova P
SELECT *FROM Student ;
28.11.2006. Predavanja 46
BrInd Ime Prezime
1 Marko Marković
2 Petar Petrović
3 Aleksa Perić
Student
SELECT
BrInd Ime Prezime
1 Marko Marković
2 Petar Petrović
3 Aleksa Perić
Prost upit nad
jednom tabelom
• Upit za prikaz cele tabele u željenom redosleduSELECT *
FROM StudentORDER BY Ime;
28.11.2006. Predavanja 4728.11.2006. Predavanja 47
BrInd Ime Prezime
1 Marko Marković
2 Petar Petrović
3 Aleksa Perić
Student
SELECT
BrInd Ime Prezime
1 Aleksa Perić
2 Marko Marković
3 Petar Petrović
Prost upit nad
jednom tabelom
• Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT Fakultet
FROM Student;
28.11.2006. Predavanja 48
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
Fakultet
PFB
FIM
FIM
FTHM
PFB
PFB
SELECT
Student
Prost upit nad
jednom tabelom
• Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata :SELECT DISTINCT Fakultet
FROM Student ;
28.11.2006. Predavanja 4928.11.2006. Predavanja
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
Fakultet
PFB
FIM
FTHM
SELECT
Student
Prost upit nad
jednom tabelom
• Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata , a u željenom redosledu:SELECT DISTINCT Fakultet
FROM Student ORDER BY Fakultet ;
28.11.2006. Predavanja 5028.11.2006. Predavanja
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
Fakultet
FIM
FTHM
PFB
SELECT
Student
Prost upit nad
jednom tabelom
• Upit za prikaz više kolona sa zadavanjem uslova:SELECT BrInd, Ime, Prezime
FROM Student WHERE Fakultet=‘FIM’;
28.11.2006. Predavanja 51
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
SELECT
Student
BrInd Ime Prezime
2 Petar Petrović
3 Aleksa Perić
Prost upit nad
jednom tabelom
• Upit za prikaz dve kolone sa zadavanjem uslova, a u željenom redosledu:SELECT BrInd, Ime, Prezime
FROM Student WHERE Fakultet=‘FIM’ORDER BY Ime;
28.11.2006. Predavanja 52
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
SELECT
Student
BrInd Ime Prezime
3 Aleksa Perić
2 Petar Petrović
Prost upit nad jednom tabelom sa
izvedenim rezultatom
• Podrazumeva se naredba upita SELECT nad jednom tabelom koja kao rezultat daje jedan red podataka koji su izvedeni iz svih redova tabele, koji zadovoljavaju zadati uslov
• SELECT lista takvog upita se sastoji iz jednog ili više izraza (G-Lista i G-Izrazi)
• Zadavanje redosleda redova u rezultatu nema smisla (dobija se samo jedan red)
28.11.2006. Predavanja 53
Prost upit nad jednom tabelom sa
izvedenim rezultatom• Sintaksa za SELECT (prost upit nad jednom T sa
izvedenim rezultatom)SELECT G-Lista
FROM ImeTabele[WHERE R-Predikat];
• G-Izrazi: najčešće ih čine posebne SQL funkcije (svodne ili agregatne funkcije)
• Svodne funkcije:– SUM (ImeKolone) Nalazi sumu svih ne-NULL vrednosti
zadate kolone– AVG (ImeKolone) Nalazi prosečnu vrednost svih ne-
NULL vrednosti zadate kolone28.11.2006. Predavanja 54
Prost upit nad jednom tabelom sa
izvedenim rezultatom
– MIN (ImeKolone) Nalazi minimalnu vrednost svih ne-NULL vrednosti zadate kolone
– MAX (ImeKolone) Nalazi maksimalnu vrednost svih ne-NULL vrednosti zadate kolone
– COUNT(*) Nalazi ukupan broj redova u tabeli– COUNT([ALLDISTINCT] ListaKolona)
Bez DISTINCT nalazi ukupan broj ne-NULL vrednosti zadate kombinacije kolonaSa DISTINCT nalazi ukupan broj različitih ne-NULL vrednosti zadate kombinacije kolona
28.11.2006. Predavanja 55
Prost upit nad jednom tabelom sa
izvedenim rezultatom• Upit za prikaz ukupnog broja studenata (odgovara broju
redova u tabeli Student)SELECT COUNT(*)
FROM Student ;
28.11.2006. Predavanja 56
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
SELECT 6
Student
Prost upit nad jednom tabelom sa
izvedenim rezultatom• Upit za prikaz broja fakulteta na koje su upisani studenati
(odgovara broju različitih vrednosti kolone Fakultet u tabeli Student)SELECT COUNT(DISTINCT Fakultet)
FROM Student ;
28.11.2006. Predavanja 57
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
SELECT 3
Student
Prost upit nad jednom tabelom sa
izvedenim rezultatom• Upit za prikaz broja studenata koji su upisali FTHM
SELECT COUNT(*)FROM Student WHERE Fakultet=‘FTHM’;
28.11.2006. Predavanja 58
BrInd Ime Prezime Fakultet
1 Marko Marković PFB
2 Petar Petrović FIM
3 Aleksa Perić FIM
4 Marko Marić FTHM
5 Petar Lazić PFB
6 Jovan Marić PFB
SELECT 1
Student
Prost upit nad jednom tabelom sa
izvedenim rezultatom
• Upit za prikaz sume cena svih proizvoda:SELECT SUM(Cena)
FROM Racun;
28.11.2006. Predavanja 5928.11.2006. Predavanja
SifP NazivP Kolicina Cena
005 P1 1 1800,00
010 P2 6 300,00
020 P3 5 250,00
001 P3 2 1100,00
003 P3 4 600,00
011 P1 3 700,00
SELECT 1800+300+250+1100 ....
Racun
Prost upit nad jednom tabelom sa
izvedenim rezultatom
• Upit za prikaz minimalne i maksimalne cene iz računa:SELECT MIN(Cena), MAX(Cena)
FROM Racun;
28.11.2006. Predavanja 60
SifP NazivP Kolicina Cena
005 P1 1 1800,00
010 P2 6 300,00
020 P3 5 250,00
001 P3 2 1100,00
003 P3 4 600,00
011 P1 3 700,00
SELECT 1800 250
Racun
Prost upit nad jednom tabelom sa
izvedenim rezultatom• Upit za prikaz sume i proseka cena za proizvod P1:
SELECT SUM(Cena), AVG(Cena)FROM Racun WHERE NazivP= ‘P1’;
– Primedba: rezultat AVG funkcije preuzima tip podataka od argumenta (tip kolone)
28.11.2006. Predavanja 61
SifP NazivP Kolicina Cena
005 P1 1 1800,00
010 P2 6 300,00
020 P3 5 250,00
001 P3 2 1100,00
003 P3 4 600,00
011 P1 3 700,00
SELECT 2500 1250
Racun
Prost upit nad jednom tabelom sa
izvedenim rezultatom• SELECT SifC, SUM(Dana)
FROM Pozajmica;Ovde je SifC podatak na nivou jednog reda, a SUM(Dana) podatak sveden iz više redova
28.11.2006. Predavanja 62
Svodni upit nad
jednom tabelom
• Prethodni primer: Želeo se prikaz sume trajanja pozajmica po šiframa članova.
• Dopuna: Prikazati samo podatke za članove za koje je npr. trajanje pozajmice >10
• Postupak je sledeći:– Od tabele Pozajmica formira se međurezultat sa
kolonama (SifC i Dana) grupisane po SifC– Formira se nova tabela sa jednom vrednošću za SifC i
izračunate SUM (Dana) po SifC– Prikazati redove koji zadovoljavaju traženi uslov
28.11.2006. Predavanja 63
Svodni upit nad
jednom tabelom
28.11.2006. Predavanja 64
SifP SifC SifK Dana 1 JJ0 004 5 2 PP0 007 2 3 JJ1 005 6 4 JJ0 008 7 5 PP0 002 4 6 JJ1 009 3
SifC DanaJJ0 5JJ0 7PP0 2PP0 4JJ1 6JJ1 3
SifC DanaJJ0 12PP0 6JJ1 9
RezultatJJ0 12
Uslov:SUM(Dana)>10• Potrebno je dodatno precizirati:
– Po kojim kolonama se vrši grupisanje, i koje svodne funkcije se traže unutar grupe
– Koji uslov se zadaje za uključenje svodnih redova u rezultat
Svodni upit nad
jednom tabelom
• Sintaksa za SELECT za svodni upit nad jednom tabelomSELECT ListaKolona [ListaFunkcija]
FROM ImeTabele[WHERE R-Predikat]GROUP BY ListaKolonaHAVING G-Predikat[ORDER BY Element [DESC]
{, Element [DESC]} …];
28.11.2006. Predavanja 65
Svodni upit nad
jednom tabelom
– WHERE, zadaje se uslov koji svaki red u tabeli ImeTabele mora da zadovolji
– GROUP BY, navodi se jedna ili više kolona po kojima se vrši grupisanjeKolone koje se navode ne moraju biti uz SELECTKolene koje su uz SELECT moraju se naći uz GRUP BY
– HAVING, formira se uslov koji svaki red formiran svođenjem mora da zadovolji da bi bio uključen u rezultatMogu da se jave kolone i funkcije koje nisu uz SELECT
– ORDER BY, mogu se kao Element navoditi samo kolone ili funkcije koje su navedene uz klauzulu SELECT
28.11.2006. Predavanja 66
Svodni upit nad
jednom tabelom
28.11.2006. Predavanja 67
SifP SifC SifK Dana 1 JJ0 004 5 2 PP0 007 2 3 JJ1 005 6 4 JJ0 008 7 5 PP0 002 4 6 JJ1 009 3
SifC DanaJJ0 5JJ0 7PP0 2PP0 4JJ1 6JJ1 3
SifC DanaJJ0 12PP0 6JJ1 9
RezultatJJ0 12
HEAVINGSUM(Dana)>10
GROUP BYSifC, Dana
Svodni upit nad
jednom tabelom
• Primeri: • Upit za prikaz šifara autora i broja naslova koje su napisali
SELECT SifA, COUNT(*) AP0 1FROM Je_Autor JN0 1GROUP BY SifA ; DM0 2
ZP0 2AP1 1IT0 1
28.11.2006. Predavanja 68
Svodni upit nad
jednom tabelom
• Upit za prikaz šifara članova čija je suma trajanja pozajmice veća od 10SELECT SifC JJ0
FROM Pozajmica GROUP BY SifC HAVING SUM(Dana)>10;
• Upit za prikaz šifara članova i njihovog ukupnog broja i trajanja pozajmica, ali samo za pozajmice duže od 2 danaSELECT SifC,COUNT(*), SUM(Dana)
FROM Pozajmica JJ0 2 12WHERE Dana>2 PP0 1 4 GROUP BY SifC; JJ1 2 9
28.11.2006. Predavanja 69
Upiti nad više
tabela
• Podrazumevaju spajanje tabela po nekom uslovu • Iza FROM klauzule SELECT naredbe navodi se više tabela
odvojenih zarezima• Sintaksa:
SELECT * {[ALL DISTINCT] R-Lista}FROM ImeTabele [NadimakTabele] {,…}[WHERE R-Predikat][ORDER BY ImeKolone [DESC]
{, ImeKolone [DESC]} …];
28.11.2006. Predavanja 70
Upiti nad više
tabela
• Za kolone koje se nalaze u više tabele obavezno je navođenje– ImeTabele.ImeKolone– NadimakTabele.ImeKolone
• R-Predikat- navodi se uslov spajanja u formi uslova jednakosti vrednosti odgovarajućih kolona u tabelama
• Upit nad više tabela bez uslova spajanja daje kao rezultat Dekartov proizvod tih tabela
28.11.2006. Predavanja 71
Upiti nad više
tabela
• Primeri: Upit koji daje nazive naslova i nazive njihovih oblasti (spajaju se tabele Naslov i Oblast po uslovu jednakosti kolona SifO)SELECT N.Naziv, O.Naziv
FROM Naslov N, Oblast OWHERE N.SifO=O.SifOORDER BY N.Naziv ;
28.11.2006. Predavanja 72
Upiti nad više
tabela
• Upit koji daje šifre i nazive naslova knjiga koje članovi drže kod sebe (spajaju se tabele Drzi, Knjiga i Naslov po dva uslova jednakosti kolona koja se kombinuju sa AND)
SELECT DISTINCT N.SifN, NazivFROM Drzi D, Knjiga K, Naslov N WHERE D.SifK=K.SifK AND K.SifN=N.SifN;
28.11.2006. Predavanja 73
Upiti nad više
tabela
• Upit koji daje imena članova koji su pozajmljivali knjige (spajaju se tabele Pozajmica i Clan po uslovu jednakosti kolona SifC, svako ime treba da se javi samo jednom u rezultatu)
SELECT DISTINCT C.SifC, ImeFROM Clan C, Pozajmica P WHERE C.SifC=P.SifC;
28.11.2006. Predavanja 74
Prost upit sa svodnim rezultatom
nad više tabela • Sintaksa:
SELECT G-ListaFROM ImeTabele [NadimakTabele] {,…}[WHERE R-Predikat]
• Primer: Upit koji daje ukupno trajanje pozajmica svih knjiga sa šifrom naslova ‘PP00’
SELECT SUM(Dana)FROM Pozajmica P, Knjiga KWHERE P.SifK=K.SifK AND SifN=‘PP00’
28.11.2006. Predavanja 75
Klauzule WHERE i HAVING
• Predikati – to su relacioni izrazi, koji se mogu kombinovati• Predikati: prosti i složeni• Prost predikat: elementarni logički izraz izračunljiv nad
svakim redom neke tabele• Složen predikat: formira se od prostih, primenom logičkih
operatora AND, OR i NOT• Forme prostih predikata:
Izraz1 {<|<=|=|<>|>=|>} Izraz2ispituje da li su vrednosti navedenih izraza u zadatom odnosu
28.11.2006. Predavanja 76
Klauzule WHERE i HAVING
• Izraz [NOT] BETWEEN Izraz1 AND Izraz2ispituje da li je (ili nije) vrednost izraza u zadatim granicama. Ekvivalentno bi bilo:[NOT] Izraz>=Izraz1 AND Izraz<=Izraz2
• Kolona IS [NOT] NULLispituje da li je (ili nije) vrednost kolone NULL
• ZnakovniIzraz [NOT] LIKE ZnakovnaMaskaZnakovna vrednost – tipa CHARACTERDva specijalna znaka (džokeri):
‘_’ bilo koji znak (može ih biti više), ‘%’ bilo koji broj znakova
28.11.2006. Predavanja 77
Klauzule WHERE i HAVING
• Izraz [NOT] IN (Konstanta {, Konstanta})ispituje da li je (ili nije) vrednost izraza jednaka nekoj od navedenih konstanti (isti tip)
• Izraz {<|<=|=|<>|>=|>} ANY (Konstanta {, Konstanta})ispituje da li je (ili nije) vrednost izraza u navedenom odnosu sa bar jednom konstantom
• Izraz {<|<=|=|<>|>=|>} ALL (Konstanta {, Konstanta})ispituje da li je (ili nije) vrednost izraza u navedenom odnosu sa svim navedenim konstantama (zahteva se isti tip)
28.11.2006. Predavanja 78
Klauzule WHERE i HAVING
• Primeri upotrebe: Upiti za RBP BIBLIOTEKA sa dobijenim rezultatima
• Upit koji daje šifre članova i ukupna trajanja pozajmica od 5 do 10 dana:SELECT SifC,SUM(Dana)
FROM Pozajmica GROUP BY SifCHAVING SUM(Dana) BETWEEN 5 AND 10;
• Upit koji daje nazive svih naslova u kojima se nalazi reč “jezik”SELECT Naziv
FROM Naslov WHERE Naziv LIKE %jezik% ;
28.11.2006. Predavanja 79
Klauzule WHERE i HAVING
• Upit koji daje šifre knjiga koje odgovaraju naslovima šifara “RBP0” i “RK00”SELECT SifK
FROM KnjigaWHERE SifN IN (‘RBP0’,’RK00’);
• Prethodni upit, uz upotrebu ANY formeSELECT SifK
FROM KnjigaWHERE SifN ANY (‘RBP0’,’RK00’);
• Upit koji daje šifre naslova za sve knjige osim za one sa šiframa ‘001’, ‘002’, ‘003’SELECT DISTINCT SifN
FROM KnjigaWHERE SifK <> ALL (‘001’,’002’, ‘003’);28.11.2006. Predavanja 80
Upiti sa podupitima
• Definicija podupita:– SELECT naredba koja se nalazi u sklopu WHERE i
HAVING klauzula– Izvršavanje podupita prethodi vrednovanju predikata u
datim klauzulama
28.11.2006. Predavanja 81
Upiti sa podupitima
• Klasifikacija podupita po načinu izvršavanja:– Nekorelisani podupit – njegovo izvršavanje ne zavisi od
izvršavanja spoljnog upita; Izvršava se samo jednom – na početku.
– Korelisani podupit – njegovo izvršavanje zavisi od spoljnog upita; Izvršava se za svaki red tabele koju obrađuje spoljni upit
• Posebna forma prostog predikata:[NOT] EXISTS (R-Upit)Utvrđuje se ishod podupita. Ako R-Upit kao rezultat daje bar jedan red, EXISTS daje vrednost “istina”. U suprotnom je “nije istina”.
28.11.2006. Predavanja 82
Upiti sa podupitima
• Primer 1: Sastaviti upit koji daje podatke o pozajmicama natprosečnog trajanja. 1) Određuje se prosek trajanja svih pozajmica2) Trajanje svake pozajmice poredimo sa dobijenom srednjom vrednosti SELECT *
FROM Pozajmica WHERE Dana > (SELECT AVG (Dana)
FROM Pozajmica);• Radi se o nekorelisanom podupitu
28.11.2006. Predavanja 83
Upiti sa podupitima
• Primer 2: Sastaviti upit koji daje imena članova čije je ukupno trajanje pozajmica veće od 10 dana. Za svakog člana iz tabele Clan treba prema njegovoj šifri utvrditi da li je njegovo ukupno trajanje pozajmica iznad 10 SELECT Ime
FROM Clan CWHERE 10 < (SELECT SUM (Dana)
FROM PozajmicaWHERE SifC=C.SifC);
• Podupit je korelisan i izvršava se za svakog člana• Spoljna SELECT određuje kolonu koja se koristi u
podupitu28.11.2006. Predavanja 84
Upiti sa podupitima
• Primer 3: Sastaviti upit koji daje imena članova koji drže knjige. Ovo je primer za korišćenje IN forme predikata. Šifre članova koji drže knjige daje nekorelisani podupit
SELECT ImeFROM Clan WHERE SifC IN (SELECT SifC
FROM Drzi);
28.11.2006. Predavanja 85
Upiti sa podupitima
• Primer 4: Sastaviti upit koji daje podatke o pozajmicama koje su trajale duže od svih pozajmica člana šifre ‘PP0’.
Rešenje primenom ALL konstrukcije SELECT *
FROM Pozajmica WHERE Dana > ALL (SELECT Dana
FROM PozajmicaWHERE SifC=‘PP0’);
28.11.2006. Predavanja 86
Unija, razlika i presek upita
• Primena skupovnih operatora na skupove redova koje daju pojedini upiti
• Upiti koji se kombinuju moraju zadovoljavati uslov unijske kompatibilnosti
• Definicija klauzula:– UNION [ALL] – unija dva upita sa eliminacijom identičnih,
ako se ne naglasi ALL– INTERSECT – presek dva upita, ostaju samo oni redovi
koji se nalaze u rezultatima oba upita– EXCEPT – razlika dva upita, od redova upita ispred
except klauzule ostaju samo oni koji se ne nalaze u rezultatu upita iza te klauzule (MINUS)
28.11.2006. Predavanja 87
Unija, razlika i presek upita
• Primer 1: Sastaviti upit koji daje šifre knjiga koje su bile u prometu Članovi ih drže kod sebe ili su ranije pozajmljivane.
SELECT SifKFROM Drzi
UNIONSELECT DISTINCT SifK
FROM Pozajmica;
28.11.2006. Predavanja 88
Unija, razlika i presek upita
• Primer 2: Sastaviti upit koji daje naslove knjiga koje su kod članova, a ranije nisu pozajmljivane
SELECT DISTINCT NazivFROM Naslov N, Knjiga KWHERE N.SifN=K.SifN
AND SifK IN (SELECT SifKFROM Drzi
EXCEPT SELECT DISTINCT SifK
FROM Pozajmica);28.11.2006. Predavanja 89