You are on page 1of 100

Baze podataka

SQL
Jezik relacione BP

SQL

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

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

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

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

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

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 BP
DROP TABLE uklanjanje tabele iz BP
ALTER TABLE izmena definicije tabele
CREATE INDEX kreiranje indeksa
DROP INDEX uklanjanje indeksa
CREATE VIEW kreiranje pogleda
DROP VIEW uklanjanje pogleda
SQL

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 tabele
DELETE izbacivanje redova tabele
INSERT dodavanje redova u tabelu
SQL

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

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

SQL
tipovi 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

SQL
tipovi 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 student
WHERE BrInd 100;
SELECT * FROM student WHERE BrInd 100;
SELECT *
FROM
student
WHERE
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
Datum
Sala

Prezime
Ime

Vreme

Ocena

Ime

Prezime

BrInd
Ispit

Student

Profesor

Adresa
IdProf

Email
Telefon

NaucnoZvanje

Predmet
IdPredmeta

Naziv

SQL

23

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<BrInd300),
Ime
VARCHAR(20)
NOT NULL,
Prezime VARCHAR(20)
NOT NULL,
Adresa
VARCHAR(50)
NOT NULL,
Telefon
VARCHAR(15),
Email
VARCHAR(30));

SQL

25

Primer

Kreiranje tabele Predmet


CREATE TABLE Predmet (
IdPredmet
VARCHAR(20)
Naziv
VARCHAR(20)

SQL

PRIMARY KEY,
NOT NULL UNIQUE);

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 BP
DROP 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
naknadno
SQL

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);

Ispit_i1 (BrInd)
AAA01
AAA10
ABC23
ABC23
BBB04
BBD56
HHH11
HHH11

Ispit (BrInd, IdPredmeta, ...)


AAA01 PJ
BBD56 PJ
ABC23 RM
HHH11 IT
ABC23 IT
AAA10 BP
BBB04 IT
HHH11 SQL
BP

Ispit_i2 (IdPredmeta)
BP
BP
IT
IT
IT
PJ
PJ
RM 32

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
Ispit

Ispit_i1

ind

BrInd

IdPredme
ta

IdProf

AAA01

PJ

BBD56

Ocena

ind

BrInd

DZ

AAA01

PJ

DZ

AAA10

ABC23

RM

MV

ABC23

HHH11

IT

RP

ABC23

ABC23

IT

RP

BBB04

AAA10

BP

MV

BBD56

BBB04

IT

RP

HHH11

HHH11

BP

MV

HHH11

SQL

...

