C4-BD
-
Upload
iancu-adina-floricica -
Category
Documents
-
view
215 -
download
0
description
Transcript of C4-BD
-
BAZE DE DATE
Universitatea Constantin Brncui din Trgu-Jiu
Facultatea de Inginerie
Departamentul de Automatic, Energie i Mediu
LECTOR DR. ADRIAN RUNCEANU
-
Limbajul SQL
Cereri SELECT pe o tabela
4.1. Funcii
4.2. Funcii referitoare la o singur nregistrare
4.3. Funcii referitoare la mai multe nregistrri
4.3.1. Clauza GROUP BY
4.3.2. Excluderea grupurilor (clauza HAVING)
4.3.3. Imbricarea funciilor de grup
28.04.2014 Curs - BAZE DE DATE 2
-
Tabele Angajati si Departamente
Pentru exemplele din cursuri vom folosi tabelele
Angajati si Departamente.
DEPARTAMENTE
Id_dept NUMBER(3) CHEIE PRIMARA (PK)
Den_dept VARCHAR2(20)
Id_manager VARCHAR2(3)
Locatie VARCHAR2(100)
28.04.2014 Curs 3 - BAZE DE DATE 3
-
Tabele Angajati si DepartamenteANGAJATI
Id_angajat NUMBER(3) CHEIE PRIMARA (PK)
Id_dept NUMBER(3)
REFERINTA (FK) LA TABELA DEPARTAMENTE
Nume VARCHAR2(40)
Prenume VARCHAR2(40)
Functie VARCHAR2(25)
Salariu NUMBER(7)
Id_manager VARCHAR2(3)
Data_ang DATE
Comision NUMBER(5)
28.04.2014 Curs 3 - BAZE DE DATE 4
-
Funcii
Funciile sunt o caracteristic
important a SQL si sunt utilizate pentru:
a realiza calcule asupra datelor
a modifica date
a manipula grupuri de nregistrri
a schimba formatul datelor
sau pentru a converti diferite tipuri de date
28.04.2014 Curs - BAZE DE DATE 5
-
Funcii
Funciile se clasific n dou tipuri:
1. Funcii referitoare la o singur nregistrare
2. Funcii referitoare la mai multe nregistrri
28.04.2014 Curs - BAZE DE DATE 6
-
Funcii
1. Funcii referitoare la o singur nregistrare:
1.funcii caracter
2.funcii numerice
3.funcii pentru data calendaristic si or
4.funcii de conversie
5.funcii diverse
28.04.2014 Curs - BAZE DE DATE 7
-
Funcii
2. Funcii referitoare la mai multe nregistrri:
funcii totalizatoare sau funcii de grup
28.04.2014 Curs - BAZE DE DATE 8
-
Funcii
Diferena dintre cele dou tipuri de funcii este numrul de nregistrri pe care acioneaz:
Funciile referitoare la o singur nregistrare returneaz un singur rezultat pentru fiecare rnd al tabelului,
pe cnd funciile referitoare la mai multe nregistrri returneaz un singur rezultat pentru fiecare grup de nregistrri din tabel.
28.04.2014 Curs - BAZE DE DATE 9
-
FunciiO observaie importanta este faptul c dac se
apeleaz o funcie SQL ce are un argument egal cu
valoarea Null, atunci n mod automat rezultatul va
avea valoarea Null.
Singurele funcii care nu respect aceast
regul sunt:
CONCAT
DECODE
DUMP
NVL
REPLACE
28.04.2014 Curs - BAZE DE DATE 10
-
Limbajul SQL
Cereri SELECT pe o tabela
4.1. Funcii
4.2. Funcii referitoare la o singur nregistrare
4.3. Funcii referitoare la mai multe nregistrri
4.3.1. Clauza GROUP BY
4.3.2. Excluderea grupurilor (clauza HAVING)
4.3.3. Imbricarea funciilor de grup
28.04.2014 Curs - BAZE DE DATE 11
-
Funcii referitoare la o singur nregistrare
Sunt funcii utilizate pentru manipularea
datelor individuale.
Ele pot avea unul sau mai multe
argumente i returneaz o valoare pentru
fiecare rnd rezultat n urma interogrii.
28.04.2014 Curs - BAZE DE DATE 12
-
Funcii referitoare la o singur nregistrare
Sunt mai multe tipuri de funcii pe un singur rnd.
n sintaxa general function_name este numele funciei i arg1,arg2 sunt argumentele funciei care pot fi date de numele unei coloane sau de o expresie.
28.04.2014 Curs - BAZE DE DATE 13
Sintaxa: function_name [(arg1,arg2,...)]
-
Funcii referitoare la o singur nregistrare
Funciile pe un singur rnd cuprind urmtoarele
tipuri de funcii:
1. funcii de tip caracter
2. funcii de tip numeric
3. funcii de tip data
4. funcii de conversie
5. funcii generale: NVL, NVL2, NULLIF,
COALESCE, CASE, DECODE
28.04.2014 Curs - BAZE DE DATE 14
-
Funcii referitoare la o singur nregistrare
1. Funcii de tip caracter
Aceste funcii au ca argumente date de
tip caracter i returneaz date de tip
VARCHAR2, CHAR sau NUMBER.
28.04.2014 Curs - BAZE DE DATE 15
-
Funcii referitoare la o singur
nregistrare
Cele mai importante funcii caracter sunt:
Functie Descriere
LOWER(column|expression) converteste alfa caracterele din caractere mari in
caractere mici
UPPER(column|expression) converteste alfa caracterele din caractere mici in
caractere mari
INITCAP(column|expression) converteste prima litera a fiecarui cuvant in
caractere mari si restul cuvantului in caractere
mici
CONCAT(column1|expression1,
column2|expression2)
functia este echivalentul operatorului de
concantenare (||)
SUBSTR(column|expression, m [, n]) returneaza un sir de n caractere incepand cu
caracterul aflat pe pozitia m
LENGHT(column|expression) returneaza numarul de caractere dintr-o expresie
INSTR(column|expression, 'string',
[m], [n])
returneaza pozitia unui anumit sir, optional se
poate incepe cautarea cu pozitia m sau cu a n-a
aparitie a sirului. m si n sunt prin definitie 1
REPLACE(text, search_string,
replacement_ string)
cauta un anumit text intr-un sir de caractere si
daca il gaseste il inlocuieste
28.04.2014 Curs - BAZE DE DATE 16
-
Funcii referitoare la o singur nregistrare
Exemplu de utilizare a
funciei LENGTH:
SELECT LENGTH(nume)
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 17
-
Funcii referitoare la o singur nregistrare
Exemplu:
SELECT 'Numele functiei pentru
'||UPPER(nume)||'este '||LOWER(functie) AS
"DETALII ANGAJAT"
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 18
-
Funcii referitoare la o singur nregistrare
Exemplu:
SELECT numar_ang, UPPER(nume), functie,
id_dept
FROM angajati
WHERE nume = 'popa'
28.04.2014 Curs - BAZE DE DATE 19
-
Funcii referitoare la o singur nregistrare
Clauza WHERE a acestei cereri SQLcompar numele din tabela Angajai cu 'Popa'.
Pentru comparaie numele sunt convertite n litere mici i din aceast cauz se obine un rezultat.
Exemplu:
SELECT id_ang, UPPER(nume), functie, id_dept
FROM angajati
WHERE INITCAP(nume) = 'Popa'
28.04.2014 Curs - BAZE DE DATE 20
-
Funcii referitoare la o singur nregistrare
Exemplu:
Pentru afiarea numelui cu majuscule de
folosete funcia UPPER.
SELECT id_ang, CONCAT(nume, functie) NUME,
UPPER(nume)
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 21
-
Funcii referitoare la o singur nregistrare
Spre deosebire de alte funcii, funciile
caracter pot fi imbricate pn la orice
adncime.
Dac funciile sunt imbricate, atunci
ele sunt evaluate din interior spre exterior.
Pentru a determina, de exemplu, de
cte ori apare caracterul 'A' n cmpul
nume vom folosi interogarea:
28.04.2014 Curs - BAZE DE DATE 22
-
Funcii referitoare la o singur nregistrare
SELECT nume, LENGTH (nume) - LENGTH (TRANSLATE(nume,'DA','D'))
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 23
NUME 'A'---- ---GHEORGHIU 0MARIN 1GEORGESCU 0IONESCU 0ALBU 1VOINEA 1STANESCU 1
-
Funcii referitoare la o singur nregistrare
Not:
n exemplul anterior, funcia TRANSLATE (nume, 'DA', 'D') va cuta n coloana nume primul caracter (caracterul 'D') din cel de-al doilea argument al funciei (irul de caractere 'DA') i l va nlocui cu primul caracter (adic tot cu caracterul 'D') din cel de-al treilea argument al funciei (irul de caractere 'D'), apoi va cuta cel de-al doilea caracter, adic caracterul 'A', i l va terge din cmpul nume deoarece acesta nu are caracter corespondent n cel de-al treilea argument al funciei.
Am folosit acest artificiu deoarece irul de caractere vid este echivalent cu valoarea Null, deci funcia TRANSLATE(nume, 'A', ' ') ar fi nlocuit toate valorile cmpului nume cu valoarea Null.
28.04.2014 Curs - BAZE DE DATE 24
-
Limbajul SQL
Cereri SELECT pe o tabela
4.1. Funcii
4.2. Funcii referitoare la o singur nregistrare
4.3. Funcii referitoare la mai multe nregistrri
4.3.1. Clauza GROUP BY
4.3.2. Excluderea grupurilor (clauza HAVING)
4.3.3. Imbricarea funciilor de grup
28.04.2014 Curs - BAZE DE DATE 25
-
4.3. Funcii de grup
Funciile de grup sunt funcii care opereaz pe un set de rnduri pentru a da un rezultat pe ntreg setul.
Parametrii i descrierea funciilor de grup.
Funciile de grup sunt:
1. AVG
2. COUNT
3. MAX
4. MIN
5. STDDEV
6. SUM
7. VARIANCE
28.04.2014 Curs - BAZE DE DATE 26
-
4.3. Funcii de grup
Functia Descriere
AVG([DISTINCT|ALL]n) Valoarea medie pentru grup, ignorand valorile nule
COUNT({*|[DISTINCT|ALL]expr})
Numarul de randuri unde expr evalueaza altceva in afara de null (folosind * sunt numarate toate randurile, incluzand duplicatele si pe cele cu valoare nula)
MAX([DISTINCT|ALL]expr) Valoarea maxima a expr, ignorand valorile nule
MIN([DISTINCT|ALL]expr) Valoarea minima a expr, ignorand valorile nule
STDDEV([DISTINCT|ALL]x) Deviatia standard pentru grup, ignorand valorile nule
SUM([DISTINCT|ALL]x) Suma valorilor pentru grup, ignorand valorile nule
VARIANCE([DISTINCT|ALL]x) Variatia pentru grup, ignorand valorile nule
28.04.2014 Curs - BAZE DE DATE 27
Fiecare dintre aceste funcii accept anumii parametri:
-
4.3. Funcii de grupDISTINCT face ca funcia s ignore valorile
duplicat.
ALL face ca funcia s afieze i valorile
duplicat.
Valoarea implicit este ALL, deci nu este
necesar s fie specificat.
Tipul de dat returnat de funcia expr poate fi
CHAR, VARCHAR2, NUMBER sau DATE.
Toate funciile de grup ignor valorile nule.
Pentru a lua n considerare i valorile nule se
folosesc funciile NVL, NVL2 sau COALESCE.
28.04.2014 Curs - BAZE DE DATE 28
-
4.3. Funcii de grup
Sintaxa funciilor de grup:
Rezultatele sunt sortate implicit cresctor. Pentru o ordonare descresctoare se va folosi clauza DESC dup ORDER BY.
28.04.2014 Curs - BAZE DE DATE 29
SELECT [coloana,]functie_de_grup(coloana), ...FROM tabel[WHERE conditie][GROUP BY coloana][HAVING conditie_de_grupare][ORDER BY coloana];
-
4.3. Funcii de grup
Exemplul 1:
Afiarea salariului mediu, maxim, minim i suma
tuturor salariilor angajailor cu funcie VANZATOR.
SELECT AVG(salariu), MAX(salariu), MIN(salariu),
SUM(salariu)
FROM angajati
WHERE functie='VANZATOR';
28.04.2014 Curs - BAZE DE DATE 30
-
4.3. Funcii de grup
Exemplul 2
Datele la care s-au fcut prima i ultima
angajare.
SELECT MIN(data_ang), MAX(data_ang)
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 31
-
4.3. Funcii de grup
Exemplul 3
Primul i ultimul nume de angajat n ordine
alfabetic.
SELECT MIN(nume), MAX(nume)
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 32
-
4.3. Funcii de grup
Funcia COUNT
Funcia COUNT are 3 formate:
28.04.2014 Curs - BAZE DE DATE 33
COUNT(*)
COUNT(expr)
COUNT(DISTINCT expr)
-
4.3. Funcii de grup
COUNT(*) ntoarce numrul de rnduri dintr-un
tabel care satisfac criteriul de selecie, incluznd
rndurile duplicat i rndurile coninnd valori
nule.
Dac clauza WHERE este introdus, atunci
COUNT(*) returneaz numrul de rnduri care
satisfac condiia din clauza WHERE.
28.04.2014 Curs - BAZE DE DATE 34
-
4.3. Funcii de grup
n contrast, funcia COUNT(expr) ntoarce
numrul de valori nenule din coloana specificat
de expr.
COUNT(DISTINCT expr) returneaz numrul de
valori distincte, nenule din coloana specificat de
expr.
28.04.2014 Curs - BAZE DE DATE 35
-
4.3. Funcii de grup
Exemplul 4
Numrul angajailor din departamentul cu id-ul 30.
SELECT COUNT(*)
FROM angajati
WHERE id_dept = 30;
28.04.2014 Curs - BAZE DE DATE 36
-
4.3. Funcii de grup
Exemplul 5
Numrul angajailor care iau comision din
departamentul 30.
SELECT COUNT(comision)
FROM angajati
WHERE id_dept = 30;
28.04.2014 Curs - BAZE DE DATE 37
-
4.3. Funcii de grup
Exemplul 6
Numrul de departamente din firma (varianta
incorect i varianta corect).
SELECT COUNT(id_dept), COUNT(DISTINCT
id_dept)
FROM angajati;
28.04.2014 Curs - BAZE DE DATE 38
-
4.3. Funcii de grup
Exemplul 7
Comisionul mediu n departamentul 30 (ignornd
sau nu valorile nule).
SELECT AVG(comision), AVG(NVL(comision, 0))
FROM angajati
WHERE id_dept = 30;
28.04.2014 Curs - BAZE DE DATE 39
-
Limbajul SQL
Cereri SELECT pe o tabela
4.1. Funcii
4.2. Funcii referitoare la o singur nregistrare
4.3. Funcii referitoare la mai multe nregistrri
4.3.1. Clauza GROUP BY
4.3.2. Excluderea grupurilor (clauza HAVING)
4.3.3. Imbricarea funciilor de grup
28.04.2014 Curs - BAZE DE DATE 40
-
4.3.1. Clauza GROUP BY
Pn acum toate funciile de grup au fost
aplicate ntregii tabele.
Pentru a putea mpri tabela n grupuri mai
mici se folosete clauza GROUP BY.
Folosirea acesteia returneaz informaii
sumare despre fiecare grup.
28.04.2014 Curs - BAZE DE DATE 41
-
4.3.1. Clauza GROUP BY
Folosind GROUP BY nu se pot extrage i coloane individuale, ci doar coloane ce rmn identice n tot grupul.
Folosind WHERE se pot exclude rnduri, naintea mpririi lor n grupuri.
Nu pot fi folosite aliasuri de coloane n clauza GROUP BY.
Implicit, rndurile sunt sortate cresctor dupcoloana (coloanele) specificate n GROUP BY.
Acest lucru poate fi schimbat folosind ORDER BY.
28.04.2014 Curs - BAZE DE DATE 42
-
4.3.1. Clauza GROUP BYExemplul 8
Salariul mediu pe fiecare departament.
SELECT id_dept, AVG(salariu)
FROM angajati
GROUP BY id_dept;
28.04.2014 Curs - BAZE DE DATE 43
-
4.3.1. Clauza GROUP BY
Exemplul 9
Salariul mediu pe fiecare departament, iar rezultatele ordonate dup salariul mediu pe departament.
SELECT id_dept, AVG(salariu)
FROM angajati
GROUP BY id_dept
ORDER BY AVG(salariu);
28.04.2014 Curs - BAZE DE DATE 44
-
4.3.1. Clauza GROUP BY
Gruparea dup mai multe coloane.
Cteodat este necesar obinerea de
rezultate pentru grupuri n alte grupuri.
Atunci n dreptul clauzei GROUP BY vom
ntlni mai multe coloane.
28.04.2014 Curs - BAZE DE DATE 45
-
4.3.1. Clauza GROUP BY
Exemplul 10
Salariul total pe fiecare departament si pe
fiecare functie, iar rezultatele ordonate dup
salariul mediu pe departament.
SELECT id_dept, functie, SUM(salariu)
FROM angajati
GROUP BY id_dept, functie
ORDER BY AVG(salariu);
28.04.2014 Curs - BAZE DE DATE 46
-
Limbajul SQL
Cereri SELECT pe o tabela
4.1. Funcii
4.2. Funcii referitoare la o singur nregistrare
4.3. Funcii referitoare la mai multe nregistrri
4.3.1. Clauza GROUP BY
4.3.2. Excluderea grupurilor (clauza HAVING)
4.3.3. Imbricarea funciilor de grup
28.04.2014 Curs - BAZE DE DATE 47
-
4.3.2. Excluderea grupurilor
(clauza HAVING)
Clauza HAVING funcioneaz n mare ca i
clauza WHERE, diferena fiind c HAVING este
folosit pentru a exclude anumite grupuri din rezultat,
nu rnduri cum fcea WHERE.
Clauza HAVING poate fi folosit nainte de
GROUP BY, ns este mai logic s fie folosit dup.
Ordinea execuiei va rmne aceeai.
28.04.2014 Curs - BAZE DE DATE 48
-
4.3.2. Excluderea grupurilor
(clauza HAVING)
Exemplul 11
Salariul mediu pe fiecare departament unde
acesta depete 3000$.
SELECT id_dept, AVG(salariu)
FROM angajati
HAVING AVG(salariu) > 3000
GROUP BY id_dept;
28.04.2014 Curs - BAZE DE DATE 49
-
4.3.2. Excluderea grupurilor
(clauza HAVING)
Exemplul 12
Salariul maxim pe fiecare departament unde
acesta depete 3000$.
SELECT id_dept, MAX(salariu)
FROM angajati
HAVING AVG(salariu) > 3000
GROUP BY id_dept;
28.04.2014 Curs - BAZE DE DATE 50
-
4.3.2. Excluderea grupurilor
(clauza HAVING)Exemplul 13
Salariul total pe fiecare funcie, fr a lua n calcul
MANAGERII, excluznd funciile cu suma salariilor
sub 6000$ cu ordonare dup total.
SELECT functie, SUM(salariu)
FROM angajati
WHERE functie!='MANAGER'
GROUP BY functie
HAVING SUM(salariu) < 6000
ORDER BY SUM(salariu);
28.04.2014 Curs - BAZE DE DATE 51
Salariul total pe fiecare funcie
fr a lua n calcul MANAGERII
excluznd funciile cu suma salariilor sub 6000$
cu ordonare dup total
-
Limbajul SQL
Cereri SELECT pe o tabela
4.1. Funcii
4.2. Funcii referitoare la o singur nregistrare
4.3. Funcii referitoare la mai multe nregistrri
4.3.1. Clauza GROUP BY
4.3.2. Excluderea grupurilor (clauza HAVING)
4.3.3. Imbricarea funciilor de grup
28.04.2014 Curs - BAZE DE DATE 52
-
Ordinea de executie a functiilor de
grup
Serverul Oracle execut funciile de grup ntr-o
anumit ordine:
1. Selecia rndurilor ce respect clauza WHERE
2. Gruparea rndurilor obinute, respectnd clauza
GROUP BY
3. Calcularea rezultatelor funciilor de grup pentru
fiecare grup n parte
4. Eliminarea grupurilor ce nu respect clauza
HAVING
5. Ordonarea rezultatelor respectnd clauza
GROUP BY.
28.04.2014 Curs - BAZE DE DATE 53
-
Ordinea de executie a functiilor de
grup Ordinea de execuie are o importan foarte mare,
deoarece are un impact direct asupra vitezei.
Cu ct mai multe nregistrri pot fi eliminate
utiliznd clauza WHERE, cu att mai puin va
dura gruparea i operaiile ce urmeaz.
Dac o cerere SQL este conceput s elimine
nregistrri/grupuri doar folosind clauza HAVING,
atunci ar fi bine de ncercat dac este posibil i
prin clauza WHERE. De obicei, totui, aceast
rescriere nu va fi posibil.
28.04.2014 Curs - BAZE DE DATE 54
-
4.3.3. Imbricarea functiilor de grup
Funciile de grup pot fi imbricate cu o
adncime de 2.
Exemplul 14
Salariul mediu maxim.
SELECT MAX(AVG(salariu))
FROM angajati
GROUP BY id_dept;
28.04.2014 Curs - BAZE DE DATE 55
-
ntrebri?
28.04.2014 Curs - BAZE DE DATE 56