Sunteți pe pagina 1din 2

13. ntr-o baz de date se memoreaz informaii despre angajaii unei firme i departamentele acesteia.

Diagrama ERD corespunztoare este:


a)

Construii baza de date cu tabele corespunztoare i relaiile reprezentate in ERD i populai


tabelele cu nregistrri relevante pentru cerinele urmtoare:
b) S se afieze, n ordinea alfabetic a numelor i a prenumelor, toi angajaii din departamentul care
are id-ul 10 (nume, prenume, id_dep).
c) Afiai numele fiecrui departament i numrul angajailor din acel department. Introducei un
alias pentru coloana calculat.
d) Afiai departamentul n care salariul mediu este cel mai mare n raport cu celelalte departamente.
A)
CREATE TABLE departamente(
id_dep NUMBER(2) PRIMARy KEY,
nume_dep VARCHAR2 (50) NOT NULL,
adresa VARCHAR2 (100) NOT NULL,
manager VARCHAR2 (50) NOT NULL)
CREATE TABLE angajati(
id NUMBER(4) PRIMARY KEY,
id_dep NUMBER(2) REFERENCES departamente (id_dep),
nume VARCHAR2(50) NOT NULL,
prenume VARCHAR2(50) NOT NULL,
data_ang DATE NOT NULL,
salariu NUMBER (6,2) NOT NULL,
email VARCHAR2(50),
tel VARCHAR2(10))
INSERT INTO departamente VALUES (1, 'D1', 'A1', 'Manager1')
INSERT INTO departamente VALUES (2, 'D2', 'A2', 'Manager2')
INSERT INTO departamente VALUES (10, 'D10', 'A10', 'Manager10')
INSERT INTO angajati VALUES (100, 1, 'n1', 'p1', '12-feb-1980', 1200, 'abcd@yahoo.com', '')
INSERT INTO angajati VALUES (101, 1, 'n2', 'p2', '12-feb-1980', 1200, 'xyz@yahoo.com', '')
INSERT INTO angajati VALUES (105, 1, 'n5', 'p5', '12-feb-1980', 1500, 'xyz@yahoo.com', '')
INSERT INTO angajati VALUES (1001, 10, 'n100', 'p100', '12-feb-1980', 1200, 'dedd@yahoo.com', '')
INSERT INTO angajati VALUES (1002, 10, 'n101', 'p101', '12-feb-1980', 1200, 'ddededd@yahoo.com', '')
B)
SELECT nume, prenume, id_dep
FROM angajati
WHERE id_dep = 10
ORDER BY nume, prenume
C)
SELECT nume_dep, COUNT (nume_dep) AS "Nr. angajati"
FROM angajati A JOIN departamente B ON (A.id_dep = B.id_dep)
GROUP BY nume_dep
D)
SELECT nume_dep, AVG (salariu)
FROM angajati A JOIN departamente B ON (A.id_dep = B.id_dep)

GROUP BY nume_dep
HAVING AVG(salariu) = (

SELECT MAX (sal_mediu)


FROM ( SELECT AVG (salariu) AS sal_mediu
FROM angajati A JOIN
departamente B ON (A.id_dep = B.id_dep)
GROUP BY nume_dep))
D) o alta varianta de rezolvare
SELECT nume_dep, AVG (salariu)
FROM angajati A JOIN departamente B ON (A.id_dep = B.id_dep)
GROUP BY nume_dep
HAVING AVG(salariu) >= ALL (SELECT AVG (salariu) AS sal_mediu
FROM angajati A JOIN departamente B
ON (A.id_dep = B.id_dep)
GROUP BY nume_dep)

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