Sistemske funkcije, grupiranje podataka i podupiti - 10 ... podataka/Predavanja/05 - BP -...

47
Sistemske funkcije Grupiranje podataka Podupiti Sistemske funkcije, grupiranje podataka i podupiti 10. tjedan T. Cari´ c, T. Erdeli´ c Zavod za inteligentne transportne sustave Fakultet prometnih znanosti Sveuˇ ciliˇ ste u Zagrebu Baze podataka T. Cari´ c, T. Erdeli´ c ITS::Baze podataka (10. tjedan)1/47

Transcript of Sistemske funkcije, grupiranje podataka i podupiti - 10 ... podataka/Predavanja/05 - BP -...

Sistemske funkcijeGrupiranje podataka

Podupiti

Sistemske funkcije, grupiranje podatakai podupiti10. tjedan

T. Caric, T. Erdelic

Zavod za inteligentne transportne sustaveFakultet prometnih znanosti

Sveuciliste u Zagrebu

Baze podataka

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)1/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Pregled 1. poglavlja

Sistemske funkcijeSkalarne funkcijeAgregatne funkcije

Grupiranje podataka

Podupiti

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)2/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije

I Svaki DBMS podrzava razlicite tipove funkcijaI Funkcija je imenovani dio koda koja radi zadane operacije, a

moze primati i vracati parametreI Funkcije u DBMS-u mogu se podijeliti na

I Sistemske funkcije - dolaze sa DBMS-om (samo njima sebavimo na ovo kolegiju)

I Korisnicki definirane funkcije - sam korisnik ih izradujeI Funkcije se mogu podijeliti i prema determinizmu na

I Deterministicke - one koji za zadani skup ulaznih parametarauvijek vracaju isti rezultat

I Nedeterministicke - one koji za zadani skup ulaznih parametarauvijek vracaju drugaciji rezultat

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)3/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Sistemske funkcije

I Sistemske funkcije se dijele u sljedece skupineI Skalarne funkcije (Scalar Functions)

I Kao parametar uzimaju jednu vrijednost i vracaju jednuvrijednost kao rezultat

I Agregatne funkcije (Aggregate Functions)I Kao parametar uzimaju vise vrijednosti, a kao rezultat vracaju

jednu (agregiranu) vrijednostI Funkcije za pretvaranje izvora podataka u tablicni oblik

(Rowset Functions)I Uzimaju podatke iz razlicitih izvora (.txt, .xml, .mdf,. . . ) i

pretvaraju ih u tablice. Npr. dobro formiran XML dokumentse moze pretvoriti u tablicu.

I Funkcije za rangiranje (Rank Functions)I Prema odredenoj vrijednosti stupca ili grupe dodaju jos jedan

stupac u rezultat koji predstavlja rang tog retka u odnosu nadruge

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)4/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Skalarne funkcije

I Postoji mnogo skalarnih funkcija ugradenih u DBMS od kojihcemo samo neke spomenuti

I Nama zanimljive su sljedece skupine skalarnih funkcijaI Matematicke funkcijeI Funkcije za rad sa datumom i vremenomI Funkcije za rad sa znakovima

I Ostale skupine skalarnih funkcija suI Konfiguracijske funkcijeI Funkcije pretvorbeI Logicke funkcijeI Funkcije za rad sa metapodacimaI Sigurnosne funkcijeI Sistemske funkcije za pruzanje informacija o instanci DBMSaI Statisticke funkcijeI Funkcije za rad sa slikama i velikim tekstovima

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)5/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Matematicke funkcije

RAND Vraca pseudo-slucajnu float vrijednost od 0 do 1, iskljucivoROUND Vraca zaokruzenu numericku vrijednost, na specificiran broj

decimalaABS Vraca apsolutnu (pozitivnu) vrijednost specificiranog nu-

