Sunteți pe pagina 1din 2

BAZE DE DATE – SEMINAR 10

_____________________________________________________________________

Operatorii algebrei relaționale


UNION, INTERSECT, MINUS

Sunt operatori care acționează asupra înregistrărilor selectate de 2 sau mai multe
interogări. Sunt similari operațiilor cu mulțimi.
Atenție: structura (coloanele) celor 2 interogări trebuie sa fie identica!

1. Operatorul MINUS – este utilizat pe 2(două) interogări pentru a extrage din


înregistrările selectate de prima interogare pe cele selectate de a doua interogare
(A-B).
Exemple:
1). Să se afișeze angajații care au salariul între 4999 și 6500 fără cei care au salariul
5000 și 6000.
SELECT * FROM angajati WHERE salariul BETWEEN 4999 AND 6500
MINUS
SELECT * FROM angajati WHERE salariul IN (5000, 6000);

2). Să se calculeze diferit discount-ul (DC) pentru clienți astfel:


• dacă clientul a încheiat 1 comanda atunci DC= 10% ;
• dacă a încheiat 2 comenzi atunci DC =15%;
• dacă a încheiat mai mult de 3 comenzi atunci DC =20%.
Din acestea să se elimine înregistrările încheiate de clienții care încep cu litera M.
Ordonați descrescător în funcție de numele clienților.
Observație: clauza Order by se poate menționa o singură dată la sfârșitul întregii cereri.
SELECT cl.nume_client, COUNT(co.id_comanda) numar_comenzi,
(CASE WHEN COUNT(co.id_comanda)=1 THEN 0.1
WHEN COUNT(co.id_comanda)=2 THEN 0.15
WHEN COUNT(co.id_comanda)>=3 THEN 0.2
ELSE 0 END) discount
FROM clienti cl, comenzi co
WHERE cl.id_client=co.id_client
GROUP BY cl.nume_client
MINUS
SELECT cl.nume_client, COUNT(co.id_comanda) numar_comenzi,
(CASE WHEN COUNT(co.id_comanda)=1 THEN 0.1
WHEN COUNT(co.id_comanda)=2 THEN 0.15
WHEN COUNT(co.id_comanda)>=3 THEN 0.2
ELSE 0 END) discount
FROM clienti cl, comenzi co
WHERE cl.id_client=co.id_client
AND cl.nume_client like 'M%'
GROUP BY cl.nume_client
ORDER BY nume_client;

2. Operatorul UNION – este utilizat pe 2(două) interogări pentru a reuni


înregistrările selectate de prima interogare cu cele selectate de a doua interogare (A
+ B).

3). Să se calculeze distinct comisionul pentru angajați folosind operatorul UNION:


• Dacă au 1 comandă comisionul va fi de 10% din valoare totală a comenzilor;

Pagina 1 din 2
BAZE DE DATE – SEMINAR 10
_____________________________________________________________________

• Dacă au 2 comenzi comisionul va fi de 20% din valoare totală a comenzilor;


• Dacă au 3 comenzi comisionul va fi de 30% din valoare totală a comenzilor.

SELECT a.nume, COUNT(c.id_comanda) numar_comenzi,


0.1* SUM(r.cantitate*r.pret) valoare_comision
FROM angajati a, comenzi c, rand_comenzi r
WHERE a.id_angajat=c. id_angajat
AND c.id_comanda=r.id_comanda
GROUP BY a.nume
HAVING COUNT(c.id_comanda)=1
UNION
SELECT a.nume, COUNT(c.id_comanda) numar_comenzi,
0.2* SUM(r.cantitate*r.pret) valoare_comision
FROM angajati a, comenzi c, rand_comenzi r
WHERE a.id_angajat=c.id_angajat
AND c.id_comanda=r.id_comanda
GROUP BY a.nume
HAVING COUNT(c.id_comanda)=2
UNION
SELECT a.nume, COUNT(c.id_comanda) numar_comenzi,
0.3* SUM(r.cantitate*r.pret) valoare_comision
FROM angajati a, comenzi c, rand_comenzi r
WHERE a.id_angajat=c.id_angajat
AND c.id_comanda=r.id_comanda
GROUP BY a.nume
HAVING COUNT(c.id_comanda)>=3;

3. Operatorul INTERSECT – este utilizat pe 2(două) interogări pentru a returna doar


înregistrările comune selectate de prima interogare și cele selectate de a doua
interogare.

4). Să se selecteze denumirea produselor, valoare totală comandată


(SUM(cantitate*pret)) și numărul de comenzi (count(id_comanda)) pentru
produsele comandate de cel puțin 3 ori și care au valoarea totală diferită de 1440,
3916.
SELECT p.denumire_produs, SUM(r.cantitate*r.pret) valoare,
COUNT(r.id_comanda) numar_comenzi
FROM produse p, rand_comenzi r
WHERE r.id_produs=p.id_produs
GROUP BY p.denumire_produs
HAVING COUNT(r.id_comanda)<=3
INTERSECT
SELECT p.denumire_produs, SUM(r.cantitate*r.pret) valoare,
COUNT(r.id_comanda) nrcomenzi
FROM produse p, rand_comenzi r
WHERE r.id_produs=p.id_produs
GROUP BY p.denumire_produs
HAVING SUM(r.cantitate*r.pret) NOT IN (1440, 3916);

Pagina 2 din 2

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