Documente Academic
Documente Profesional
Documente Cultură
EXERCITII SEMINAR 10
SET 1
3) Sa se afiseze id_client, id_produs si cantitatea totala din fiecare produs, vanduta unui client.
4) Sa se afiseze numele, denumirea departamentului unde lucreaza si nivelul ierarhic pentru toti
angajatii care au subordonati si care au aceeasi functie ca angajatul Russell.
SET 2
1) Sa se afiseze numele, salariul, data angajarii, denumirea functiei pentru angajatii care au functia
Programmer sau Accountant si au fost angajati intre 1995 si 1998.
SELECT a.nume, a.salariul, a.data_angajare, f.denumire_functie
FROM
ANGAJATI a,
FUNCTII f
WHERE a.id_functie = f.id_functie
and f.denumire_functie IN ('Programmer', 'Accountant')
and a.data_angajare between to_date('01-01-1995', 'DD-MM-YYYY') and to_date('31-12-
1998', 'DD-MM-YYYY');
UPDATE RAND_COMENZI rc
SET rc.pret = rc.pret + 0.15 * rc.pret
WHERE rc.pret < (SELECT avg(rc2.pret)
FROM RAND_COMENZI rc2,
PRODUSE p
WHERE rc2.id_produs = p.id_produs
AND initcap(p.denumire_produs) like '%sound%');
ROLLBACK;
3) Sa se afiseze numele, data angajarii, functia actuala si functiile detinute de angajatii din
departamentele 50 si 80 in perioada 1995-1999.
SELECT a.nume,
a.data_angajare,
f_actual.denumire_functie AS functie_actuala,
f_anterior.denumire_functie AS functie_din_trecut
FROM ANGAJATI a
JOIN
FUNCTII f_actual ON a.id_functie = f_actual.id_functie
LEFT JOIN
ISTORIC_FUNCTII if_anterior ON a.id_angajat = if_anterior.id_angajat
LEFT JOIN
FUNCTII f_anterior ON if_anterior.id_functie = f_anterior.id_functie
WHERE a.id_departament IN (50, 80)
AND (if_anterior.data_inceput BETWEEN TO_DATE('01-01-1995', 'DD-MM-YYYY')
AND TO_DATE('31-12-1999', 'DD-MM-YYYY') OR
if_anterior.data_inceput IS NULL);
UPDATE RAND_COMENZI
SET pret = pret - 0.05 * pret
WHERE cantitate < (select avg(rc.cantitate)
from RAND_COMENZI rc,
PRODUSE p
where rc.id_produs = p.id_produs
and upper(p.denumire_produs) like '%CPU%');
ROLLBACK;
SET 3
UPDATE RAND_COMENZI rc
SET rc.pret = rc.pret - 0.10 * rc.pret
WHERE rc.pret > (select avg(rc2.pret)
from RAND_COMENZI rc2
where rc2.id_produs = 3155);
ROLLBACK;
4) Sa se afiseze numele, denumirea functiei, numarul de comenzi pentru angajatii care au incheiat
cel putin 2 comenzi.
5) Sa se realizeze actualizarea pretului la produse astfel incat noul pret sa se mareasca cu 5% pentru
toate produsele care au valoarea comandata (cantitate*pret) mai mare sau egala cu 1000 (se
actualizeaza tabela rand_comenzi). La final sa se anuleze operatia de actualizare.
UPDATE RAND_COMENZI rc
SET rc.pret = pret + 0.05*pret
WHERE rc.cantitate*rc.pret >= 1000;
ROLLBACK;
SELECT a.nume,
count(c.id_comanda) as numar_comenzi,
a.salariul,
(CASE
WHEN count(c.id_comanda) between 1 and 2 THEN 0.05
WHEN count(c.id_comanda) between 3 and 5 THEN 0.07
WHEN count(c.id_comanda) > 5 THEN 0.10
ELSE 0
END) * a.salariul as bonus_angajat
FROM ANGAJATI a,
COMENZI c
WHERE a.id_angajat = c.id_angajat
GROUP BY a.nume, a.salariul;