merickog izrazaEXP Vraca eksponencijalnu vrijednostPOWER Vraca potenciju predanih vrijednostiSQUARE Vraca kvadrat predane vrijednostiCEILING Vraca najveci cijeli broj veci ili jednak predanoj vrijednostiFLOOR Vraca najmanji cijeli broj manji ili jednak predanoj vrijednosti

Tablica: Popis najbitnijih matematickih funkcija

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)6/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Matematicke funkcijeI RAND([ sjeme ])

I RAND je jedina matematicka nedeterministicka funkcijaI Za istu vrijednost parametra sjeme kao rezultat dobijemo istu

vrijednost

SELECT RAND (100), RAND ()

0.715436657367485 0.28463380767982

I ROUND(numericki izraz, duzina)I numericki izraz - broj koji zaokruzujemoI duzina - broj decimala na koji zaokruzujemo numericki izraz

SELECT ROUND (1.9994 , 3), ROUND (1.9995 , 3)

1.9990 2.0000

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)7/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Matematicke funkcije

I ABS(numericki izraz)I numericki izraz je broj ciju apsolutnu vrijednost se zeli dobitiI Povratni tip ce biti jednak numerickom izrazu

SELECT ABS (-1.0), ABS (1.0)

1.0 1.0

I EXP(float izraz)I Vraca eksponencijalnu vrijednost predanog float izraza

SELECT EXP (20), EXP(LOG (20)), LOG(EXP (20))

485165195.40979 20 20

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)8/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Matematicke funkcije

I POWER(float izraz, y)I float izraz - bazaI y - eksponent

SELECT POWER (10, 2), POWER(2, 4), POWER(1, 4)

100 16 1

I SQUARE(float izraz)I float izraz predstavlja broj koji se kvadrira

SELECT SQUARE (10), SQUARE (2), SQUARE (1)

100 4 1

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)9/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Matematicke funkcije

I CEILING(numericki izraz)I Vraca najveci cijeli broj veci ili jednak specificiranom

numerickom izrazu

SELECT CEILING (123.45) , CEILING ( -123.45)

124 -123

I FLOOR(numericki izraz)I Vraca najmanji cijeli broj manji ili jednak specificiranom

numerickom izrazu

SELECT FLOOR (123.45) , FLOOR ( -123.45)

123 -124

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)10/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije za rad sa datumima

GETDATE() Vraca trenutno vrijeme racunala na kojem je DBMSinstaliran

DAY Vraca dan u obliku cijelog broja od specificiranog da-tuma

MONTH Vraca mjesec u obliku cijelog broja od specificiranogdatuma

YEAR Vraca godinu u obliku cijelog broja od specificiranogdatuma

DATEPART Vraca zadani dio datuma od specificiranog datumaDATEDIFF Vraca razliku izmedu dva datuma koja prima kao argu-

mente. Razlika se vraca kao cijeli broj zadanog dijeladatuma.

Tablica: Popis najbitnijih funkcije za rad sa datumima

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)11/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije za rad sa datumima

I GETDATE()I Vraca trenutno vrijeme racunala na kojem je DBMS instaliran

SELECT GETDATE ()

2013 -11 -26 15:42:58.430

I DAY(datum), MONTH(datum), YEAR(datum)I Vraca dan, mjesec, godinu u obliku cijelog broja od

specificiranog datuma

SELECT DAY(GETDATE ()),MONTH(GETDATE ()), YEAR(GETDATE ())

26 11 2013

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)12/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije za rad sa datumima

I DATEPART(dio datuma, datum)I dio datuma moze biti: year, quarter, month, dayofyear, day,

week, weekday, hour, minute, . . .

SELECT DATEPART(year , ’2013 -11 -26’),DATEPART(day , ’2013 -11 -26’)

2013 26

I DATEDIFF(dio datuma, pocetni datum, krajnji datum)I Vraca razliku izmedu pocetnog datuma i krajnjeg datuma

SELECT DATEDIFF(year , ’2012 -11 -26’, ’2013 -11 -26’),DATEDIFF(day , ’2013 -11 -26’, ’2013 -11 -28’)

1 2

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)13/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije za rad sa znakovima

