Sistemske funkcije, grupiranje podataka i podupiti - 10 ... podataka/Predavanja/05 - BP -...
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