Sunteți pe pagina 1din 20

Funcii SQL standard

Funcii SQL standard...................................................................................................2


1.1
Funciile SQL de agregare...................................................................................2
1.2
Utilizarea funciilor de agregare n interogri.....................................................3
1.3
Utilizarea funciilor de agregare n rapoarte........................................................9
1.4
Probleme propuse..............................................................................................17
1.5
Intrebri de control............................................................................................19

1 Funcii SQL standard


1.1 Funciile SQL de agregare
In tabelele rezultate din interogri i n rapoarte putem defini cmpuri ce conin
rezultatele unor calcule cu valorile datelor din tabelele bazei de date. Cel mai des aceste
rezultate provin din evaluarea unor expresii aritmetice ce conin: numere, nume ale
coloanelor tabelelor (atribute) i funcii matematice standard ale limbajului SQL.
Operatorii aritmetici sunt cei cunoscui, +, -, * i / pentru numere reale i +, -, \ i Mod
pentru numere ntregi.
Funciile standard utile ale limbajului SQL sunt urmtoarele:
1. funcii care calculeaz o valoare pe baza valorilor unei coloane ale tabelei (funcii de
agregare):
AVG() d valoarea medie,
VAR() d dispersia valorilor din coloana respectiv,
MIN() d valoarea minim,
MAX() d valoarea maxim,
FIRST() d prima valoare,
LAST() d ultima valoare,
COUNT() d numrul de linii,
SUM() d suma valorilor.
Toate aceste funcii au ca argument un nume de coloan (atribut) al tabelei.
2. funcii ce prelucreaz iruri de caractere:
ucase() convertete un ir n litere mari,
lcase() convertete un ir n litere mici,
mid() extrage un subir dintr-un ir,
len() d lungimea unui ir de caractere,
format() formateaz un cmp,
round() rotunjete un camp numeric la un numr de zecimale specificat,
now() furnizeaz un ir de caractere cu data i timpul curent.
Funcia mid() extrage un subir din ir. Ea are prototipul
mid(nume_coloana, indice [, lungime])
nume_coloana este cmpul din care se extrage subirul, indice d poziia n ir a primului
character din subir (primul character din ir are indicele 1), iar parametrul opional
lungime d lungimea subirului. Dac acest parametru nu se specific, funcia d restul
irului.
Funcia round rotunjete numrul la cel mai apropiat ntreg. Ea are forma
round(nume_coloana, numar_de_zecimale)
Funcia format formateaz un cmp. Ea are forma
format(nume_coloana, format)
unde format este un ir de caractere ce d formatul valorii din coloan. De exemplu,
funcia
format(now(), YYYY-MM-DD)
d data curent sub forma an-luna-zi.
Restul funciilor au ca argument un nume de coloan (atribut) al tabelei.
2

1.2 Utilizarea funciilor de agregare n interogri


Instruciunea SELECT poate fi folosit la calculul totalurilor valorilor din unele cmpuri.
In instruciunile SELECT de pn acum, fiecare linie a tabelei rezultat corespundea unei
singure linii din tabela surs. In interogrile n care nsumm valorile unor cmpuri, o
linie a tabelei rezultat corespunde uneia sau mai multor linii din tabela surs. Funciile de
agregare ce se aplic asupra valorilor unei coloane din tabela rezultat sunt cele de mai
sus: Sum, (nsumare), Avg, (valoare medie), Var, (dispersia), Min, Max, (valoare
minim / maxim). Fie de exemplu tabela de mai jos cu vnzrile unei intreprinderi n
diverse zone.
Filiala
Bucureti
Ploieti
Cluj
Iai
Arad
Timioara
Bacu
Suceava

Zona
Muntenia
Muntenia
Transilvania
Moldova
Transilvania
Transilvania
Moldova
Moldova

Vanzri
192000
88300
172500
128000
98000
102300
34000
28000

O interogare ce calculeaz suma vnzrilor pe zone geografice are ca rezultat urmtoarea


tabel
Zona
Muntenia
Transilvania
Moldova

Vnzri
280300
372800
186000

Datele din coloana Vnzri se calculeaz astfel:


1. se selecteaz toate liniile tabelei,
2. se grupeaz liniile dup valorile din coloana Zona,
3. se insumeaz valorile din coloana Vnzri pentru fiecare grup de linii.
Instruciunea SELECT permite n plus ca liniile din tabela rezultat s fie grupate dup
anumite criterii i funciile de agregare s fie aplicate asupra coloanelor din fiecare grup.
Instruciunea SELECT corespunztoare are forma urmtoare
SELECT nume_coloana_1, nume_coloana_2, , nume_coloana_k,
funcie(nume_coloana_1), funcie(nume_coloana_2), funcie(nume_coloana_k)
FROM nume_tabel
GROUP BY nume_coloana_1, nume_coloana_2,
WHERE condiie
ORDER BY nume_coloana [ASC | DESC], nume_coloana [ASC|DESC], ;
Clauza GROUP BY conine criteriul de grupare, coloanele n funcie de care se grupeaz
liniile din tabela rezultat. Toate coloanele nume_coloana_i din clauza GROUP BY trebuie

s apar ntre coloanele nume_coloana_j din clauza SELECT i invers. In tabela rezultat
vor aprea doar coloanele de forma funcie(nume_coloana_j).
Vom expune modul de creare al unei interogri de acest fel n care nsumm valorile unei
coloane grupate dup valorile altei coloane. Fie tabela VANZARI_ZONE a crei
proiectare este cea din Figura 1, iar datele din tabel sunt cele din Figura 2.

Figura 1. Proiectarea tabelei VANZARI_ZONE.

Figura 2. Tabela VANZARI_ZONE.

Deoarece cmpul ZONA conine doar valorile Transilvania, Moldova, Muntenia, Oltenia,
se va crea o caset Combo Box pentru introducerea acestor valori.
Vrem s crem o interogare ce totalizeaz vnzrile grupate pe zone geografice:
Transilvania, Moldova, Muntenia i Oltenia. Procedura este urmtoarea:
1. se creaz o interogare. Clic pe butonul New al casetei Database i se alege opiunea
Design View. Se afiaz fereastra de proiectare a interogrii din Figura 3,

Figura 3. Ferestra de proiectare a interogrii.

2. clic pe meniul View Totals din Tabelul 1 sau pe butonul Totals,


, al barei de
instrumente sau al meniului contextual din Tabelul 2b; n fereastra de proiectare apare
linia Total ca n Figura 4,

a) meniul Query

b) meniul View

Tabelul 1. Meniurile apicaiei Query Design.

a) meniu contextual

b) bara de instrumente Query Design

Tabelul 2. Meniu contextual i bara de instrumente Query Design.

3. se completeaz cmpurile din linia Field, cmpurile ZONA i VANZARI, iar n linia
Total a coloanei VANZARI se introduce funcia Sum din caseta afiat n Figura 4,

Figura 4. Completarea interogrii.

4. tabela rezultat este cea din Figura 5. Coloana cu rezultatul are titlul SumOfVANZARI
atribuit de aplicaie,

Figura 5. Tabela rezultat din interogare.

5. se modific numele coloanei SumOfVANZRI din tabela rezultat pentru a fi mai


semnificativ; n celula VANZARI din linia Field se introduce numele dorit, Vanzari pe
zone : nainte de numele coloanei, ca n Figura 6,

Figura 6. Modificarea numelui unei coloane n tabela rezultat.

6. noua tabel rezultat este cea din Figura 7.

Figura 7. Tabela rezultat din interogri.

Vom modifica irurile din coloana ZONA astfel nct ele s apar cu litere mari. In prima
celul a liniei Field vom introduce expresia
ZONE:ucase([ZONA])
vezi Figura 8. Deoarece n expresie avem rezultatul unei funcii, ucase([ZONA]), trebuie
s atribuim i un nume coloanei, care a fost ales ZONE.

Figura 8. Modificare unei coloane n tabela rezultat.

Noua tabel rezultat este cea din Figura 9.

Figura 9. Tabela rezultat din interogare.

Instruciunea SELECT generat de Access din formular este cea din Figura 10.

Figura 10. Instruciunea SELECT a interogrii.

1.3 Utilizarea funciilor de agregare n rapoarte


Funciile de agegare se pot utiliza i n rapoarte. Cmpurile cu rezultate ale unor expresii
se introduc n rapoarte n casete text. Vom arta cum se face acest lucru pe un exemplu
simplu.
Fie o tabel PRODUS-PRET ce are coloanele codul unui produs, ID_PRODUS i preul
lui, PRET.
PRET_PRODUS
ID_PRODUS

PRET

Proiectarea acestei tabele este cea din Figura 11.

Figura 11. Proiectare tabelei PRODUS-PRET.

Tabela cu date este cea din Figura 12.

Figura 12. Tabela PRODUS-PRET.