ASCII Vraca poziciju zadanog znaka iz ASCII tabliceCHAR Pretvara broj u znak prema ASCII tabliciCONCAT Spaja sve znakove koje se predaju kao parametri. Mogu

se spajati dva znakovna niza ili vise njihSUBSTRING Vraca dio znakovnog izraza koji se prima kao parametarUPPER Cijeli znakovni izraz pretvara u velika slovaLOWER Cijeli znakovni izraz pretvara u mala slova

Tablica: Popis najbitnijih funkcija za rad sa znakovima

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)14/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije za rad sa znakovima

I ASCII(znak), CHAR(cijeli broj)I Pretvaranje znaka iz ASCII tablice u cijeli broj i obrnuto

SELECT ASCII(’A’), CHAR (65)

65 A

I CONCAT(znakovni izraz 1, znakovni izraz n)I Spaja znakovne nizove u jedan

SELECT CONCAT(’Pero’, ’ ide’, ’ u sumu’)

Pero ide u sumu

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)15/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Funkcije za rad sa znakovima

I SUBSTRING(znakovni izraz, pocetak, duzina)I Vraca dio znakovnog izraza

SELECT SUBSTRING(’Pero ide u sumu’, 1, 6)

Pero i

I UPPER(znakovni izraz), LOWER(znakovni izraz)I Velika/mala slova znakovnog izraza

SELECT UPPER(’Pero’), LOWER(’Pero’)

PERO pero

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)16/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Agregatne funkcije

I Agregatne funkcije rade izracune na zadanom skupu redaka iod vise vrijednosti izracunavaju jednu vrijednost

I ISO standard definira sljedece agregatne funkcijeI AVGI COUNTI MAXI MINI SUM

I Navedene funkcije su dostupne u svakom DBMS-u, a osimnjih moze sadrzavati i neke svoje

I Naziv rezultata nije definiran operacijom agregiranja, stoga semora preimenovati (AS operator)

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)17/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Agregatne funkcije

I AVG( [ALL | DISTINCT] izraz)I Vraca aritmeticku sredinu vrijednosti izraza

I MIN( [ALL | DISTINCT] izraz)I Vraca najmanju vrijednost iz izraza

I MAX( [ALL | DISTINCT] izraz)I Vraca najvecu vrijednost iz izraza

I SUM( [ALL | DISTINCT] izraz)I Vraca sumu svih vrijednosti iz izraza

I COUNT( { [ALL | DISTINCT] izraz) | *} )I Vraca broj elemenata u izrazuI COUNT(stupac) ce vratiti broj redaka koji nemaju NULL

vrijednost upisanu u stupacI COUNT(*) ce vratiti ukupni broj redaka racunajuci i NULL

vrijednosti

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)18/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Primjer koristenja (1/2)

I Izracun prosjecne, najjeftinije, najskuplje i sumarne cijeneproizvoda koristenjem agregatnih funkcija i preimenovanja(AS)

SELECTAVG(CijenaBezPDV) ’Prosjek ’,MIN(CijenaBezPDV) ’Najjeftiniji ’,MAX(CijenaBezPDV) ’Najskuplji ’,SUM(CijenaBezPDV) ’Suma’

FROM Proizvod

Prosjek Najjeftiniji Najskuplji Suma51.23 2.33 98.54 21768.34

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)19/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Primjer koristenja (2/2)

I Dohvacanje ukupnog broja proizvoda, ukupnog brojaproizvoda sa unesenom bojom i ukupnog broja razlicitih bojaproizvoda

SELECTCOUNT (*) ’Broj proizvoda ’,COUNT(Boja) ’Sa bojom ’,COUNT(DISTINCT Boja) ’Broj razli citih boja’,

FROM Proizvod

Broj proizvoda Sa bojom Broj razli citih boja507 300 37

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)20/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

NULL vrijednosti

I Vecina agregatnih funkcija ignorira NULL vrijednostiI PRIMJER: SELECT AVG(neki broj) FROM Tablica