34

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 ImeTabele
ADD (ImeKolone Tip, [ImeKolone Tip]...);
Primer: U tabelu Odeljenje dodati kolone Sef_Od i Br_Zap
ALTER TABLE Odeljenje
ADD (ef_Od INTEGER, Br_Zap NUMBER(2));
Primer: U istoj tabeli poveati duinu za Br_Zap
ALTER TABLE Odeljenje
MODIFY (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 tabela
WHERE uslov nad zapisima date tabele;

SQL

41

UPIT
- SELECT -

Tipian SQL upit:


SELECT A1, A2, ..., An
FROM r1, r2, ...rm
WHERE P
gde su Ai atributi, ri relacije, a P je uslov selekcije (predikat)
Navedeni upit je ekvivalentan sledeem upitu relacione
algebre
A1, 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 konstante
SQL
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 (>,<,=,) sa kolonama, a
sa desne strane moe se javiti i konstanta
ORDER BY daje eljeni redosled prikaza rezultata.
Podrazumeva se rastui redosled (ASC). U suprotnom se
navodi DESC uz odgovarajuu kolonu. Uvek je poslednja
klauzula u SELECT bloku. SQL
45

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 ;
Student
BrInd Ime

Prezime

BrInd Ime

Prezime

Marko

Markovi

Marko

Markovi

Petar

Petrovi

Petar

Petrovi

Aleksa

Peri

Aleksa

Peri

SELECT

SQL

47

Prost upit nad jednom tabelom

Upit za prikaz cele tabele u eljenom redosledu


SELECT *
FROM Student
ORDER BY Ime;

Student
BrInd Ime

Prezime

BrInd Ime

Prezime

Marko

Markovi

Aleksa

Peri

Petar

Petrovi

Marko

Markovi

Aleksa

Peri

Petar

Petrovi

28.11.2006.

SELECT

SQL
Predavanja

48
48

Prost upit nad jednom tabelom


Upit za prikaz samo jedne kolone iz tabele i bez
eliminacije duplikata
SELECT Fakultet
FROM Student;
Odgovara upitu relacione algebre
Fakultet(Student)
Student
BrInd Ime

Prezime

Fakultet

Fakultet

Marko

Markovi

PFB

PFB

Petar

Petrovi

FIM

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

FTHM

Petar

Lazi

PFB

PFB

Jovan

Mari

PFB

SELECT

SQL

FIM

PFB

49

Prost upit nad jednom tabelom

Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom


duplikata :
SELECT DISTINCT Fakultet
FROM Student ;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

28.11.2006.

Fakultet
SELECT

PFB
FIM
FTHM

SQL
Predavanja

50

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 ;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

28.11.2006.

Fakultet
SELECT

FIM
FTHM
PFB

SQL
Predavanja

51

Prost upit nad jednom tabelom

Upit za prikaz vie kolona sa zadavanjem uslova:


SELECT BrInd, Ime, Prezime
FROM Student
WHERE Fakultet=FIM;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

SELECT

SQL

BrInd Ime

Prezime

Petar

Petrovi

Aleksa

Peri

52

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;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

SELECT

SQL

BrInd Ime

Prezime

Aleksa

Peri

Petar

Petrovi

53

Prost upit nad jednom tabelom

U WHERE klauzuli se mogu koristiti logike i aritmetike


operacije:
SELECT BrInd, Ime, Prezime
FROM Student
WHERE Fakultet=FIM OR Fakultet=FTHM
ORDER BY Ime;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

SELECT

SQL

BrInd Ime

Prezime

Aleksa

Peri

Marko

Mari

Petar

Petrovi
54

Prost upit nad jednom tabelom


Komanda SELECT moe da sadri aritmetike izraze koji
ukljuuju operacije, +, , , /, na konstantama ili atributima:
SELECT SifP, NazivP, Cena 100
FROM Racun;
Racun
SifP

NazivP

Kolicina

Cena

SifP

NazivP

Cena

005

P1

1800,00

005

P1

180000,00

010

P2

300,00

010

P2

30000,00

020

P3

250,00

020

P3

25000,00

001

P3

1100,00

001

P3

110000,00

003

P3

600,00

003

P3

60000,00

011

P1

700,00

011

P1

70000,00

SELECT

SQL

55

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 SifP
FROM Racun
WHERE Cena IS NULL ;
Racun
SifP

NazivP

Kolicina

Cena

005

P1

1800,00

010

P2

NULL

020

P3

250,00

001

P3

1100,00

003

P3

NULL

011

P1

NULL

SifP
SELECT

010
003
011

SQL

56

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 vie izraza
Zadavanje redosleda redova u rezultatu nema smisla
(dobija se samo jedan red)

SQL

57

Prost upit nad jednom tabelom


sa 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 neNULL vrednosti zadate kolone
SQL
58

Prost upit nad jednom tabelom


sa izvedenim rezultatom
MIN (ImeKolone)
Nalazi minimalnu vrednost svih neNULL 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 kolona
Sa 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 ;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

SELECT

SQL

60

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 ;

Student

BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

SELECT

SQL

61

Prost upit nad jednom tabelom


sa izvedenim rezultatom
Upit za prikaz broja studenata koji su upisali FTHM
SELECT COUNT(*)
FROM Student
WHERE Fakultet=FTHM;
Student
BrInd Ime

Prezime

Fakultet

Marko

Markovi

PFB

Petar

Petrovi

FIM

Aleksa

Peri

FIM

Marko

Mari

FTHM

Petar

Lazi

PFB

Jovan

Mari

PFB

SELECT

SQL

62

Prost upit nad jednom tabelom


sa izvedenim rezultatom
Upit za prikaz sume cena svih proizvoda:
SELECT SUM(Cena)
FROM Racun;
Racun
SifP

NazivP

Kolicina

Cena

005

P1

1800,00

010

P2

300,00

020

P3

250,00

001

P3

1100,00

003

P3

600,00

011

P1

700,00

SELECT

SQL

1800+300+250+1100 ....

63

Prost upit nad jednom tabelom


sa izvedenim rezultatom
Upit za prikaz minimalne i maksimalne cene iz rauna:
SELECT MIN(Cena), MAX(Cena)
FROM Racun;
Racun
SifP

NazivP

Kolicina

Cena

005

P1

1800,00

010

P2

300,00

020

P3

250,00

001

P3

1100,00

003

P3

600,00

011

P1

700,00

SELECT

SQL

250

1800

64

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)
Racun
SifP