Vrem s crem un raport care s conin cele dou coloane ale tabelei plus nc o coloan
cu valoarea TVA care este dat de relaia PRET * 0.19. Vom crea un raport cu aplicaia
vrjitor, utilizat n capitolele anterioare cu cele dou coloane ale tabelei, la care vom
aduga coloana cerut cu aplicaia Design View. Raportul iniial, creat cu aplicaia
vrjitor, are numele PRODUS-PRET i n vederea Print este cel din Figura 13 iar n
vederea Design este cel din Figura 14.

Figura 13. Raport cu coloanele tabelei PRODUS-PRET.

10

Figura 14. Fereastra Design View pentru raportul PRODUS-PRET.

Vom aduga o etichet cu numele TVA i o caset text unde s apar valoarea cerut.
Procedura de adugare a etichetei n zona Page Header este cea dinainte:
1. clic pe obiectul Aa din caseta de instrumente; cursorul se modific n form de cruce,
2. se deseneaz un dreptunghi n zona Page Header unde se scrie textul TVA.
Trebuie s adugm o caset text n zona Detail. Acest obiect este ab| i el genereaz
dou obiecte, unul o etichet i alturi o caset text, dup cum s-a vzut ntr-un capitol
anterior. Se adaug acest obiect i se terge eticheta, ca mai nainte. In caseta text se
introduce textul
=[PRET]*0,19
Se poate proceda i altfel: se adug caseta text n zona Detail i se mut eticheta n zona
Page Header cu opiunile Cut i Paste ale meniului Edit.
Acesta este modul de a insera expresii aritmetice ale cror rezultate vor aprea n caseta
text. Se adaug o linie de subliniere a etichetei coloanei TVA. Toate obiectele adugate
au nite caracteristici implicite, dimensiunea i tipul fontului, alinierea textului, etc., care
se pot modifica cu caseta Properties a obiectelor grafice. Proiectarea raprotului final este
cea din Figura 15.

11

Figura 15. Modificarea proiectrii raportului PRODUS-PRET.

Raportul final este artat n Figura 16.

Figura 16. Raportul PRODUS-PRET modificat.

12

Vom exemplifica utilizarea funciilor standard la crearea unui raport al vnzrilor anuale
ale unei intreprinderi din tabela din Figura 17. Vrem ca n raport s apar la sfrit
valoarea minim, maxim i medie anual a vnzrilor.

Figura 17. Vnzrile anuale ale unei intreprinderi.

Pentru nceput crem un raport cu aplicaia vrjitor pe baza tabelei de date. In raport apar
coloanele AN i SUMA ca n Figura 18.

Figura 18. Raportul vnzrilor anuale.

Fereasta Design View a raportului, generat de aplicaia vrjitor, este cea din Figura 19.

13

Figura 19. Fereastra Design View a raportului din Figura 18.

Vom aduga n zona Report Footer trei casete de text n care vor apare valorile minim,
maxim i medie a cifrelor vnzrilor anuale. Pentru aceasta selectm n caseta Toolbox
obiectul Text Box simbolizat prin ab| i deplasm cursorul n locul unde dorim s apar
caseta text. Desenm dreptunghiul corespunztor casetei; n acest dreptunghi apare caseta
text iar n stnga apare eticheta casetei. Facem acest lucru pentru cele trei casete text i
obinem proiectarea din Figura 20. Reamintim c, la selectarea obiectului grafic n caseta
Toolbox, cursorul are forma +ab|.

14

Figura 20. Fereastra Design View cu casetel text adugate.

Vom introduce textul etichetelor n obiectele Text9, , Text13 dup cum urmeaz:
1. se selecteaz obiectul grafic cu un clic,
2. se execut nc un clic pe obiect i apare cursorul de inserare,
3. tastm textul dorit pentru etichet.
Casete text au eticheta Unbound, deoarece el nu sunt conectate la nicio surs de date.
Vom introduce funciile n felul urmtor:
1. se selecteaz obiectul grafic cu un clic,
2. se execut nc un clic pe obiect i apare cursorul de inserare,
3. se introduce expresia funciei.
Expresia funciei are forma:
=nume_funcie(argument)
Pentru funcia Min expresia pe care o introducem este
=Min(SUMA)
Argumentul funciei este coloana SUMA. Aplicaia Access scrie argumentul n paranteze
drepte, [ i ], astfel nct expresia funciei apare
=Min([SUMA])
Expresia funciei se poate introduce i cu aplicaia Expression Builder.
Se mai introduce o linie deasupra celor trei casete text. Grosimea liniei se va lua 2 pt.
Linia se va selecta n caseta Properties.
Proiectarea final este cea din Figura 21.