I Racunat ce samo aritmeticku sredinu upisanih brojeva, one saNULL vrijednostima jednostavno ignorira

I U slucajevima kada treba racunati i s NULL vrijednostimapotrebno ju je pretvoriti u neku numericku vrijednost

I Funkcija s kojom je to moguce napraviti je ISNULLI ISNULL(stupac, vrijednost)

I Ako u stupcu pise vrijednost NULL funkcija ce vratitivrijednost

I Ako u stupcu ne pise NULL funkcija vraca vrijednost stupca

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)21/47

Sistemske funkcijeGrupiranje podataka

PodupitiSkalarne funkcijeAgregatne funkcije

Primjer koristenja - ISNULL

I Primjer upotrebe sistemske funkcije ISNULL kroz tri primjeraI ISNULL() sistemsku funkciju ne treba mijesati sa operatorom

IS NULL koji vraca true ili false

SELECTISNULL(NULL , 5) AS ’1. primjer ’,ISNULL(2, 5) AS ’2. primjer ’,ISNULL(0, 5) AS ’3. primjer ’,

1. primjer 2. primjer 3. primjer5 2 0

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)22/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Pregled 2. poglavlja

Sistemske funkcije

Grupiranje podatakaPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Podupiti

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)23/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka

I Grupiranje podataka je operacija kojom retke iz jedne ili visespojenih tablica dijelimo u grupe

I Grupiranje se radi prema zadanom kriteriju grupiranja -stupcima po kojima se grupiranje vrsi

I Svaki redak se svrstava u samo jednu grupu prema kriterijugrupiranja

I Za grupiranje se koristi kljucna rijec GROUP BYI GROUP BY se stavlja izmedu WHERE i ORDER BY dijela

osnovne SELECT naredbe koju smo do sada naucili

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)24/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka

I Izgled SELECT naredbe sa GROUP BY dijelom

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)25/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - primjer

I Kako izracunati prosjecnu ocjenu za svaki predmet iz sljedecetablice?

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)26/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - primjer

I Mozemo postaviti nekoliko razlicitih upita i koristiti agregatnufunkciju AVGSELECT AVG(Ocjena) FROM IspitWHERE Predmet = ’Baze’

I Ovo je jedno od rjesenja ali LOSE!

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)27/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - primjer

I Ispravno rjesenje je postavljanje jednog upita koji grupirapodatke (GROUP BY) prema nazivu kolegija, a na grupamaizracunava prosjek (AVG)

I GROUP BY podjeli tablicu u manje grupe, a AVG za svakudobivenu grupu izracunava prosjek

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)28/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - primjer

SELECT Predmet , AVG(CAST(Ocjena AS float)) AS ’Prosjek ’FROM Ispit GROUP BY Predmet

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)29/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - primjer

I CAST(izraz AS podatkovni tip) - sluzi pretvaranju iz jednogtipa podatka u drugi

I Da nismo pretvorili Ocjenu u float rezultati izracuna prosjekabi bili cijeli brojevi

SELECTPredmet ,AVG(CAST(Ocjena AS float)) AS ’Prosjek ’

FROM IspitGROUP BY Predmet

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)30/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - Ogranicenja i HAVING

I Svi atributi koji se nalaze u listi za selekciju, a nisu dioagregatnih funkcija, moraju biti navedeni u GROUP BY dijeluSELECT naredbe

SELECT Predmet , AkademskaGodinaAVG(CAST(Ocjena AS float)) AS ’Prosjek ’

FROM Ispit GROUP BY Predmet

I NEISPRAVNO! Upit ce javiti sintaksnu gresku jer seAkademskaGodina ne nalazi u GROUP BY dijelu

I Naredba HAVING je opcionalna naredba koja sluzi zafiltriranje prema napravljenim grupama, nakon sto jegrupiranje obavljeno

I WHERE sluzi za filtriranje redakaI HAVING sluzi za filtriranje grupa

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)31/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - HAVING primjer

