Sunteți pe pagina 1din 6

Limbajul SQL

1. Func~ii referitoare la mai multe inregistrari (Func~ii de grup)



2. Clauza GROUP BY

3. Excluderea grupurilor (clauza HAVING)

4. Imbricarea functiilor de grup

m.i r.zuna

OJr;; - BAZE DE DATE.

1. Functii de grup

Fiecare dintre aceste functii accepts anurniti para metrii:

THE INFORMATION COMPANY

Curs 5 LimbajulSQL

10.11.2008

curs - BAZE DE DATE

1. Functll de grup

Functiile de grup sunt: functii care opereaz8 pe un set de randuri pentru a da un rezu/tat pe intreg setul.

Parametrii ~i descrierea functillor de grup. Functiile de. grup sunt:

> AVG

> COUNT > MAX

> MIN

> STDDEV > SUM

> and VARIANCE.

10.11.2008

curs BAZE DE DATE.

1. Functll de grup

DISTINCT face ca functia sa ignore valorile duplicat.

All face ca functia sa afiseze si valorile duplicat.

Valoarea irnplicita este All, deci nu este necesar sa fie specificate.

Tipul de data returnat de functia expr poate fi CHAR, VARCHAR2, NUMBER sau DATE.

Toate functiile de grup ignora valorile nule. Pentru a lua in considerare §i valorile nule se folosesc functiile NVl, NVl2 sauCOAlESCE.

10.11.2008

curs BAZE DE DATE

1

1. Functll de grup

Sintaxa functlllor de grup:

LECT [coloana,] functie_de_grup(coloana), FROM tabel

[WHERE conditie]

[GROUP BY coloana]

[HAVING conditie_de_:grupare] [ORDER BY coloana];

Rezultatele sunt sortate implicit crescator, Pentru 0 ordonare descrescatoare se va folosi clauza DESC dupa ORDER BY.

10,11,2008

OJ rs - BAZE DE DATE

1. Functii de grup

emplul2

Datele la care s-au facut prima sl ultima angajare.

