empirica visoka Škola raČunarstva i poslovnih … · 1970. – teorijske osnove dao e. f. codd u...

29
6/2/2014 1 http://www.empirica.ba/ eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH KOMUNIKACIJA Brčko, Brčko Distrikt BiH Studijski program: Inţenjerska informatika/Poslovna informatika Ak.god. 2013./2014. OSNOVE BAZA PODATAKA/UPRAVLJANJE BAZAMA PODATAKA Strukturirani jezik za upite - SQL Nastavno osoblje Predavač mr.sci. Asmir Butković [email protected] Asistent Selma Krajinović, magistar elektrotehnike [email protected] Dinko Demirović, dipl.ing.el. [email protected] Samira Mujkić, dipl.ing.el. [email protected] ECTS: 6/7 Predavanja: 45/40 Auditorne vježbe: 15 Laboratorijske vježbe: 15 Studijski program: INI/POI

Upload: others

Post on 02-Sep-2019

7 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

1

http://www.empirica.ba/

eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH KOMUNIKACIJA

Brčko, Brčko Distrikt BiH

Studijski program: Inţenjerska informatika/Poslovna

informatika Ak.god. 2013./2014.

OSNOVE BAZA

PODATAKA/UPRAVLJANJE BAZAMA

PODATAKA Strukturirani jezik za upite - SQL

Nastavno osoblje

• Predavač mr.sci. Asmir Butković

[email protected]

• Asistent Selma Krajinović, magistar

elektrotehnike

[email protected]

Dinko Demirović, dipl.ing.el.

[email protected]

Samira Mujkić, dipl.ing.el.

[email protected]

ECTS: 6/7

Predavanja: 45/40

Auditorne vježbe: 15

Laboratorijske vježbe: 15

Studijski program: INI/POI

Page 2: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

2

Sadržaj

Strukturirani jezik za upite - SQL

DML (Data Manipulation Language)

o SELECT naredba

o WHERE klauzula

o Klauzula DISTINCT

o Klauzula TOP

o Sortiranje zapisa

o NULL vrijednosti

o Agregatne funkcije

o Klauzule GROUP BY i HAVING

SQL (Stuctiured Query Language) je standardni relacioni upitni jezik (ANSI

- American National Standards Institute - standard).

Ovaj jezik se koristi za pristup i manipulaciju sistemima za upravljanje

bazom podataka (DBMS - DataBase Management System), što najčešće

podrazumjeva čitanje i izmjenu podataka u različitim bazama podataka.

Strukturirani jezik za upite - SQL

Komunikacija sa RDBMS

korištenjem SQL

SELECT NAZIV FROM PREDMET

SQL

Server

Page 3: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

3

Strukturirani jezik za upite - SQL

1. Jednostavnost i jednobraznost pri korišćenju

Tabela (relacija) se kreira jednom izvršnom naredbom. Odmah po

kreiranju tabela je raspoloživa za korišćenje. Svi podaci memorisani su

u tabelama i rezultat bilo koje operacije se logički prikazuje u obliku

tabele

2. Mogućnost interaktivnog i klasičnog (aplikativnog) programiranja

Koristeći SQL dobijaju se odgovori na trenutne, unaprijed nepredviđene

zahtjeve ili se SQL blokovi "ugrađuju" u klasični viši programski jezik