I Kako izracunati prosjecnu ocjenu za svaki predmet ali samoza akademsku godinu 2012 iz sljedece tablice?

SELECT Predmet , AVG(CAST(Ocjena AS float)) AS ’Prosjek ’FROM Ispit GROUP BY Predmet , AkademskaGodinaHAVING AkademskaGodina = 2012

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)32/47

Sistemske funkcijeGrupiranje podataka

PodupitiPrimjer grupiranja podatakaOgranicenja i filtriranje grupa

Grupiranje podataka - HAVING primjer

I HAVING eliminira sve grupe kojima akademska godina nije2012 i radi izracun prosjeka samo za ostatak grupa

SELECT Predmet , AVG(CAST(Ocjena AS float)) AS ’Prosjek ’FROM Ispit GROUP BY Predmet , AkademskaGodinaHAVING AkademskaGodina = 2012

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)33/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pregled 3. poglavlja

Sistemske funkcije

Grupiranje podataka

PodupitiPodjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)34/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Relacijska shema

I Relacijska shema na kojoj ce se izvoditi primjeriI Baza sa ovom relacijskom shemom i podacima je objavljena

na proslim auditornim vjezbama

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)35/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Podupiti

I Podupiti (subqueries) je upit koji se nalazi unutar drugog upitaI Osim izraza podupiti cesto se koristi i naziv ugnijezdeni upiti

(nested query)I Podupit uvijek predstavlja SELECT izraz i uvijek se stavlja u

okrugle zagradeI Podupit se najcesce koristi u

I SELECT dijeluI WHERE ili HAVING dijelu

I Podupit se najcesce moze zamijeniti nekom vrstom spajanjaI Spajanje se uvijek moze zamijeniti podupitomI Kada koristiti podupit kada spajanje? Prema iskustvu. . .

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)36/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Podupiti - podjela

I Podupite se moze podijeliti na nekoliko nacinaI Podjela prema mjestu pojavljivanja

I SELECT podupitiI WHERE/HAVING podupiti

I Podjela prema povratnoj vrijednostiI Skalarni podupiti (vracaju jednu vrijednost)I Tabularni podupiti (vracaju tablicu)

I Podjela prema nacinu radaI Konstantni upiti (ne ovise o retku vanjskog upita)I Korelirani upiti (ovise o retku vanjskog upita)

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)37/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Podupiti - razlog koristenja

I Kako dohvatiti sve proizvode koji su skuplji od prosjecnecijene proizvoda?

I Mozemo koristiti dva upita – LOS NACIN!I 1. Izracunati prosjek i zapamtiti ga

SELECT AVG(CijenaBezPDV) AS ’Prosjek ’FROM Proizvod

Prosjek527.6454

I 2. Dohvatiti sve proizvode koji su skuplji od prosjeka

SELECT * FROM ProizvodWHERE Proizvod.CijenaBezPDV > 527.6454

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)38/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pojavljivanje u SELECT dijelu

I Podupit u SELECT dijelu mora vratiti skalarnu vrijednostI Podupit u SELECT dijelu je podupit u listi za selekciju

SELECT (SELECT ...) AS ’Naziv’FROM Tablica

I Ne moze vratiti tablicu nikada → sintaksna greskaI Postoji mogucnost da vrati

I Istu vrijednost za sve retke (konstantni)I Razlicitu vrijednost za svaki redak (korelirani)

I Prema vracenoj vrijednosti iz podupita odnosimo se kao iprema bilo kojem stupcu

I Mozemo ga preimenovati sa ASI Mozemo ga koristiti za sortiranje u ORDER BY dijelu

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)39/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pojavljivanje u SELECT dijelu - Primjer

I Konstantni - ista vrijednost za sve retke(izvrsava se samo jedanput)

SELECTNaziv ,(SELECT COUNT (*) FROM Proizvod) AS ’Broj proizvoda ’

FROM Proizvod

I Korelirani - razlicita vrijednost za svaki redak(izvrsava se za svaki redak posebno)