NazivP

Kolicina

Cena

005

P1

1800,00

010

P2

300,00

020

P3

250,00

001

P3

1100,00

003

P3

600,00

011

P1

700,00

SELECT

SQL

2500

1250

65

Prost upit nad jednom tabelom


sa 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<NULL, NULL<>NULL, NULL=NULL

SQL

66

Prost upit nad jednom tabelom


sa 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 tabelom


sa 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

SifP
1
2
3
4
5
6

SifC SifK Dana


JJ0 004 5
PP0 007 2
JJ1 005 6
JJ0 008 7
PP0 002 4
JJ1 009 3

SifC
JJ0
JJ0
PP0
PP0
JJ1
JJ1

Dana
5
7
2
4
6
3

SifC Dana
JJ0 12
PP0 6
JJ1
9

Rezultat
JJ0 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
SQL

70

Svodni upit nad jednom tabelom

Sintaksa za SELECT za svodni upit nad jednom tabelom


SELECT ListaKolona [ListaFunkcija]
FROM ImeTabele
[WHERE R-Predikat]
GROUP BY ListaKolona
HAVING 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 grupisanje
Kolone koje se navode ne moraju biti uz SELECT
Kolene 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 rezultat
Mogu 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

SifP
1
2
3
4
5
6

SifC SifK Dana


JJ0 004 5
PP0 007 2
JJ1 005 6
JJ0 008 7
PP0 002 4
JJ1 009 3

SifC
JJ0
JJ0
PP0
PP0
JJ1
JJ1

Dana
5
7
2
4
6
3

SifC Dana
JJ0 12
PP0 6
JJ1
9

Rezultat
JJ0 12

HEAVING
SUM(Dana)>10

GROUP BY
SifC, Dana
SQL

73

Svodni upit nad jednom tabelom

Primeri:
Upit za prikaz ifara autora i broja naslova koje su napisali
SELECT SifA, COUNT(*)
FROM Je_Autor
GROUP BY SifA ;

AP0
JN0
DM0
ZP0
AP1
IT0

SQL

1
1
2
2
1
1

74

Svodni upit nad jednom tabelom

Upit za prikaz ifara lanova ija je suma trajanja pozajmice


vea od 10
SELECT 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 dana
SELECT SifC,COUNT(*), SUM(Dana)
FROM Pozajmica
JJ0 2 12
WHERE Dana>2
PP0 1 4
GROUP BY SifC;
JJ1 2 9
SQL

75

Svodni upit nad jednom tabelom


Primer
BrInd

IdPred

IdProf

Ocena

100/2007

BP03

MV01

200/2007

BP03

MV01

100/2007

OOP02

RP00

150/2008

BP03

MV01

250/2008

OOP02

RP00

300/2006

RM03

MV01

100/2007

RM03

MV01

300/2006

RM03

MV01

SQL

Sala

Datum

Vreme

76

Svodni upit nad jednom tabelom


SELECT BrInd,AVG(Ocena)
FROM Ispit
GROUP BY BrInd;
Ispit
BrInd

IdPred

IdProf

Ocena

100/2007

BP03

MV01

200/2007

BP03

MV01

100/2007