(Java, C#, C++, VB) omogućujući klasičnu obradu gde korisnik same

aplikacije najčešće uopšte nije ni svjestan da koristi SQL.

3. Neproceduralnost (tj. proceduralnost u minimalnom stepenu)

SQL je u velikoj meri neproceduralan jer definiše ŠTA, a ne KAKO: koji

podaci se žele, koje tabele se referenciraju i koji uslovi treba da budu

ispunjeni, bez precizne specifikacije procedure za dobijanje željenih

podataka.

Osnovne karakteristike SQL-a:

Strukturirani jezik za upite - SQL

• SQL omogućava pristup bazi podataka

• SQL je jedan od ANSI standardnih računarskih jezika

• SQL može da izvršava upite nad bazom podataka

• SQL može da prikazuje podatke iz baze podataka

• SQL može da unosi nove podatke u bazu podataka

• SQL može da obriše postojeće zapise iz baze podataka

• SQL može da izmjeni podatke u bazi podataka

Osnovne karakteristike SQL-a:

Page 4: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

4

Strukturirani jezik za upite - SQL

Interaktivni: korisnik zadaje jednu po jednu SQL naredbu, preko tastature

a rezultati se prikazuju 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 pored prava korisnika i sadržajem programa koji se

pokreće.

SQL podrţava dva reţima rada sa BP:

Strukturirani jezik za upite - SQL

u početku osmišljen kao upitni jezik tj., kao jezik koji omogućuje pisanje

samostalnih naredbi koje traže neki sadržaj iz baze podataka.

Kasnije je SQL postao jezik kojim je moguće ne samo pretraživati

podatke u bazi, nego i kreiratiti i mijenjati podatke i metapodatke

(strukturu i ograničenja).

nije jezik namijenjen klasičnom programiranju, iako je u proceduralnom

SQL-u moguće pisati procedure, pa i funkcije.

Piše se u obliku komandi (statement), pri čemu se svaka komanda

izvodi kao cjelina odnosno kao program.

kažemo da je deklarativan jezik – potrebno je specificirati (deklarisati)

što želimo, ali ne i detaljno navesti proceduru postizanja rezultata.

SQL je jezik:

Page 5: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

5

Strukturirani jezik za upite - SQL

o Klauzule – to su ključne riječi preuzete iz engleskog jezika koje imaju

tačno određeno značenje u komandi.

o Izrazi – su kombinacija identifikatora, operatora i konstanti koji daju

jednu vrijednost određenog tipa.

o Operatori – su oznake koje predstavljaju operaciju nad operandima u

nekom izrazu.

o Identifikatori – su oznake atributa, tabela, varijabli i ostalih objekata.

o Konstante – su konstantne vrijednosti bilo kojeg tipa (tekst, broj,...).

SQL komande se sastoje od više elemenata:

Strukturirani jezik za upite - SQL

o SELECT – prikaz podataka iz baze

o UPDATE – izmene podataka u bazi

o DELETE – brisanje podataka iz baze

o INSERT INTO – ubacivanje novih podataka u bazu

Upiti i komande za aţuriranje u okviru DML-a su:

Page 6: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

6

Strukturirani jezik za upite - SQL

o CREATE DATABASE – kreiranje nove baze

o ALTER DATABASE – izmena baze

o CREATE TABLE – kreiranje tabele

o ALTER TABLE – izmena tabele

o DROP TABLE – brisanje tabele

o CREATE INDEX – kreiranje indeksa (ključ za pretragu)

o DROP INDEX – brisanje indeksa

Najvaţniji iskazi u DDL-u su:

Strukturirani jezik za upite - SQL

1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational

Model of Data for Large Shared Data Banks” : “… da koncept relacionog

modela dopušta razvoj univerzalnog jezika za manipulisanje podacima

baziranog na primjeni relacione algebre. “

1974. - tvorac Chamberlin, IBM istraživačka laboratorija. U početku se

zvao SEQUEL (Structured English QUEry Language) i predstavljao

programski interfejs (API) za RSUBP Sistem R.

1986. – kraj prve etape usavršavanja SQL-a. Usvojen prvi standard

SQL-a pod nazivom SQL-86.

1989. – revizijom prethodnog standarda, standardizacijom karakteristika

koje se odnose na integritet baze podataka i povezivanje sa klasičnim

programskim jezicima, nastao standard SQL-89.

1992. – nova revizija standarda, šest puta veća od prve verzije, poznata

pod nazivom SQL-92 ili SQL2.

1999. – standard SQL:1999 ili SQL3. Uključeni koncepti objektne

tehnologije, mehanizam trigera, rekurzija i proceduralana proširenja.

Istorijat SQL-a:

Page 7: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

7

2003. – standard SQL:2003. Uvodi neke XML osobine, window funkcije,

sandardizovane sekvence i kolone sa automatski generisanim

vrednostima.

2006. - standard SQL:2006. Nastavak povezivanja XML-a (eXtensible

Markup Language) i SQL-a: definiše se pravac importovanja, čuvanja i

manipulasanja XML podacima u SQL bazi, kao i predstavljanje

konvecionalnih SQL podataka u XML formi.

2008. - standard SQL:2008. Proširuje delovanje ORDER BY klauzule.

Uvodi naredbu TRUNCATE i INSTEAD OF trigere (okidače).

2011. – standard SQL:2011 iz decembra 2011. Novi tipovi window

argregatnih funkcija, mogućnost korišćenja izlaza INSERT, UPDATE,

DELETE ili MERGE naredbe kao izvedenih tabela u novom SQL upitu,

...

Istorijat SQL-a:

Strukturirani jezik za upite - SQL

Sintaksa je skup pravila po kojima se elementi jezika pravilno

kombinuju.

SQL je case insenstive što znači da upiti nisu osjetljivi na mALa I vELikA

sLovA i to se odnosi na kompletan SQL kod koji napišemo osim na

nizove znakova koje označavamo s jednostrukim navodnicima - 'niz

znakova'.

Nizovi znakova jesu osjetljivi na mala i velika slova i tu treba paziti.

Jednostruki navodnici se koriste za stringove.

Sintaksa SQL-a:

Strukturirani jezik za upite - SQL

Page 8: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

8

Komentari su objašnjenja čitaocu SQL upita i nemaju nikakvog uticaja na

njegovo izvršavanje. SQL Server podržava dva tipa komentara:

o -- (double hyphens) - sve što se nalazi desno od ova dva karaktera

smatra se komentarom. Ovakav komenar se može nalaziti na kraju

programskog reda ili sam činiti programski red.

o /* ... */ (forward slash-asterisk character pairs) - komentar ima lijevu i

desnu granicu, pa se može nalaziti bilo gdje u redu (na početaku, u

sredini ili na kraju). Tekst komentara ne smije sadržati parove karaktera

/* i */.

Komentari u SQL-u:

Strukturirani jezik za upite - SQL

DML

Pregled podataka se u SQL jeziku vrši pomoću naredbe SELECT.

Osnovna SELECT naredba:

SELECT identifikuje koje kolone.

FROM identifikuje iz koje tabele.

Oznaka * u kodu označava da želimo prihvatiti sve kolone iz tražene tabele.

Primjer: Da bi smo izvršili pregled svih podataka iz tabele PREDMET

iskoristićemo najosnovniji oblik naredbe SELECT:

SELECT naredba:

SELECT * FROM imetabele;

SELECT * FROM PREDMET

Page 9: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

9

Rezultat upita:

DML

DML

Identična naredba (tj. naredba sa identičnim rezultatom) u ovom slučaju bi

bila:

Ukoliko želimo da iz prikaza izbacimo kolone PRED, AV,LV, ETCS,

potrebno je samo da ih izostavimo iz liste kolona: u ovom slučaju bi bila:

SELECT naredba:

SELECT ID, NAZIV, PRED, AV,LV, ETCS, SEMESTAR, PROF_ID FROM PREDMET

SELECT ID, NAZIV, SEMESTAR, PROF_ID FROM PREDMET

Page 10: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

10

DML

Ova klauzula se koristi za zadavanje određenog uslova koji zapis mora da

ispuni da bi ušao u rezultat:

Primjer:

WHERE klauzula:

SELECT * FROM tabela WHERE neki_uslov

SELECT * FROM PREDMET WHERE PRED=50

DML

Operatori u Where klauzuli, pored standardnih operatora poređenja

(=,>,<,<>,>=,<=) mogu biti i logički:

AND, OR i NOT.

Također se primjenjuju i operatori BETWEEN (za definiranje raspona ili

intervala vrijednosti), IN (zamjenjuje višestruku primjenu operatora OR) i

LIKE (omogućava pretraživanje na osnovu uzorka).

Operatori u Where klauzuli:

SELECT * FROM PREDMET WHERE AV > 30

Page 11: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

11

DML

>,<,<>,>=,<=:

SELECT * FROM PREDMET WHERE PRED=50

SELECT * FROM PREDMET WHERE PRED>30 AND PRED<=40

DML

Operatori poređenja =,>,<,<>,>=,<=

Demo

Page 12: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

12

DML

U Transact SQL-u, BETWEEN-AND predstavlja zatvoreni interval, tj.

uključuje rubne vrijednosti.

BETWEEN:

SELECT * FROM PREDMET WHERE PRED BETWEEN 20 AND 35

DML

IN se koristi da prikaže zapise koje pripadaju skupu vrijednosti (ovo je

zamjena za više OR klauzula)

IN:

SELECT * FROM PREDMET WHERE PRED IN (20,35,45)

Page 13: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

13

DML

Klauzula LIKE omogućuje pretraživanje na osnovu "UZORKA" odnosno

dobijanje informacija i kada ne znamo potpun naziv (tj. vrijednost)

odredjenog atributa tipa character. Ona koristi dva specijalna karaktera

("%","_") sa sljedećim značenjem:

o "%" predstavlja string od 0 ili više karaktera

o "_" predstavlja poziciju jednog karaktera.

Klauzula LIKE:

SELECT * FROM STUDENT WHERE IME='ADMIr'

DML

"%":

SELECT * FROM STUDENT WHERE IME LIKE'AD%'

SELECT * FROM STUDENT WHERE IME LIKE'%A'

Page 14: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

14

DML

"_":

SELECT * FROM STUDENT WHERE PREZIME LIKE'Gr_ić'

SELECT * FROM STUDENT WHERE IME LIKE'Al__' SELECT * FROM STUDENT WHERE IME LIKE'Al___'

DML

"%„ i "_":

SELECT * FROM STUDENT WHERE IME LIKE'%R'

SELECT * FROM STUDENT WHERE PREZIME LIKE'%OVIĆ'

SELECT * FROM STUDENT WHERE IME LIKE'%R' AND PREZIME LIKE'%OVIĆ'

SELECT * FROM STUDENT WHERE PREZIME LIKE'__kić' SELECT * FROM STUDENT WHERE PREZIME LIKE'___kić'

Page 15: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

15

DML

Rezultat:

SELECT * FROM Settlement SELECT * FROM Settlement

WHERE Name LIKE 'A%'

DML

Klauzula LIKE

Demo

Page 16: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

16

DML

Ova klauzula se koristi za eliminisanje duplih zapisa iz prikaza:

Klauzula DISTINCT:

SELECT IME FROM STUDENT

SELECT DISTINCT IME FROM STUDENT

DML

Ova klauzula se koristi za ograničavanje broja zapisa koji ulaze u rezultat

bez obzira da li su ispunili eventualni uslov.

Klauzula TOP:

SELECT TOP 4 * FROM STUDENT

Page 17: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

17

DML

Jedna od osnovnih potreba prilikom prihvatanja podataka je sortiranje istih.

Na samom kraju svakog upita možemo dodati ORDER BY operator te

navesti redoslijed atributa po kojima se sortira. Postoje dvije metode

sortiranja: uzlazno - ASC (od ASCending: A-Z, 0-besk.) i silazno - DESC

(od DESCending: Z-A, besk.-0).

Sortiranje zapisa:

SELECT * FROM Municipality

SELECT * FROM Municipality ORDER BY Name

SELECT * FROM Municipality ORDER BY Name DESC

SELECT * FROM Municipality ORDER BY fk_Canton ASC, Name ASC

SELECT * FROM Municipality ORDER BY fk_Canton, Name DESC

DML

Rezultat: SELECT * FROM Municipality

SELECT * FROM Municipality ORDER BY Name

SELECT * FROM Municipality ORDER BY fk_Canton, Name DESC

Page 18: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

18

DML

NULL u bazama služi za vrijednosti u kojima nema podatka.

Operator IS NULL se koristi za ispitivanje da li je vrijednost nekog atributa

postavljena na NULL vrijednost.

NULL vrijednosti:

SELECT * FROM PREDMET WHERE AV=NULL

SELECT * FROM PREDMET WHERE AV IS NULL

DML

Operator IS NULL:

SELECT * FROM PREDMET WHERE AV IS NULL OR PRED IS NULL

Page 19: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

19

DML

DISTINCT, ORDER BY, IS NULL

Demo

DML

Agregatne funkcije preslikavaju skup vrijednosti jedne kolone (obično

izvedene tabele) u skalarnu vrijednost.

Pod izvedenom tabelom ovde se podrazumjeva rezultat primjene logičkog

izraza iz WHERE linije na tabele iz FROM linije.

Mada je SQL i bez agregatnih funkcija dovoljan za pretraživanje svakog

pojedinačnog podatka iz baze podataka (relaciono je kompletan), bez

mehanizma agregatnih funkcija on ne omogućuje izražavanje praktičnih i

često potrebnih upita tipa "Koliko ima ? "

SQL podržava agregatne funkcije COUNT, SUM, AVG, MAX i MIN, sa

sljedećim značenjem:

o COUNT – broj vrijednosti u koloni

o SUM – zbir vrijednosti u koloni

o AVG – srednja vrijednost u koloni

o MAX – najveća vrijednost u koloni

o MIN – najmanja vrijednost u koloni.

Agregatne funkcije:

Page 20: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

20

DML

Funkcija COUNT definisana je nad kolonama bilo kog tipa. Ona ima dva

oblika:

o COUNT (*) - nalazi broj n-torki u grupi

o COUNT (atribut) - nalazi NOT-NULL vrijednosti kolone

Funkcija COUNT:

SELECT Count(Name) FROM Municipality WHERE fk_Canton=1

UID Name fk_Canton

1 Banovići 3

2 Banja Luka 11

3 Bihać 1

4 Bijeljina 2

5 Bileća 16

6 Kozarska Dubica

11

... ...

Count(Name)

8

DML

Funkcija COUNT:

SELECT * FROM PREDMET

Page 21: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

21

DML

Funkcija COUNT:

SELECT Count(*) FROM PREDMET

SELECT Count(PRED) FROM PREDMET

SELECT Count(DISTINCT PRED) FROM PREDMET

Prebrojavaju vrste (a ne vrijednosti kolone)

Primjenjuju samo na ne-NULL vrijednosti

Eliminiše duplikate u koloni–argumentu

DML

SUM (atribut) - izračunava ukupnu vrijednost

Funkcija SUM:

SELECT Sum(LV) FROM PREDMET

SELECT Sum(DISTINCT LV) FROM PREDMET

SELECT Sum(LV) FROM PREDMET WHERE SEMESTAR=1

Page 22: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

22

DML

AVG (atribut) - izračunava srednju vrijednost

Funkcija AVG:

SELECT AVG(PRED),AVG(AV),AVG(LV),AVG(ETCS) FROM PREDMET

SELECT AVG(PRED),AVG(AV),AVG(LV),AVG(ETCS) FROM PREDMET WHERE SEMESTAR=2

DML

MAX (atribut) - nalazi maksimalnu vrijednost

Funkcija MAX :

SELECT MAX(PRED) FROM PREDMET WHERE SEMESTAR=1

SELECT MAX(PRED) FROM PREDMET WHERE SEMESTAR=3

Page 23: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

23

DML

MIN (atribut) - nalazi minimalnu vrijednost

Funkcija MIN:

SELECT MIN(PRED) FROM PREDMET WHERE SEMESTAR=1

SELECT MIN(PRED) FROM PREDMET WHERE SEMESTAR=3

DML

COUNT, SUM, AVG, MAX, MIN

Demo

Page 24: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

24

DML

Klauzula GROUP BY se koristi za grupisanje podataka koji se dobijaju kao

rezultat upita, a klauzula HAVING se koristi za selekciju određenih grupa

koje su već kreirane GROUP BY klauzulom.

Operator grupisanja:

SELECT * FROM Municipality

DML

Klauzula GROUP BY ima zadatak da omogući grupisanje vrsta u

rezultujućoj tabeli na osnovu zajedničkih vrijednosti. Time se povećava

vrijednost funkcija agregacije jer se u kombinaciji sa GROUP BY klauzulom

mogu primjenjivati na grupe vrsta, a ne samo na čitavu rezultujuću tabelu.

Operator grupisanja:

SELECT * FROM Municipality

Page 25: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

25

DML

Potrebno je voditi računa, da ukoliko ne postoji GROUP BY klauzula, u

SELECT klauzuli nije moguće kombinovati funkcije agregacije sa imenima

kolona. U nastavku je dat SQL upit koji NE MOŢE DA SE IZVRŠI i koji će

dovesti do POJAVE GREŠKE.

Ovaj upit je moguć samo uz upotrebu GROUP BY klauzule.

U nastavku je dat pravilan SQL upit.

SELECT Count(Name),fk_Canton FROM Municipality

DML

SELECT fk_Canton, Count(Name) FROM Municipality GROUP BY fk_Canton

Page 26: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

26

DML

Grupisanje:

Name fk_Canton

Bihać 1

Cazin 1

Velika Kladuša 1

Buţim 1

Bosanska Krupa 1

Bosanski Petrovac 1

Ključ 1

Sanski Most 1

Odţak 2

Orašje 2

Domaljevac-Šamac 2

Ţivinice 3

Čelić 3

... ...

fk_Canton Count(Name)

1 8

2 3

3 13

... ...

8

3

13

SELECT Count(Name),fk_Canton FROM Municipality GROUP BY fk_Canton

DML

Klauzulu GROUP BY je moguće primjeniti istovremeno na veći broj kolona.

Pri tome su kriterijumi za formiranje grupa zajedničke vrijednosti u

specificiranim kolonama. Prilikom formiranja grupa vodi se računa i o

redoslijedu po kome su kolone za grupisanje navedene (kao da se

formiraju grupe sa podgrupama u okviru njih).

SELECT SEMESTAR, ETCS, Count(NAZIV) FROM PREDMET GROUP BY SEMESTAR, ETCS ORDER BY 1,2

Page 27: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

27

DML

Prilikom korištenja klauzule GROUP BY, sve kolone koje su navedene u

klauzuli SELECT, a na koje nije primjenjena neka funkcija agregacije,

MORAJU BITI NAVEDENE U GROUP BY KLAUZULI. U suprotnom SQL

upit neće moći da se izvrši.

Klauzula HAVING omogućava filtriranje rezultata dobijenih korišćenjem

GROUP BY klauzule.

HAVING je sličan WHERE klauzuli!

Klauzula HAVING:

DML

Koristeći tabelu Municipality kreirati upit koji kao rezultat daje broj

opština po kantonima, ali samo za kantone od 1 do 10 i one kantone koji

imaju manje ili jednako 5 opština u svom sastavu. (ISPITNI ZADATAK)

Zadatak:

Page 28: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

28

DML

SELECT fk_Canton, Count(Name) FROM Municipality WHERE fk_Canton BETWEEN 1 AND 10 GROUP BY fk_Canton HAVING Count(Name)<=5

Rješenje:

DML

Klauzule GROUP BY i HAVING je moguće kombinovati sa WHERE

klauzulom. Pri tome treba voditi računa o redosljedu izvršavanja!

Redosljed je sljedeći:

SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

Page 29: eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH … · 1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational Model of Data for Large Shared Data Banks” : “…

6/2/2014

29

Pitanja