Documente Academic
Documente Profesional
Documente Cultură
12/27/2012
CUPRINS
Funcia COUNT(exp)
C
- determin numrul de valori ale lui exp. Aceast funcie poate fi folosit n combinaie cu U
clauza DISTINCT, pentru a numra doar valorile distincte dintr-un domeniu.Exemple: P
SELECT COUNT(job) FROM EMP R
SELECT COUNT(DISTINCT(job)) FROM EMP I
N
Funcia MAX(exp) S
Funcia MIN(exp)
Funcia AVG(exp)
Funcia SUM(exp)
1. Afiai salariul mediu, maxim, minim i suma tuturor salariilor angajailor cu job
MANAGER.
2. Afiai datele(ziua i luna, n format monday 06, september) la care s-au fcut prima
i ultima angajare n anul 1982.
3. Afiai primul i ultimul nume de angajat n ordine alfabetic.
4. Afiai numrul angajailor care iau comision din departamentul 30.
5. Afiai numrul de departamente din firm.
6. Afiai numrul de funcii din firm.
7. Afiai numrul de persoane angajate n 1981.
Clauza GROUP BY
Pentru a putea mpri tabela n grupuri mai mici se folosete clauza GROUP BY. Folosirea
acesteia returneaz informaii despre fiecare grup. Exemplu:
Comanda de mai sus afieaz salariul maxim i salariul minim pentru fiecare departament.
Exemplu:
Subtotaluri
Pentru a efectua sinteze a datelor pe baza totalurilor pariale folosim clauzele ROLLUP i
GROUPING. Clauza ROLLUP este inclus n clauza GROUP BY, argumentele acesteia fiind
coloanele de grupare. Clauza GROUPING este inclus n clauza SELECT, argumentul acesteia
fiind coloana de grupare. Rezultatul ntors de aceast clauz este 1 atunci cnd coloana
respectiv este inclus ntr-un grup de agregare superior sau 0 pentru liniile din afara
subtotalurilor.Exemplu:
SELECT
CASE
WHEN GROUPING(job)=1 THEN 'Nr. total angajati'
WHEN GROUPING(ename)=1 THEN 'Nr. angajati pe functia de '
ELSE
ename
END NUME, job FUNCTIA, COUNT(empno) NUMAR FROM EMP
GROUP BY ROLLUP(job,ename)
Deschide baza de date Oracle i urmrete rezultatul afiat de interogarea de mai sus.
Fia nr. 2 Rezolvarea fiei nr. 2
Deschide baza de date Oracle i urmrete rezultatul afiat de interogrile de mai jos:
Exerciii C
1. Afiai salariul maxim, minim, suma salariilor i salariul mediu pentru fiecare funcie. Care este U
diferena ntre salariul maxim i salariul minim pentru fiecare funcie? P
R
2. Determinai numrul de angajai cu aceeai funcie. I
3. Determinai numrul de manageri(Folosii cmpul MGR). N
4. Afisati id-ul managerului si salariul celui mai slab platit angajat al acelui manager. Excludeti pe S
oricine al carui manager nu este cunoscut si orice grup unde salariul minim este 1000 sau mai
putin. Sortati rezultatele in ordinea descrescatoare a salariilor minime.
5. Creai o interogare care s afieze numele angajatului, funcia, salariul total(SUBTOTAL) pentru
acea funcie i totalul general obinut.
6. Modificai interogarea de mai sus astfel nct, s afieze numele angajatului, numrul
departamentului, salariul total pe fiecare departament i totalul general.
7. Modificai interogarea de mai sus astfel nct, s afieze numele angajatului, numrul
departamentului, funcia, salariul total pe fiecare departament i pe fiecare funcie precum i
totalul general.
8. Afiai numrul total de angajai si apoi numrul de persoane angajate n anii 1980, 1981, 1982,
1983 si 1984. Pentru rezolvarea acestui exerciiu se folosesc SUBINTEROGRI scalare
(subinterogare ce returneaz o singur linie/coloan(vezi mai jos rezolvarea).
SELECT
(SELECT COUNT(empno) FROM emp) NR_TOTAL,
(SELECT COUNT(empno) FROM emp WHERE TO_CHAR(hiredate,'yyyy')='1980') AS "1980",
(SELECT COUNT(empno) FROM emp WHERE TO_CHAR(hiredate,'yyyy')='1981') AS "1981",
(SELECT COUNT(empno) FROM emp WHERE TO_CHAR(hiredate,'yyyy')='1982') AS "1982",
(SELECT COUNT(empno) FROM emp WHERE TO_CHAR(hiredate,'yyyy')='1983') AS "1983",
(SELECT COUNT(empno) FROM emp WHERE TO_CHAR(hiredate,'yyyy')='1984') AS "1984"
FROM DUAL
Fia nr. 3
Deschide baza de date Oracle i rezolv interogrile de mai jos:
1
Se folosete clauza ROLLUP
2
Se folosesc clauzele ROLLUP i GROUPING
3
Se adaug clauza HAVING
4
Se recomand folosirea subinterogrilor scalare
Rezolvarea fiei nr. 1 Fia nr.1