baze podataka

89
Baze podataka Baze podataka 28.11.2006. Predavanja 1 Uvod u SQL Jezik relacione BP Lekcija 9 Lekcija 9

Upload: jamal-richard

Post on 31-Dec-2015

34 views

Category:

Documents


1 download

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 Presentation

TRANSCRIPT

Page 1: Baze podataka

Baze podatakaBaze podataka

28.11.2006. Predavanja 1

Uvod u SQL

Jezik relacione BP

Lekcija 9Lekcija 9

Page 2: Baze podataka

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

Page 3: Baze podataka

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

Page 4: Baze podataka

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

Page 5: Baze podataka

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

Page 6: Baze podataka

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

Page 7: Baze podataka

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

Page 8: Baze podataka

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

Page 9: Baze podataka

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

Page 10: Baze podataka

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

Page 11: Baze podataka

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

Page 12: Baze podataka

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

Page 13: Baze podataka

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

Page 14: Baze podataka

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

Page 15: Baze podataka

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

Page 16: Baze podataka

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

Page 17: Baze podataka

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

Page 18: Baze podataka

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

Page 19: Baze podataka

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

Page 20: Baze podataka

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

Page 21: Baze podataka

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

Page 22: Baze podataka

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

Page 23: Baze podataka

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

Page 24: Baze podataka

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

Page 25: Baze podataka

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

Page 26: Baze podataka

Primer

28.11.2006. Predavanja 26

Student Profesor

Predmet

IspitBrInd

Ime

Prezime

Adresa

TelefonEmail

Ime Prezime

NaucnoZvanjeIdProf

IdPredmeta NazivPredmeta

Ocena

Sala

Datum

Vreme

Page 27: Baze podataka

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

Page 28: Baze podataka

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

Page 29: Baze podataka

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

Page 30: Baze podataka

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

Page 31: Baze podataka

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

Page 32: Baze podataka

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

Page 33: Baze podataka

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

Page 34: Baze podataka

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

Page 35: Baze podataka

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

Page 36: Baze podataka

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

Page 37: Baze podataka

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

Page 38: Baze podataka

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

Page 39: Baze podataka

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

Page 40: Baze podataka

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

Page 41: Baze podataka

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

Page 42: Baze podataka

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

Page 43: Baze podataka

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

Page 44: Baze podataka

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

Page 45: Baze podataka

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

Page 46: Baze podataka

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ć

Page 47: Baze podataka

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ć

Page 48: Baze podataka

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

Page 49: Baze podataka

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

Page 50: Baze podataka

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

Page 51: Baze podataka

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ć

Page 52: Baze podataka

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ć

Page 53: Baze podataka

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

Page 54: Baze podataka

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

Page 55: Baze podataka

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

Page 56: Baze podataka

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

Page 57: Baze podataka

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

Page 58: Baze podataka

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

Page 59: Baze podataka

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

Page 60: Baze podataka

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

Page 61: Baze podataka

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

Page 62: Baze podataka

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

Page 63: Baze podataka

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

Page 64: Baze podataka

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

Page 65: Baze podataka

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

Page 66: Baze podataka

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

Page 67: Baze podataka

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

Page 68: Baze podataka

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

Page 69: Baze podataka

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

Page 70: Baze podataka

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

Page 71: Baze podataka

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

Page 72: Baze podataka

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

Page 73: Baze podataka

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

Page 74: Baze podataka

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

Page 75: Baze podataka

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

Page 76: Baze podataka

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

Page 77: Baze podataka

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

Page 78: Baze podataka

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

Page 79: Baze podataka

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

Page 80: Baze podataka

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

Page 81: Baze podataka

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

Page 82: Baze podataka

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

Page 83: Baze podataka

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

Page 84: Baze podataka

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

Page 85: Baze podataka

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

Page 86: Baze podataka

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

Page 87: Baze podataka

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

Page 88: Baze podataka

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

Page 89: Baze podataka

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