15

Figura 21. Proiectarea final a raportului.

Raportul este cel din Figura 22.

16

Figura 22. Raportul vnzrilor unei intreprinderi.

1.4 Probleme propuse


1. Fie tabela de mai jos cu vnzrile trimestriale ale unei interprinderi n milioane lei n
diverse ri. Cheia primar a tabelei este TARA.
VANZARI
TARA
Germania
Franta
Austria
Romania
SUA
Spania

TRIM_1
62
51
31
26
92
48

TRIM_2
80
78
35
32
105
55

TRIM_3
98
95
46
40
160
59

TRIM_4
75
63
34
29
97
51

17

Se cere:
s se proiecteze tabela,
s se completeze tabela cu date cu ajutorul unui formular,
s se fac un raport n care s se afieze totalurile pe trimestre. Se va crea un raport cu
tabela utiliznd aplicaia Report Wizard. In seciunea Report Footer se vor aduga
patru casete text n care se va introduce funcia SUM(),
s se proiecteze o diagram cu vnzrile pe ri.
2. Fie tabela DATE_CONTABILE de mai jos cu datele contabile ale unei intreprinderi.
Cheia primar a tabelei este AN.
DATE_CONTABILE
AN

VENITURI

CHELTUIELI

PROFIT_BRUT

IMPOZIT

PROFIT_NET

2001
2002
2003
2004
2005
2006

470
495
602
714
890
860

412
430
495
530
620
610

58
65
107
184
270
250

17.4
19.5
32.1
55.2
81
75

40.6
45.5
74.9
128.8
189
175

In tabel se vor introduce doar coloanele AN, VENITURI, CHELTUIELI. Celelalte


coloane se vor calcula cu formulele:
PROFIT_BRUT = VENITURI CHELTUIELI
IMPOZIT = PROFIT_BRUT * 30%
PROFIT_NET = PROFIT_BRUT - IMPOZIT
Se cere:
s se proiecteze tabela,
se vor introduce datele cu un formular,
se va crea un raport care s fac suma datelor pe coloane; sumele respective apar n
zona Report Footer,
se va crea o diagram cu profitul net pe ani.
3. Fie tabela VANZARI_ZONE_ANI de mai jos ce conine date despre vnzrile unei
intreprinderi pe zone geografice. Cheia primar a tabelei este ID.
VANZARI_ZONE_ANI
ID
1
2
3
4
5
6

ZONA
Moldova
Transilvania
Muntenia
Moldova
Transilvania
Muntenia

AN
2008
2007
2008
2008
2007
2008

TRIMESTRU
1
2
4
2
1
3

VANZARI
173000
240000
128500
1687000
135200
98200

18

7
8
9
10
11
12
13
14
15
16
17
18
19
20

Muntenia
Muntenia
Moldova
Moldova
Transilvania
Transilvania
Transilvania
Transilvania
Moldova
Moldova
Transilvania
Transilvania
Muntenia
Moldova

2008
2008
2008
2008
2008
2008
2008
2008
2007
2007
2007
2007
2007
2007

2
1
3
4
1
2
4
3
4
3
3
4
4
2

102500
78500
162400
143500
224800
254500
197600
204300
138600
193500
238300
231600
189400
142300

Se cere:
s se proiecteze tabela,
se va crea un formular de introducere a datelor cu care se umple tabela,
se va crea o interogare cu vnzrile pe ani pe zone geografice,
se vor crea diagrame cu suma vnzrilor, grupate pe ani i pe trimestre.
4. Fie tabela de mai jos cu angajaii unei intreprinderi. Cheia primar a tabelei este CNP.
ANGAJATI
CNP
1237
3520
2715
1744
2560
4187
3208

Nume
Ionescu
Popa
Mihai
Georgescu
Vasile
Nicolaescu
George

Prenume
Vasile
Gheorghe
Nicolae
Nicolae
Mihai
Ioan
Ilie

Data naterii
22/05/1985
15/07/1990
03/09/1987
14/10/1988
12/06/1986
15/02/1992
18/12/1988

Se cere:
s se proiecteze tabela,
se va crea un formular de introducere a datelor cu care se umple tabela,
s se creeze un raport n care s apar i vrsta fiecrei persoane.

1.5 Intrebri de control


1. Care sunt funciile SQL standard de agregare a datelor?
2. Care este forma instruciunii SELECT n care se utilizeaz funcii de agregare a
datelor?

19

20

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