Upload
miroslav71
View
26
Download
1
Embed Size (px)
Citation preview
Baze podatakaBaze podataka
SQL 1
SQLJezik relacione BP
SQL - Structured Query Language
Strukturni upitni jezik za RBP - modifikovana rel. algebra Razvio ga je IBM u okviru projekta System R Danas je SQL ugraen u sve vodee SUBP ANSI standard American National Standards Institute Standardizacija:
Zatita programa od zastarevanja Vertikalna kompatibilnost Prenosivost programa na druge raunare
Standardizacija za relacione BP Prvi standard 1986, dopunjen 1989 Znaajnije dopune 1992. (ANSI SQL), 1995., 1999., 2003. Razvoj SQL-a traje i danas
SQL 2
SQL
ta SQL moe da uradi? SQL can execute queries against a database SQL can retrieve data from a database SQL can insert records in a database SQL can update records in a database SQL can delete records from a database SQL can create new databases SQL can create new tables in a database SQL can create stored procedures in a database SQL can create views in a database SQL can set permissions on tables, procedures, and views
SQL 3
SQL
Primena SQL-a kod Web prezentacija Za izgradnju Web sajtova koji prikazuju podatke iz baze
podataka neophodno je sledee: RDBMS database program (i.e. MS Access, SQL Server, MySQL) A server-side scripting language, like PHP or ASP SQL HTML / CSS
SQL 4
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 raunu n-torki
SQL 5
SQL
SQL sadri naredbe za: definisanje relacija (shema) auriranje podataka (unos, izmena, brisanje) postavljanje upita sortiranje i formatiranje ispisa aritmetike operacije nad podacima definisanje pogleda (view) kontrolu sigurnosti itd....
SQL podrava 3 osnovne funkcije BP: definicije, manipulacije i kontrolu
SQL 6
SQL- definicije -
Definicija BP: struktura, koje tabele, koji atributi, koji tipovi, koja ogranienja, pomoni 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
SQL 7
SQL- manipulacije -
Manipulacija BP: upit nad bazom podataka (izvetavanje), auriranje (unos, izmena, brisanje)
(DML Data manipulation Language) SELECT prikaz eljenog sadraja RBP
UPDATE izmena vrednosti kolona tabeleDELETE izbacivanje redova tabeleINSERT dodavanje redova u tabelu
SQL 8
SQL- kontrola -
Kontrola pristupa podacima: koji korisnici imaju pristup, kojim podacima, ta mogu da rade sa tim podacima
(DCL Data Control Language) GRANT (dodeljivanje ovlaenja nad objektima baze
drugim korisnicima od strane vlasnika) REVOKE (ukidanje ovalaenja dodeljenih pomou
GRANT)
SQL 9
SQL
SQL neodgovarajui naziv - nije samo upitni jezik SQL podrava oba reima rada sa BP:
Interaktivni: korisnik zadaje jednu po jednu SQL naredbu, preko tastature, ishod se prikazuje na monitoru, pristup BP je ogranien jedino pravima korisnika
Programski: korisnik pokree program u kome su ugraene SQL naredbe, pristup BP je ogranien pravima korisnika i sadrajem programa
SQL blokovi ugraeni u klasini vii programski jezik
SQL 10
SQL
Logike operacije: AND, OR i NOT Operacije poreenja:
=, , , , 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 pomou zagrada
SQL 11
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), proirena preciznost u odnosu na REAL
DECIMAL(m,n): (DEC(m,n)), decimalni broj sa ili bez predznaka, m-cifara, a n-decimalnih
SQL 12
SQLtipovi podataka
CHARACTER(n): (CHAR(n)), niz znakova fiksne duine n Konstanta tipa CHAR se pie izmeu jednostrukih
navodnika VARCHAR(n) - niz znakova duine najvie n TEXT tekst proizvoljne duine Praktino sve implementacije SQL-a podravaju dodatne
tipove podataka kao to su: BOOLEAN TRUE/FALSE (tano/netano) DATE datum (2004-12-01) TIME vreme (16:50:07)
SQL 13
SQL- sintaksa -
SQL ne pravi razliku izmeu velikih i malih slova (case insensitive). Sledee 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 protee u vie redova */
Za nazive (imena) se ne smeju koristiti rezervisane rei
SQL 14
SQL- sintaksa -
Separator naredbi:naredba1;naredba2;
FORMAT naredbi: Sledee naredbe su ispravno napisane SELECT *
FROM studentWHERE BrInd 100;
SELECT * FROM student WHERE BrInd 100; SELECT *
FROM studentWHERE
BrInd 100;SQL 15
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 vie ogranienja za kolone, koje ih imaju Jedno ili vie ogranienja za svaku tabelu, ako postoje
SQL 16
Kreiranje tabela
Sintaksa naredbe kreiranja tabele:CREATE TABLE ImeTabele (
ImeKolone TipKolone OgranienjeKolone ...{, ImeKolone TipKolone OgranienjeKolone ...}[OgranienjeTabele {, OgranienjeTabele}]);
ImeTabele i ImeKolone pravila koja vae za veinu 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 vie
ogranienja za tu kolonu
SQL 17
Kreiranje tabela
Osnovne klauzule OgranienjeKolone(ogranienje integriteta): 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 logikim izrazom Predikat. U izrazu se ne mogu navoditi druge kolone
SQL 18
Kreiranje tabela
DEFAULT=Konstanta ako se prilikom unoenja 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 kljua u toj tabeli ili
NULL (ako nema NOT NULL ogranienja)
SQL 19
Kreiranje tabela
Za celu tabelu se mogu zadati: ni jedno, jedno ili vie ogranienja.
Ogranienja mogu da vae za jednu ili vie kolona UNIQUE(ListaKolona) nije dozvoljeno ponavljanje istih
vrednosti kombinacija PRIMARY KEY(ListaKolona) navedene kolone su primarni
klju,... Konstrukcija ListaKolona oznaava:
ImeKolone {, ImeKolone}SQL 20
Kreiranje tabela
Klauzule za dinamiku specifikaciju referencijalnog integriteta, ta se deava u sluaju pokuaja brisanja reda u ciljnoj
tabeli ImeTabele, ta se deava u sluaju pokuaja izmene vrednosti
primarnog kljua u ciljnoj tabeli ImeTabele DELETE OF ImeTabele
{RESTRICTED CASCADES NULLS} UPDATE OF ImeTabele
{RESTRICTED CASCADES NULLS}
SQL 21
Kreiranje tabela
Sva ogranienja navedena u CREATE TABLE su aktivna u svakom trenutku postojanja tabele
SUBP e odbiti svaki pokuaj sa tabelom, koji je u suprotnosti sa ogranienjima
Olakica za projektante i programere BP Provere se ne moraju ugraivati u aplikativne programe Deklarativna mo naredbe CREATE TABLE je od velikog
znaaja, naroito kod dinamike specifikacije referencijalnog integriteta
SQL 22
Primer
SQL 23
Student Profesor
Predmet
IspitBrInd
Ime
Prezime
Adresa
TelefonEmail
Ime Prezime
NaucnoZvanjeIdProf
IdPredmeta Naziv
Ocena
Sala
Datum
Vreme
Primer
Primer: Student(BrInd, Ime, Prezime, Adresa, Telefon, Email) Profesor(IdProf, Ime Prezime, NaucnoZvanje) Predmet(IdPredmet, Naziv) Ispit(Brind, IdPredmet, IdProf, Ocena, Sala, Datum, Vreme)
SQL 24
Primer
Kreiranje tabele Studenti CREATE TABLE Studenti (
BrInd INT PRIMARY KEY CHECK(0
Primer
Kreiranje tabele Predmet CREATE TABLE Predmet (
IdPredmet VARCHAR(20) PRIMARY KEY, Naziv VARCHAR(20) NOT NULL UNIQUE);
SQL 26
Primer
CREATE TABLE Ispit (BrInd INT REFERENCES Student, IdPredmet INT REFERENCES Predmet,IdProf INT REFERENCES Profesor,Ocena INT NOT NULL CHECK (5Ocena10),Sala CHAR(5),Datum DATE,Vreme TIME,UNIQUE (Sala, Datum, Vreme),PRIMARY KEY (BrInd,IdPredmeta,IdProf),UPDATE OF Student CASCADES,DELETE OF Student RESTRICTED,UPDATE OF Predmet CASCADES,DELETE OF Predmet RESTRICTED,UPDATE OF Profesor CASCADES,DELETE OF Profesor RESTRICTED);
SQL 27
Uklanjanje tabela
Izbor dinamike specifikacije referencijalnih integriteta, kod uklanjanja predstavlja delikatnu operaciju
Ako se nepromiljeno koristi RESTRICTED, namee se krut reim, npr. ne mogu se ukloniti pogreno uneti podaci iz tabele
Naredba uklanjanja tabele iz BPDROP TABLE ImeTabele ;
Briu se u BP sve informacije o tabeli ImeTabele Zavisno od SUBP-a:
tabela koja se uklanja mora biti prazna (u suprotnom SUBP nee izvriti tu naredbu) ili
ne mora biti prazna (SUBP e obavezno izvriti naredbu)
SQL 28
Kreiranje indeksa
Indeks pomona datoteka za ubrzanje pristupa podacima u osnovnoj datoteci Poveanje brzine obrade podataka u osnovnim tabelama Analogija sa knjigom i indeksima
U osnovnoj datoteci zapisi se nalaze u nekom fizikom redosledu (redosled unoenja)
Indeks moe se preureivati u rastuoj ili opadajuoj vrednosti indeksnog niza
Sintaksa naredbe kreiranja indeksa:CREATE [UNIQUE] INDEX ImeIndeksa
ON ImeTabele (ListaKolona)
SQL 29
Kreiranje indeksa
UNIQUE opcija da indeks mora biti unikatan. U tabeli na koju se indeks odnosi ne sme se vie puta ponoviti vrednost ListaKolona ImeIndeksa unikatni naziv indeksa u BP Ime Tabele tabela na koju se indeks odnosi ListaKolona navoenje jedne ili vie kolona, po kojima
se formira INDEKS Nad istom tabelom se moe definisati vie indeksa (za
razliite pristupe podacima) Indeks se moe kreirati odmah (dok je tabela prazna) ili
naknadnoSQL 30
Kreiranje i uklanjanje indeksa
Klauzula UNIQUE u definiciji indeksa ima efekat na klauzulu UNIQUE kod tabele: SUBP odbija svaku izmenu podataka u tabeli koja
naruava unikatnost indeksa SUBP odbija kreiranje unikatnog indeksa za tabelu iji
zateeni sadraj naruava tu unikatnost Indeks se moe bilo kada i bez obzira na sadraj svoje
tabele ukloniti naredbom:DROP INDEX ImeIndeksa
SQL 31
Indeksi
Primer: Ako se eli brz pristup podacima u tabeli Ispit po dva osnova, po BrInd i IdPredmeta, kreiraju se dva indeksa:CREATE INDEX Ispit_i1 ON Ispit(BrInd);CREATE INDEX Ispit_i2 ON Ispit(IdPredmeta);
SQL 32
Ispit (BrInd, IdPredmeta, ...)AAA01 PJBBD56 PJABC23 RMHHH11 ITABC23 ITAAA10 BPBBB04 ITHHH11 BP
Ispit_i2 (IdPredmeta)BPBPITITITPJPJRM
Ispit_i1 (BrInd)AAA01AAA10ABC23ABC23BBB04BBD56HHH11HHH11
Indeksi
Napomene: Svaka indeksna datoteka ima dva dela:
ListaKolona, po kojima se vri pretraivanje i po kojima se vri ureivanje indeksa
Indeks - slui za vezu sa osnovnom datot. Indeks za vezu sa osnovnom datotekom je redni broj
unosa
SQL 33
Indeksi
SQL 34
ind BrInd IdPredmeta
IdProf Ocena ...
1 AAA01 PJ DZ
2 BBD56 PJ DZ
3 ABC23 RM MV
4 HHH11 IT RP
5 ABC23 IT RP
6 AAA10 BP MV
7 BBB04 IT RP
8 HHH11 BP MV
ind BrInd
1 AAA01
6 AAA10
3 ABC23
5 ABC23
7 BBB04
2 BBD56
4 HHH11
8 HHH11
Ispit Ispit_i1
Indeksi
Nisu svi atributi dobri kandidati za indeks. Npr. bit-map, text ili slika
Po pravilu su strani kljuevi kandidati za indeks Indeksiranje ima i svojih nedostataka: Prilikom auriranja
osnovne tabele (brisanje, unoenje), mora se vriti reindeksiranje, pa se gubi na vremenu.
Tabele sa malim brojem podataka u zapisu se ne indeksiraju, jer se pretraga moe efikasno izvriti brzim raunarima.
SQL 35
Izmena postojee 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 poveati duinu za Br_ZapALTER TABLE OdeljenjeMODIFY (Br_Zap NUMBER(6));
SQL 36
Kreiranje i uklanjanje pogleda
Osnovne tabele fiziki 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 nasleuje tipove kolona iz osnovnih tabela Uklanjanje DROP VIEW ImePogleda;
SQL 37
Prednosti pogleda
Jednostavnost korienja, uproavaju 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 moe da se koristi u podupitima, u
WHERE i HAVING klauzulama Zamenjuje komplikovane upite
SQL 38
UPIT- SELECT -
SQL je jezik veoma visokog nivoa (very-high-level language) Programer izbegava korienje komplikovanih manipulacija nad
podacima (to je neophodno u jezicima kao to je C++, Java, itd.)
Pogodnost SQL-a Upiti su veoma dobro optimizovani Upiti se efikasno izvravaju
SQL 39
UPIT- SELECT -
Najznaajnija i najee koriena SQL naredba za manipulaciju podacima
Kod svakog upita zadajemo (u principu): Koje podatke traimo kao rezultat, Iz kojih tabela to traimo, Koji uslov treba da zadovolje podaci, da bi bili ukljueni u
rezultat U kom redosledu elimo prikaz podataka
SQL 40
UPIT- SELECT -
Principska ema za postavljanje upita je:SELECT koji atributi
FROM iz kojih tabelaWHERE uslov nad zapisima date tabele;
SQL 41
UPIT- SELECT -
Tipian SQL upit:SELECT A1, A2, ..., An
FROM r1, r2, ...rmWHERE P
gde su Ai atributi, ri relacije, a P je uslov selekcije (predikat) Navedeni upit je ekvivalentan sledeem upitu relacione
algebreA1, A2, ..., An(P(r1r2 ... rn))
Rezultat SQL upita je opet relacija
SQL 42
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 vie izraza odvojenih zarezima (R-lista)
Rezultat upita ne mora biti relacija (unikatnost)
SQL 43
Prost upit nad jednom tabelom
Sintaksa SELECT * {[ALL DISTINCT] R-Lista}
FROM ImeTabele[WHERE R-Predikat][ORDER BY ImeKolone [DESC]
{, ImeKolone [DESC]} ]; * - Specijalni sluaj R-liste, kada u rezultat elimo da
ukljuimo sve kolone tabele ALL iz rezultata neuklanja istovetne redove,
DISTINCT suprotno. Podrazumeva se ALL. R-Lista se zadaje kao jedan ili vie R-Izraza, pored naziva
kolone javljaju se i konstanteSQL 44
Prost upit nad jednom tabelom
Klauzula FROM (odakle), specificira se ImeTabele. To je ime osnovne tabele ili pogleda nad kojim se vri upit. Ovo je obavezna klauzula.
R_Predikat , uslov prikazivanja rezultata, to je logiki izraz izraunljiv nad svakim pojedinim redom
tabele. Rezultat upita se dobija samo za one vrednosti
R_Predikata koje daju istinitosnu vrednost. Najee je to relacioni izraz (>,
Prost upit nad jednom tabelom
Najjednostavniji mogui 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 obino trai prikaz samo odreenih kolona, ili prikaz svih kolona u redosledu koji je drugaije odreen.
Ovo odgovara operaciji projekcije, ali se ne eliminiu viestruka ponavljanja istih vrednosti
SQL 46
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 ;
SQL 47
BrInd Ime Prezime1 Marko Markovi2 Petar Petrovi3 Aleksa Peri
Student
SELECT
BrInd Ime Prezime1 Marko Markovi2 Petar Petrovi3 Aleksa Peri
Prost upit nad jednom tabelom
Upit za prikaz cele tabele u eljenom redosleduSELECT *
FROM StudentORDER BY Ime;
SQL 4828.11.2006. Predavanja 48
BrInd Ime Prezime1 Marko Markovi2 Petar Petrovi3 Aleksa Peri
Student
SELECT
BrInd Ime Prezime1 Aleksa Peri2 Marko Markovi3 Petar Petrovi
Prost upit nad jednom tabelom
Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT Fakultet
FROM Student; Odgovara upitu relacione algebreFakultet(Student)
SQL 49
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
FakultetPFBFIMFIMFTHMPFBPFB
SELECT
Student
Prost upit nad jednom tabelom
Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata :SELECT DISTINCT Fakultet
FROM Student ;
SQL 5028.11.2006. Predavanja
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
FakultetPFBFIMFTHM
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 StudentORDER BY Fakultet ;
SQL 5128.11.2006. Predavanja
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
FakultetFIMFTHMPFB
SELECT
Student
Prost upit nad jednom tabelom
Upit za prikaz vie kolona sa zadavanjem uslova:SELECT BrInd, Ime, Prezime
FROM StudentWHERE Fakultet=FIM;
SQL 52
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
SELECT
Student
BrInd Ime Prezime2 Petar Petrovi3 Aleksa Peri
Prost upit nad jednom tabelom
Upit za prikaz dve kolone sa zadavanjem uslova, a u eljenom redosledu:SELECT BrInd, Ime, Prezime
FROM StudentWHERE Fakultet=FIMORDER BY Ime;
SQL 53
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
SELECT
Student
BrInd Ime Prezime3 Aleksa Peri2 Petar Petrovi
Prost upit nad jednom tabelom
U WHERE klauzuli se mogu koristiti logike i aritmetike operacije:SELECT BrInd, Ime, Prezime
FROM StudentWHERE Fakultet=FIM OR Fakultet=FTHMORDER BY Ime;
SQL 54
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
SELECT
Student
BrInd Ime Prezime3 Aleksa Peri4 Marko Mari2 Petar Petrovi
Prost upit nad jednom tabelom
Komanda SELECT moe da sadri aritmetike izraze koji ukljuuju operacije, +, , , /, na konstantama ili atributima:
SELECT SifP, NazivP, Cena 100FROM Racun;
SQL 55
SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00
SELECT
Racun
SifP NazivP Cena005 P1 180000,00010 P2 30000,00020 P3 25000,00001 P3 110000,00003 P3 60000,00011 P1 70000,00
Prost upit nad jednom tabelom
Pojedine vrednosti atributa mogu NULL vrednost Predikat IS NULL se koristi za proveru null vrednosti Npr: Nai sve ifre prouzvoda kod kojih je cena NULL
SELECT SifPFROM RacunWHERE Cena IS NULL ;
SQL 56
SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 NULL020 P3 5 250,00001 P3 2 1100,00003 P3 4 NULL011 P1 3 NULL
SELECT
Racun
SifP010003011
Prost upit nad jednom tabelomsa 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 vie izraza Zadavanje redosleda redova u rezultatu nema smisla
(dobija se samo jedan red)
SQL 57
Prost upit nad jednom tabelomsa svodnim rezultatom
Sintaksa za SELECT (prost upit nad jednom T sa svodnim rezultatom)SELECT G-Izrazi
FROM ImeTabele[WHERE R-Predikat];
G-Izrazi: najee ih ine posebne SQL funkcije (svodne ili agregatne funkcije)
Svodne funkcije: SUM (ImeKolone) Nalazi sumu svih ne-NULL
vrednosti zadate kolone AVG (ImeKolone) Nalazi prosenu vrednost svih ne-
NULL vrednosti zadate koloneSQL 58
Prost upit nad jednom tabelomsa 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 razliitih ne-NULL vrednosti zadate kombinacije kolona
SQL 59
Prost upit nad jednom tabelom sa izvedenim rezultatom
Upit za prikaz ukupnog broja studenata (odgovara broju redova u tabeli Student)SELECT COUNT(*)
FROM Student ;
SQL 60
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 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 razliitih vrednosti kolone Fakultet u tabeli Student)SELECT COUNT(DISTINCT Fakultet)
FROM Student ;
SQL 61
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
SELECT 3
Student
Prost upit nad jednom tabelomsa izvedenim rezultatom
Upit za prikaz broja studenata koji su upisali FTHMSELECT COUNT(*)
FROM Student WHERE Fakultet=FTHM;
SQL 62
BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB
SELECT 1
Student
Prost upit nad jednom tabelomsa izvedenim rezultatom
Upit za prikaz sume cena svih proizvoda:SELECT SUM(Cena)
FROM Racun;
SQL 63
SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00
SELECT 1800+300+250+1100 ....
Racun
Prost upit nad jednom tabelomsa izvedenim rezultatom
Upit za prikaz minimalne i maksimalne cene iz rauna:SELECT MIN(Cena), MAX(Cena)
FROM Racun;
SQL 64
SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00
SELECT 250 1800
Racun
Prost upit nad jednom tabelomsa izvedenim rezultatom
Upit za prikaz sume i proseka cena za proizvod P1:SELECT SUM(Cena), AVG(Cena)
FROM RacunWHERE NazivP= P1;
Primedba: rezultat AVG funkcije preuzima tip podataka od argumenta (tip kolone)
SQL 65
SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00
SELECT 2500 1250
Racun
Prost upit nad jednom tabelomsa izvedenim rezultatom
Rezultat bilo kog aritemitikog izraza sa NULL je NULL Na primer: 10+NULL daje NULL Agregatne funkcije ignoriu NULL vrednosti
(izuzev COUNT(*) Poreenje sa NULL daje unknown
Npr: 10
Prost upit nad jednom tabelomsa izvedenim rezultatom
Istinosna logika sa unknown: OR: (unknown OR true) = true,
(unknown OR false) = unknown(unknown OR unknown) = unknown
AND: (true AND unknown) = unknown,(false AND unknown) = false,(unknown AND unknown) = unknown
NOT: (NOT unknown) = unknown P is unknown je true ako je predikat P unknown Rezultat predikata komande WHERE se tretira kao false
ako je unknown
SQL 67
Prost upit nad jednom tabelomsa izvedenim rezultatom
Upit koji nema smisla:SELECT SifC, SUM(Dana)
FROM Pozajmica;
Ovde je SifC podatak na nivou jednog reda, a SUM(Dana) podatak sveden iz vie redova
Pozajmica (SifP,SifC,SifK,Dana)
SQL 68
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 sledei: Od tabele Pozajmica formira se meurezultat sa
kolonama (SifC i Dana) grupisane po SifC Formira se nova tabela sa jednom vrednou za SifC i
izraunate SUM (Dana) po SifC Prikazati redove koji zadovoljavaju traeni uslov
SQL 69
Svodni upit nad jednom tabelom
SQL 70
SifP SifC SifK Dana1 JJ0 004 52 PP0 007 23 JJ1 005 64 JJ0 008 75 PP0 002 46 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 vri grupisanje, i koje svodne
funkcije se trae unutar grupe Koji uslov se zadaje za ukljuenje 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]} ];
SQL 71
Svodni upit nad jednom tabelom
WHERE, zadaje se uslov koji svaki red u tabeli ImeTabele mora da zadovolji
GROUP BY, navodi se jedna ili vie kolona po kojima se vri grupisanjeKolone koje se navode ne moraju biti uz SELECTKolene koje su uz SELECT moraju se nai uz GRUP BY
HAVING, formira se uslov koji svaki red formiran svoenjem mora da zadovolji da bi bio ukljuen 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
SQL 72
Svodni upit nad jednom tabelom
SQL 73
SifP SifC SifK Dana1 JJ0 004 52 PP0 007 23 JJ1 005 64 JJ0 008 75 PP0 002 46 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
SQL 74
Svodni upit nad jednom tabelom
Upit za prikaz ifara lanova ija je suma trajanja pozajmice vea 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 due od 2 danaSELECT SifC,COUNT(*), SUM(Dana)
FROM Pozajmica JJ0 2 12WHERE Dana>2 PP0 1 4GROUP BY SifC; JJ1 2 9
SQL 75
Svodni upit nad jednom tabelom
Primer
SQL 76
BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8
Svodni upit nad jednom tabelom
SELECT BrInd,AVG(Ocena)FROM IspitGROUP BY BrInd;
SQL 77
BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8
Ispit
Svodni upit nad jednom tabelom
SELECT IdPred,AVG(Ocena)FROM IspitGROUP BY IdPred;
SQL 78
BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8
Ispit
Svodni upit nad jednom tabelom
SELECT IdProf,AVG(Ocena)FROM IspitGROUP BY IdProf;
SQL 79
BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8
Ispit
Svodni upit nad jednom tabelom
SELECT IdProf,IdPred,AVG(Ocena)FROM IspitGROUP BY IdProf, IdPred;
SQL 80
BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8
Ispit
Upiti nad vie tabela
Podrazumevaju spajanje tabela po nekom uslovu Iza FROM klauzule SELECT naredbe navodi se vie tabela
odvojenih zarezima Sintaksa:
SELECT * {[ALL DISTINCT] R-Lista}FROM ImeTabele [NadimakTabele] {,}[WHERE R-Predikat][ORDER BY ImeKolone [DESC]
{, ImeKolone [DESC]} ];
SQL 81
Upiti nad vie tabela
Za kolone koje se nalaze u vie tabele obavezno je navoenje ImeTabele.ImeKolone NadimakTabele.ImeKolone
R-Predikat- navodi se uslov spajanja u formi uslova jednakosti vrednosti odgovarajuih kolona u tabelama
Upit nad vie tabela bez uslova spajanja daje kao rezultat Dekartov proizvod tih tabela
SQL 82
Upiti nad vie 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 ;
SQL 83
Upiti nad vie tabela
Upit koji daje ifre i nazive naslova knjiga koje lanovi dre 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;
SQL 84
Upiti nad vie 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;
SQL 85
Prost upit sa svodnim rezultatom nad vie tabela
Sintaksa:SELECT G-Lista
FROM 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
SQL 86
Klauzule WHERE i HAVING
Predikati to su relacioni izrazi, koji se mogu kombinovati Predikati: prosti i sloeni Prost predikat: elementarni logiki izraz izraunljiv nad
svakim redom neke tabele Sloen predikat: formira se od prostih, primenom logikih
operatora AND, OR i NOT Forme prostih predikata:
Izraz1 {} Izraz2ispituje da li su vrednosti navedenih izraza u zadatom odnosu
SQL 87
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
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)
SQL 89
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 jezikSELECT Naziv
FROM Naslov WHERE Naziv LIKE %jezik% ;
SQL 90
Klauzule WHERE i HAVING
Upit koji daje ifre knjiga koje odgovaraju naslovima ifara RBP0 i RK00SELECT 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, 003SELECT DISTINCT SifN
FROM KnjigaWHERE SifK ALL (001,002, 003);SQL 91
Upiti sa podupitima
Podupit (ugnjedeni upit) je SELECT-FROM-WHERE izraz zadat unutar drugog izraza.
Definicija podupita: SELECT naredba koja se nalazi u sklopu WHERE i
HAVING klauzula Izvravanje podupita prethodi vrednovanju predikata u
datim klauzulama
SQL 92
Upiti sa podupitima
Klasifikacija podupita po nainu izvravanja: Nekorelisani podupit njegovo izvravanje ne zavisi od
izvravanja spoljnog upita; Izvrava se samo jednom na poetku.
Korelisani podupit njegovo izvravanje zavisi od spoljnog upita; Izvrava se za svaki red tabele koju obrauje spoljni upit
Posebna forma prostog predikata:[NOT] EXISTS (R-Upit)Utvruje se ishod podupita. Ako R-Upit kao rezultat daje bar jedan red, EXISTS daje vrednost istina. U suprotnom je nije istina.
SQL 93
Upiti sa podupitima
Primer 1: Sastaviti upit koji daje podatke o pozajmicama natprosenog trajanja.1) Odreuje 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
SQL 94
Upiti sa podupitima
Primer 2: Sastaviti upit koji daje imena lanova ije je ukupno trajanje pozajmica vee 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 izvrava se za svakog lana Spoljni SELECT odreuje kolonu koja se koristi u
podupituSQL 95
Upiti sa podupitima
Primer 3: Sastaviti upit koji daje imena lanova koji dre knjige.Ovo je primer za korienje IN forme predikata. ifre lanova koji dre knjige daje nekorelisani podupit
SELECT ImeFROM Clan WHERE SifC IN (SELECT SifC
FROM Drzi);
SQL 96
Upiti sa podupitima
Primer 4: Sastaviti upit koji daje podatke o pozajmicama koje su trajale due od svih pozajmica lana ifre PP0.
Reenje primenom ALL konstrukcije
SELECT *FROM Pozajmica WHERE Dana > ALL (SELECT Dana
FROM PozajmicaWHERE SifC=PP0);
SQL 97
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 identinih,
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)
SQL 98
Unija, razlika i presek upita
Primer 1: Sastaviti upit koji daje ifre knjiga koje su bile u prometu lanovi ih dre kod sebe ili su ranije pozajmljivane.
SELECT SifKFROM Drzi
UNIONSELECT DISTINCT SifK
FROM Pozajmica;
SQL 99
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
EXCEPTSELECT DISTINCT SifK
FROM Pozajmica);SQL 100