Documente Academic
Documente Profesional
Documente Cultură
Agregarea datelor
1
Limbajul SQL-Oracle
Agregarea datelor
SELECT id_departament Departament, COUNT(id_angajat)
"NR.ANGAJATI"
FROM angajati
WHERE id_departament IS NOT NULL
GROUP BY id_departament
HAVING COUNT(id_angajat)>2;
DEPARTAMENT NR.ANGAJATI
----------- -----------
30 6
50 45
60 5
80 34
90 3
100 6 2
Rezolvaţi!
3
Rezolvaţi!
Ce rezultat va produce următoarea interogare SQL?
4
Limbajul SQL-Oracle
Agregarea datelor
Operatori Descriere
5
Limbajul SQL-Oracle
Agregarea datelor
6
Rezultat
DEPARTAMENT FUNCTIE NR.ANGAJATI
----------- ---------- -----------
10 AD_ASST 1
10 1
20 MK_MAN 1
20 MK_REP 1
20 2
30 PU_CLERK 5
30 PU_MAN 1
30 6
40 HR_REP 1
40 1
50 SH_CLERK 20
50 ST_CLERK 20
50 ST_MAN 5
50 45
...................................
106
7
Limbajul SQL-Oracle
Agregarea datelor
8
Rezultat
DEPARTAMENT FUNCTIE NR.ANGAJATI
----------- ---------- -----------
..................................
30 PU_CLERK 5
30 PU_MAN 1
30 6
40 HR_REP 1
40 1
50 SH_CLERK 20
50 ST_CLERK 20
50 ST_MAN 5
50 45
AD_PRES 1
AD_VP 2
FI_ACCOUNT 5
HR_REP 1
IT_PROG 5
...................................
106 9
Limbajul SQL-Oracle
Agregarea datelor
10
Limbajul SQL-Oracle
Agregarea datelor
11
Rezultat
12
Limbajul SQL-Oracle
Agregarea datelor
SELECT
NVL(DECODE(GROUPING(l.oras),1,UPPER(t.denumire_tara),
INITCAP(t.denumire_tara)),'TOTAL GENERAL')
denumire_tara,
l.oras, COUNT(d.id_departament) Nr_departamente
FROM departamente d, locatii l, tari t
WHERE d.id_locatie=l.id_locatie
AND l.id_tara=t.id_tara
GROUP BY ROLLUP(t.denumire_tara,l.oras);
13
Rezultat
14
Limbajul SQL-Oracle
Agregarea datelor
SELECT l.oras Oras, d.id_departament Departament,
a.id_functie Functie, COUNT(a.id_angajat) "NR.ANGAJATI"
FROM angajati a, departamente d, locatii l
WHERE a.id_departament IS NOT NULL
AND a.id_departament=d.id_departament
AND d.id_locatie=l.id_locatie
GROUP BY GROUPING SETS ((),(l.oras),
(l.oras, d.id_departament),
(l.oras, d.id_departament, a.id_functie))
ORDER BY l.oras, d.id_departament;
15
Rezultat
ORAS DEPARTAMENT FUNCTIE NR.ANGAJATI
------------------------------ ----------- ---------- -----------
Oxford 80 SA_REP 29
Oxford 80 SA_MAN 5
Oxford 80 34
Oxford 34
Seattle 10 AD_ASST 1
Seattle 10 1
Seattle 30 PU_MAN 1
Seattle 30 PU_CLERK 5
Seattle 30 6
Seattle 90 AD_VP 2
Seattle 90 AD_PRES 1
Seattle 90 3
Seattle 100 FI_MGR 1
Seattle 100 6
Seattle 100 FI_ACCOUNT 5
Seattle 110 AC_MGR 1
Seattle 110 AC_ACCOUNT 1
Seattle 110 2
Seattle 18
106
SELECT l.oras Oras, d.id_departament Departament, a.id_functie
Functie, COUNT(a.id_angajat) "NR.ANGAJATI"
FROM angajati a, departamente d, locatii l
WHERE a.id_departament IS NOT NULL
AND a.id_departament=d.id_departament
AND d.id_locatie=l.id_locatie
GROUP BY l.oras, d.id_departament, a.id_functie
UNION ALL
SELECT l.oras Oras, d.id_departament Departament, NULL,
COUNT(a.id_angajat) "NR.ANGAJATI"
.......
GROUP BY l.oras, d.id_departament
UNION ALL
SELECT NULL, NULL, NULL, COUNT(a.id_angajat) "NR.ANGAJATI"
FROM angajati a, departamente d, locatii l
WHERE a.id_departament IS NOT NULL
AND a.id_departament=d.id_departament
17
AND d.id_locatie=l.id_locatie;
Limbajul SQL-Oracle
Agregarea datelor
CUBE(a,b,c)=GROUPING SETS((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),())
ROLLUP(a,b,c)=GROUPING SETS((a,b,c),(a,b),(a),())
18
Rezolvaţi!
19
Rezolvaţi!
20
Limbajul SQL-Oracle
Joncţiuni
Joncţiune de egalitate
21
Limbajul SQL-Oracle
Joncţiuni
22
Limbajul SQL-Oracle
Joncţiuni
Oracle Standard SQL
Joncţiune externă completă
SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 FULL JOIN tabela2 t2
WHERE t1.b=t2.b (+) ON t1.b=t2.b;
UNION
SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2
WHERE t1.b (+)=t2.b;
Joncţiunea tabelei cu ea însăşi
SELECT t1.a, t2.b SELECT t1.a, t2.b
FROM tabela1 t1, tabela1 t2 FROM tabela1 t1 JOIN tabela1 t2
WHERE t1.a=t2.b; ON t1.a=t2.b;
23
Rezolvaţi!
O relaţie este în forma normală 3 (FN3) dacă:
24
Rezolvaţi!
Normalizarea relaţiilor din cadrul bazelor de date relaţionale oferă
posibilitatea:
25
Rezolvaţi!
Se consideră tabela:
produse (codp number(3), denp varchar2(25), um varchar2(3))
Comanda SQL-Oracle:
SELECT DISTINCT codp, denp FROM produse WHERE codp > 100
ORDER BY denp;
implementează următorii operatori din algebra relaţională:
a) proiecţie şi joncţiune
b) selecţie şi intersecţie
c) selecţie şi reuniune
d) selecţie şi proiecţie
e) ordonare şi selecţie
26
CURSUL 10...