OOP02

RP00

150/2008

BP03

MV01

250/2008

OOP02

RP00

300/2006

RM03

MV01

100/2007

RM03

MV01

300/2006

RM03

MV01

8
SQL

Sala

Datum

Vreme

77

Svodni upit nad jednom tabelom


SELECT IdPred,AVG(Ocena)
FROM Ispit
GROUP BY IdPred;
Ispit
BrInd

IdPred

IdProf

Ocena

100/2007

BP03

MV01

200/2007

BP03

MV01

100/2007

OOP02

RP00

150/2008

BP03

MV01

250/2008

OOP02

RP00

300/2006

RM03

MV01

100/2007

RM03

MV01

300/2006

RM03

MV01

8
SQL

Sala

Datum

Vreme

78

Svodni upit nad jednom tabelom


SELECT IdProf,AVG(Ocena)
FROM Ispit
GROUP BY IdProf;
Ispit
BrInd

IdPred

IdProf

Ocena

100/2007

BP03

MV01

200/2007

BP03

MV01

100/2007

OOP02

RP00

150/2008

BP03

MV01

250/2008

OOP02

RP00

300/2006

RM03

MV01

100/2007

RM03

MV01

300/2006

RM03

MV01

8
SQL

Sala

Datum

Vreme

79

Svodni upit nad jednom tabelom


SELECT IdProf,IdPred,AVG(Ocena)
FROM Ispit
GROUP BY IdProf, IdPred;
Ispit
BrInd

IdPred

IdProf

Ocena

100/2007

BP03

MV01

200/2007

BP03

MV01

100/2007

OOP02

RP00

150/2008

BP03

MV01

250/2008

OOP02

RP00

300/2006

RM03

MV01

100/2007

RM03

MV01

300/2006

RM03

MV01

8
SQL

Sala

Datum

Vreme

80

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 O
WHERE N.SifO=O.SifO
ORDER 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, Naziv
FROM 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, Ime
FROM 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 K
WHERE 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 {<|<=|=|<>|>=|>} Izraz2
ispituje da li su vrednosti navedenih izraza u zadatom
odnosu
SQL

87

Klauzule WHERE i HAVING

Izraz [NOT] BETWEEN Izraz1 AND Izraz2


ispituje da li je (ili nije) vrednost izraza u zadatim granicama.
Ekvivalentno bi bilo:
[NOT] Izraz>=Izraz1 AND Izraz<=Izraz2
Kolona IS [NOT] NULL
ispituje da li je (ili nije) vrednost kolone NULL
ZnakovniIzraz [NOT] LIKE ZnakovnaMaska
Znakovna vrednost tipa CHARACTER
Dva specijalna znaka (dokeri):
_ bilo koji znak (moe ih biti vie),
% bilo koji broj znakova
SQL

88

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 SifC
HAVING 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% ;
SQL

90

Klauzule WHERE i HAVING

Upit koji daje ifre knjiga koje odgovaraju naslovima ifara


RBP0 i RK00
SELECT SifK
FROM Knjiga
WHERE SifN IN (RBP0,RK00);
Prethodni upit, uz upotrebu ANY forme
SELECT SifK
FROM Knjiga
WHERE SifN ANY (RBP0,RK00);
Upit koji daje ifre naslova za sve knjige osim za one sa
iframa 001, 002, 003
SELECT DISTINCT SifN
FROM Knjiga
WHERE 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 pozajmica
2) 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 C
WHERE 10 < (SELECT SUM (Dana)
FROM Pozajmica
WHERE SifC=C.SifC);
Podupit je korelisan i izvrava se za svakog lana
Spoljni SELECT odreuje kolonu koja se koristi u
podupitu
SQL

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 Ime
FROM 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 Pozajmica
WHERE 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 SifK
FROM Drzi
UNION
SELECT 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 Naziv
FROM Naslov N, Knjiga K
WHERE N.SifN=K.SifN
AND SifK IN (SELECT SifK
FROM Drzi
EXCEPT
SELECT DISTINCT SifK
FROM Pozajmica);
SQL

100

You might also like