SELECTBrojRacuna ,(SELECT SUM(UkupnaCijena) FROM Stavka s

WHERE s.RacunID = r.IDRacun) AS ’Iznos ra cuna’FROM Racun r

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)40/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Korelirani podupiti - napomene

I Korelirani podupiti koriste jedan ili vise stupaca vanjskog upitaI Vanjski upit ne moze koristiti stupce podupita vec samo

njegov rezultatI I podupit i vanjski upit mogu koristiti stupce vanjskog upitaI Kod spajanja je potrebno koristiti alijas (AS) kako se ne bi

dogadale zbunjujuce stvariI Korelirani podupit se izvrsava za svaki redak u rezultatu

vanjskog upitaI Ako vanjski upit kao rezultat ima ogroman broj redaka

I Potrebno je biti oprezan sa ovom vrstom podupita jer mogulose djelovati po performanse

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)41/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pojavljivanje U WHERE/HAVING dijelu

I Podupiti u WHERE ili HAVING dijelu SELECT naredbe moguvratiti jednu ili vise vrijednosti ovisno s kojim operatorom sekoriste

I Operatori usporedivanja =, <, >, >=, <=, <>I Za njih podupit mora vratiti skalarnu vrijednost

I Operatori IN i NOTI Podupit mora vratiti tablicu sa jednim stupcem

I Operatori EXISTS i NOT EXISTSI Podupit moze vratiti bilo sto

I Podupiti mogu biti konstantni i koreliraniI Vracena vrijednost se koristi za filtriranje redaka (WHERE) ili

grupa (HAVING)

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)42/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pojavljivanje U WHERE/HAVING dijelu -Primjer (1/2)

I ZADATAK: Dohvati sve proizvode cija je cijena iznad prosjeka(Konstantni podupit)

SELECT Naziv FROM ProizvodWHERE CijenaBezPDV > (SELECT AVG(CijenaBezPDV)

FROM Proizvod)

I ZADATAK: Dohvati sve racune cija je ukupna vrijednost vecaod 20 000 (Korelirani podupit s operatorom usporedivanja)

SELECT * FROM Racun rWHERE(SELECT SUM(UkupnaCijena)

FROM Stavka s WHERE r.IDRacun = s.RacunID) > 20000

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)43/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pojavljivanje U WHERE/HAVING dijelu -Primjer (2/2)

I ZADATAK: Dohvati sve proizvode koji su barem jednomkupljeni (Konstantni podupit sa operatorom IN)

SELECT * FROM ProizvodWHERE IDProizvod IN (SELECT DISTINCT ProizvodID

FROM Stavka)

I ZADATAK: Dohvati sve proizvodi koji su barem jednomkupljeni (Korelirani s operatorom EXISTS)

SELECT * FROM Proizvod pWHERE EXISTS (SELECT * FROM Stavka s

WHERE p.IDProizvod = s.ProizvodId)

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)44/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Unutarnje spajanje podupitimaI PRIMJER: kako dohvatiti sve nazive gradova i nazive drzava

kojima pripadaju?I Umjesto INNER JOINA kao na primjeru ispod podupitom se

dohvati naziv drzave

SELECT G.Id , G.Naziv ’Grad’, D.Naziv ’Dr zava’FROM Grad GINNER JOIN Drzava D ON D.Id = G.DrzavaId

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)45/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Unutarnje spajanje podupitima

I PRIMJER: kako dohvatiti sve nazive gradova i nazive drzavakojima pripadaju PODUPITOM?

SELECTG.Id , G.Naziv ’Grad’,(SELECT D.Naziv FROM Drzava D

WHERE D.Id = G.DrzavaId) ’Dr zava’FROM Grad G

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)46/47

Sistemske funkcijeGrupiranje podataka

Podupiti

Podjela podupitaMjesta pojavljivanjaSpajanje tablica podupitima

Pitanja

T. Caric, T. Erdelic ITS::Baze podataka (10. tjedan)47/47