Sunteți pe pagina 1din 23

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI

FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

LIMBAJE RELAŢIONALE
PENTRU DEFINIREA ŞI
MANIPULAREA
DAT E L O R .
LIMBAJUL SQL

BUCUREŞTI
2021-2022
LIMBAJUL SQL-ORACLE
AGREGAREA DATELOR

Clauze în SELECT Descriere


grupează liniile în scopul identificării
GROUP BY
valorilor comune grupurilor (valori
coloane_grupare
agregate calculate prin funcţii de grup)
restricţionează grupurile create prin clauza
HAVING condiţie GROUP BY pe baza unei condiţii asupra
funcţiilor de grup

2
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

3
REZOLVAŢI!

Afişaţi angajaţii care au salariul mai mare decât salariul mediu.

4
REZOLVARE

Afişaţi angajaţii care au salariul mai mare decât salariul mediu.

SELECT *
FROM angajati
WHERE salariul>(SELECT AVG(salariul) FROM
angajati);

5
REZOLVAŢI!

Ce rezultat va produce următoarea interogare SQL?

SELECT id_departament Departament, id_functie Functie,


COUNT(id_angajat) "NR.ANGAJATI"
FROM angajati
WHERE id_departament IS NOT NULL
GROUP BY id_departament, id_functie
ORDER BY id_departament;

6
REZOLVARE

DEPARTAMENT FUNCTIE NR.ANGAJATI


----------- ---------- -----------
10 AD_ASST 1
20 MK_MAN 1
20 MK_REP 1
30 PU_CLERK 5
30 PU_MAN 1
40 HR_REP 1
50 SH_CLERK 20
50 ST_CLERK 20
50 ST_MAN 5

7
LIMBAJUL SQL-ORACLE
AGREGAREA DATELOR

Operatori Descriere

ROLLUP creează subtotaluri

creează subtotaluri pentru fiecare


CUBE
combinaţie posibilă de dimensiuni

defineşte grupuri multiple într-o singură


GROUPING SET
cerere

8
Limbajul SQL-Oracle
Agregarea datelor

SELECT id_departament Departament, id_functie Functie,


COUNT(id_angajat) "NR.ANGAJATI"
FROM angajati
WHERE id_departament IS NOT NULL
GROUP BY ROLLUP(id_departament, id_functie)
ORDER BY id_departament;

9
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 10
Limbajul SQL-Oracle
Agregarea datelor

SELECT id_departament Departament, id_functie Functie,


COUNT(id_angajat) "NR.ANGAJATI"
FROM angajati
WHERE id_departament IS NOT NULL
GROUP BY CUBE(id_departament, id_functie)
ORDER BY id_departament;

11
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 12
REZOLVAŢI!

Afişaţi numărul total de salariaţi, precum şi numărul de salariaţi


angajaţi în anii 1996, 1997 şi 1998.

13
REZOLVARE

Afişaţi numărul total de salariaţi, precum şi numărul de salariaţi angajaţi


în anii 1996, 1997 şi 1998.

SELECT COUNT(id_angajat) TOTAL,


SUM(DECODE(EXTRACT(YEAR FROM
data_angajare),1996,1,0)) Angajati_1996,
SUM(DECODE(EXTRACT(YEAR FROM
data_angajare),1997,1,0)) Angajati_1997,
SUM(DECODE(EXTRACT(YEAR FROM
data_angajare),1998,1,0)) Angajati_1998
FROM angajati;

TOTAL ANGAJATI_1996 ANGAJATI_1997 ANGAJATI_1998


---------- ------------- ------------- -------------
107 10 28 23
14
LIMBAJUL SQL-ORACLE
JONCŢIUNI

Oracle Standard SQL


Joncţiune de egalitate
SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 JOIN tabela2 t2
WHERE t1.b=t2.b; ON t1.b=t2.b;
SELECT t1.a, t2.c
FROM tabela1 t1 NATURAL JOIN tabela2
t2
SELECT t1.a, t2.c
FROM tabela1 t1 JOIN tabela2 t2
USING (b);

15
LIMBAJUL SQL-ORACLE
JONCŢIUNI

Oracle Standard SQL


Joncţiune externă stânga
SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 LEFT JOIN tabela2 t2
WHERE t1.b=t2.b (+); ON t1.b=t2.b;

Joncţiune externă dreapta


SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 RIGHT JOIN tabela2 t2
WHERE t1.b (+)=t2.b; ON t1.b=t2.b;

16
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;
17
REZOLVAŢI!

O relaţie este în forma normală 3 (FN3) dacă:


a) este în forma normală 2 (FN2) şi fiecare atribut non-cheie primară depinde în
mod netranzitiv de cheia primară a relaţiei
b) este în forma normală 1 (FN1) şi fiecare atribut cheie primară depinde
tranzitiv de atributele non-cheie primară
c) este în forma normală 2 (FN2) şi are dependenţe funcţionale complete
d) este în forma normală 1 (FN1) şi are dependenţe funcţionale incomplete
e) este în forma normală 2 (FN2) şi are cel puţin o dependenţă funcţională
completă între atributele non-cheie şi cheia primară a relaţiei

18
REZOLVAŢI!

Normalizarea relaţiilor din cadrul bazelor de date relaţionale oferă


posibilitatea:
a)reducerii complexităţii sistemului informatic
b)sporirii calităţii datelor de intrare
c)sporirii vitezei de răspuns la cererile utilizatorilor
d)înlăturării anomaliilor de actualizare
e)verificării corelaţiilor logice dintre atributele relaţiei

19
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
20
REZOLVAŢI!

Fie relaţia:
Episoade (cod_episod, titlu_episod, nume_regizor,
nationalitate_regizor).
Care este prima FN încălcată:
a)FN1
b)FN2
c)FN3
d)BCNF
e)Nu încalcă nicio FN

21
REZOLVAŢI!

Fie relaţia:
Episoade_Seriale(cod_serial, cod_episod, cod_regizor).
Intr-un serial, episoadele pot fi regizate de persoane diferite.
Care este prima FN încălcată:
a)FN1
b)FN2
c)FN3
d)BCNF
e)Nu încalcă nicio FN

22
CURSUL 11...

• Limbaje relaţionale pentru definirea şi manipularea datelor.


Limbajul SQL. (continuare)

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