SELECT MIN(data_angL MAX(data_ang} FROM angajati;

m.i r.zuna

OJr;; - BAZE DE DATE.

1. Functii de grup

Functia COUNT

Functia COUNT are 3 formate:

COUNT(*)

COUNT(expr) COUNT(DISTINCT expr)

10,11,2008

OJ rs BAZE DE DATE

11

1. Functll de grup

Exemplul1:

Aflsarea salariului medlu, maxim, minim ~i surna tuturor salariilor anqajatilor cu functie VANZATOR.

SELECT AVG(salariuL MAX(salariu)[ MIN(salariu)[ SUM(salariu)

FROM angajati

WHERE functie=' VANZATOR';

10.11.2008

curs - BAZE DE DATE

10

1. Functll de grup

Exemplul3

Primul sl ultimul nume de angajat in ordine alfabetica.

SELECT MIN(nume)[ MAX(nume) FROM angajati;

10.11.2008

curs - BAZE DE DATE.

12

1. Functll de grup

o COUNT(*) intoarce numarul de randurl dintr-un tabel care satisfac criteriul de selectie, incluzand randurlle duplicat ~i randurlle contlnand valori nule.

o Daca clauza WH ERE este lntrodusa,

at unci COUNT(*) returneaza nurnarul de randuri care satisfac conditia din clauza WHERE.

10.11.2008

curs BAZE DE DATE

2

1. Functll de grup

o in contrast, functla COUNT(expr) i'ntoarce nurnarul de valori nenule din coloana speclflcata de expr.

o COUNT(DISTINCT expr) returneaza numarul de valori distincte, nenule din coloana specificate de expr.

10,11,2008

OJ rs - BAZE DE DATE

13

1. Functii de grup

Exemplul5

Numarul anqajatllor care iau comision din departamentul 30.

SELECTCOUNT(comision} FROM angajati

WHERE nr~dept = 30;

m.i r.zuna

OJr;; - BAZE DE DATE.

15

1. Functii de grup

Exemplul7

Comisionul mediu in departamentul 30 (iqnorand sau nu valorile nule).

SELECT AVG(comision), AVG(NVL(camision,O))

FROM angajati

WHERE nr jiept = 30;

10,11,2008

OJ rs BAZE DE DATE

17

1. Functll de grup

Exemplul4

Numarul anqajatllor din departamentul cu id-ul 30.

SELECT COUNT(*) FROM angajati WHERE nr jiept = 30;

10.11.2008

curs - BAZE DE DATE

14

1. Functll de grup

Exemplul6

Numarul de departamente din firma (varianta lncorecta sl varianta corecta),

SELECT COUNT(nr~dept), COUNT(DISTINCT nr jiept)

FROM angajati;

10.11.2008

curs - BAZE DE DATE.

16

Limbajul SQL

1. Functii referltoare la mai multe inregistrari (Functii de grup)

2. Clauza GROUP BY

3. Excluderea grupurilor (clauza HAVING)

4. Imbricarea functiilor de grup

10.11.2008

curs BAZE DE DATE

18

3

2. Clauza G ROU P BY

Pana acum toate functllle de grup au fast aplicatelntregii tabele.

Pentru a putea lm pi:irti tabela in grupuri mai mici se foloseste clauza GROUP BY.

Folosirea acesteia returneaza inforrnatii sumare despre fiecare grup.

10,11,2008

OJ rs - BAZE DE DATE

19

2. Clauza G ROU P BY

Exemplul8

Salariul medlu pe fiecare departamento

SELECT nr_dept, AVG(salariu) FROM angajati

GROUP BY nr _dept;

m.i r.zuna

OJr;; - BAZE DE DATE.

21

2. Clauza G ROU P BY

Gruparea dupa mai multe co/Dane.

Cateodata este necesara obtinerea de rezultate pentru grupuri in alte grupuri.

Atunci In dreptul clauzei GROUP BY vorn intalnl mal multe coloane.

10,11,2008

OJ rs BAZE DE DATE

23

2. Clauza GROUP BY

~ Folosind GROUP BY nu se pot extrage §i coloane individuale, ci doar coloane ce raman identice in tot grupul.

~ Folosind WHERE se pot exclude randuri, inaintea imparti rii lor ingrupuri.

~ Nu pot fi folosite al iasuri de coloane in clauza GROUP BY.

~ Implicit, randurile sunt sortate crescator dupa coloana (coloanele) specificate in GROUP BY. ~ Acest lucru poate fi schimbat folosind ORDER BY.

10.11.2008

curs - BAZE DE DATE

20

2. Clauza GROUP BY

Exemplul9

Salariul mediu pe fiecare departament, iar rezultatele ordonate dupa salariul mediu pe departamento

SELECT nr_dept, AVG(salariu) FROM angajati

GROUP BY nr_dept

ORDER BY AVG(salariu);

10.11.2008

curs - BAZE DE DATE.

22

2. Clauza GROUP BY

plul 10

Salariul mediu pe fiecare departament, iar rezultatele ordonate dupa salariul mediu pe departamento

SELECT nr _dept, functie, SUM(salariu) FROM angajati

GROUP BY nr_dept, functie;

10.11.2008

curs BAZE DE DATE

24

4

Limbajul SQL

1. Func~ii referitoare la mai multe inregistrari (Funct]] de grup)

2. Clauza GROUP BY

3. Excluderea grupurilor (clauza HAVING)

4. Imbricarea functiilor de grup

10,11,2008

OJ rs - BAZE DE DATE

25

3. Excluderea grupurilor (clauza HAVI NG)

Exemplul 11

Salariul mediu pe fiecare departament unde acesta depaseste 3000$.

SELECT nr_dept, AVG(salariu) FROM angajati

HAVING AVG(salariu) > 3000 GROUP BY nr_dept;

m.i r.zuna

OJr;; - BAZE DE DATE.

27

3. Excluderea grupurilor (clauza HAVI NG)

Exemplul13

Salariul total pe fiecare functie, fara a lua in calcul MANAGERII, excluzand functiile cu suma salariilor sub 6000$ cu ordonare dupa total.

SELECT functie, SUM(salariu) FROM angajati

WHERE functie! ='MANAGER' GROUP BY functie

HAVING SUM(salariu) > 6000 ORDER BY SUM(salariLi);

10,11,2008

OJ rs BAZE DE DATE

29

3. Excluderea grupurilor (clauza HAVING)

Clauza HAVING functloneaza in mare ca sl clauza WHERE, dlferenta fiind ca HAVING este folosit pentru a exclude anumite grupuri din rezultat, nu randurl cum facea WHERE.

Clauza HAVING poate fi folosita inalnte de GROUP BY, insa este mai logic sa fie folosita dupa.

Ordinea executlel va rarnane aceeasi,

10.11.2008

curs - BAZE DE DATE

26

3. Excluderea grupurilor (clauza HAVING)

Exemplul 12

Salariul maxim pe fiecare departament unde acesta depaseste 3000$.

SELECT nr_dept, MAX(salariu) FROM angajati

HAVING AVG(salariu) > 3000 GROUP BY nr _dept;

10.11.2008

curs - BAZE DE DATE.

28

Limbajul SQL

1. Func~ii referltoare la mai multe inregistrari (Func~ii de grup)

2. Clauza G ROU P BY

3. Excluderea grupurilor (clauza HAVING)

4. Imbricarea functiilor de grup

10.11.2008

curs BAZE DE DATE

30

5

Ordinea de executie a functiilor de grup

Serverul Oracle executa functiile de grup intr-o anu mita ordine:

~ Selectia randurilor ce respects clauza WHERE ~ Gruparea randurilor obtinute, respectand clauza GROUP BY

~ Calcularea rezultatelor functi ilor de grup pentru fiecaregrup in parte

~ Eliminarea grupurilor ce nu respects clauza HAVING

~ Ordonarea rezultatelor respectand clauza GROUP BY.

10,11,2008

OJ rs - BAZE DE DATE

31

4. Imbricarea functiilor de grup Functiile de grup pot fi imbricate cu a adancirne de 2.

Exemplul 14

Salariul mediu maxim.

SELECT MAX(AVG(salariu)) FROM angajati

GROUP BY nr_clept;

m.i r.zuna

OJr;; - BAZE DE DATE.

33

Ordinea de executie a functiilor de grup

o Ordinea de executie are 0 irnportanta foarte mare, deoarece are un impact' direct asupra vitezei.

o Cu cat mai multe inreqistrari pot fi eliminate utilizand clauza WHERE; cu atat mai putin va dura gruparea si operatiile ce urrneaza.

o Daca 0 cerere SQL este conceputa sa elirnine lnreqistrari/qrupuri doar folosind clauza HAVING, atunci ar fi bine de lncercat daca este posibil si prin clauza WHERE. De obicei, totusi, aceasts rescriere nu va fi posibila,

10.11.2008

curs - BAZE DE DATE

32

Intrebari?

10.11.2008

curs - BAZE DE DATE.

6

S-ar putea să vă placă și