Extras din curs
Seminar 7
1) Jonctiuni externe
Permit regasirea inregistrarilor comune si in plus fata de jonctiunea de egalitate si a celor care se regasesc doar intr-o singura tabela.
Jonctiunea se poate realiza precizand in dreptul legaturii dintre tabele a semnului (+), de exemplu conditia: tabela_A.cheie_primara=tabela_b.cheie_externa(+) va returna inregistrarile comune si a celor care apartin doar tabelei A..
Exemplu:
Sa se insereze in tabela produse 2 inregistrari noi astfel:
insert into produse values(777, 'cafea', 'buc', 4000);
insert into produse values(888, 'ceai', 'buc', 3000);
Sa se afiseze produsele comandate impreuna cu cele care nu se regasesc pe nici o comanda:
SELECT p.codprodus, p.denprodus, rc.cant, rc.pret
FROM produse p, rindcom rc
WHERE p.codprodus = rc.codprodus (+)
Rezultatul este prezentat in figura urmatoare:
2) Realizarea interogarilor pe baza unor conditii
Functia DECODE – este utilizata pentru calcularea si returnarea unor expresii in functie de anumite conditii de egalitate.
Sintaxa este:
DECODE(VARIABILA, conditie1, expresie1, conditie2, expresie2, ….., conditie_n, expresie_n, valoare n+1 implicita)
Expresia CASE – este utilizata pentru calcularea si returnarea unor expresii in functie de anumite conditii diverse in care se pot utiliza operatorii de comparative, nu numai cel de egalitate.
Sintaxa este:
CASE [VARIABILA]
WHEN conditie1 THEN expresie1
WHEN conditie2 THEN expresie2
WHEN conditie_n THEN expresie_n
ELSE valoare n+1 implicita
END
Sau daca se utilizeaza comparatii pe variabile sau campuri diferite se poate apela la varianta urmatoare:
CASE
WHEN VARIABILA conditie1 THEN expresie1
WHEN VARIABILA conditie2 THEN expresie2
WHEN VARIABILA conditie_n THEN expresie_n
ELSE valoare n+1 implicita
END
Exemple:
1)Sa se calculeze comisionul agentilor in functie de pozitia (functia) ocupata:
- 0.1% din valoarea comenzilor sale daca functia este ‘contabil’
- 0.2% din valoarea comenzilor sale daca functia este ‘economist’
- 0.3% din valoarea comenzilor sale daca functia este ‘director’
Pentru celelalte functii comisionul va fi 0.
Select a.numeagent, a.functia,
case when lower(a.functia) ='director' then 0.3
when lower(a.functia)='economist' then 0.2
when lower(a.functia)='contabil' then 0.1
else 0 end comision
from agenti a
Daca se aplica acest comision la valoarea comenzilor (sum(cant*pret)) interogarea devine:
Select a.numeagent, a.functia,
(case when lower(a.functia) ='director' then 0.3
when lower(a.functia)='economist' then 0.2
when lower(a.functia)='contabil' then 0.1
else 0 end)*sum(r.cant*r.pret) valoare_comision
from agenti a, comenzi c, rindcom r
where a.codagent=c.codagent
and c.nrcom=r.nrcom
group by a.numeagent, a.functia
Preview document
Conținut arhivă zip
- Sisteme de Gestiune a Bazelor de Date - 7.doc