Author
sorina-andreea
View
21
Download
2
Embed Size (px)
DESCRIPTION
Algebra relationala. Recuperare curs 11. Medicina
Algebra RELATIONALACurs nr. 9
Algebra relaional cuprinde un ansamblu de operatori ce actioneaza pe relaii (tabele surs) i produc noi relaii (tabele rezultat). Clasificarea operatorilor se poate face n funcie de modul de aplicabilitate, deosebind astfel: A. Operatorii generali pe mulimi sunt :Reuniune;Intersecie;Diferen;Produs cartezian. B. Operatorii specifici pe relaii sunt:Selecie;Proiecie;Compunere;Diviziune.
O alt clasificare a operatorilor se bazeaz pe numrul de tabele cerute de acel operator. Astfel, deosebim operatorii binari care se aplic pentru cel puin dou tabele, operatori unari pentru a cror aplicare este nevoie de cel puin o tabel,operatorii de extensie.Operatorii binari sunt :Reuniune;Intersecie;Diferen;Produs cartezian;Operatorii de extensie sunt:Compunere;Diviziune.Operatori unari sunt:Selecie;Proiecie.
REUNIUNEA a doua relatii R si S, cu aceeasi structura, unde R este formata din n tupluri, iar S din m tupluri, are ca rezultat o a treia relatie T, avand aceeasi structura cu a relatiilor sursa si continand n+m tupluri. RELATIA T(RUS)
RELATIA S
RELATIA R
ABa1b1a2b2
ABa3b3a4b4
ABa1b1a2b2a3b3a4b4
INTERSECTIA a doua relatii R si S avand aceeasi structura, este o relatie T continand tuplurile identice ce apartin atat lui R cat si lui S.
RELATIA R RELATIA S RELATIA TDiferenta a doua relatii R si S avand aceeasi structura (R-S) este o relatie T ce contine multimea tuplurilor apartinand lui R, dar neapartinand lui S.
ABa1b1a2b2
ABa1b1a3b3
ABa1b1
Relatia R Relatia S Relatia T
ABCa1b1c1a2b2c2
ABCa3b3c3a4b4c4a5b5c5a6b6c6
ABCa1b1c1a2b2c2
Produsul cartezian a dou relaii R i S (RxS) este o relaie T stocnd mulimea perechilor obinute prin concatenarea nregistrrilor aparinnd lui R cu cele aparinnd lui S. Relatia R Relatia S Relatia T
ABa1b1a2b2
CDc1d1c2d2
ABCDa1b1c1d1a1b1c2d2a2b2c1d1a2b2c2d2
Proiectia. Din relatia R se obtine o alta relatie R1, care va contine o submultime din atributele initiale din R, fara tupluri duplicate. Numarul de atribute din R1 este mai mic dect numarul de atribute din R.
Relatia R R1 (R;A,B) Relaia R1
Prin intermediul proieciei, dintr-un tabel cu un anumit numr de coloane se obine unul cu un numr mai mic de coloane, dar cu acelasi numar de inregistrari
ABCDa1b1c1d1a2b2c2d2a3b3c3d3
ABa1b1a2b2a3b3
Selecia relaiei R fa de criteriul Q este relaia R1 cu aceeai structur ca i R, ale crei tupluri satisfac criteriul specificat. R1 SELECTIE(R;A=a2 OR A=a3) Relatia RRelaia R1
ABa1b1a2b2a3b3
ABa2b2a3b3
CompunereaCompunerea a dou tabele R1 i R2 este o tabel R3 ce combin tuplurile celor dou tabele surs, fiind alese doar acelea care ndeplinesc o anumit condiie specificat n cadrul compunerii. Gradul relaiei obinute ca urmare a compunerii a dou relaii este egal cu suma gradelor relaiilor surs. n funcie de natura condiiilor, compunerea cunoate mai multe cazuri particulare : echicompunerea;compunerea natural;compunerea extern.
EchicompunereaEste compunerea pentru care condiia este alctuit numai din egaliti, putnd conine una sau mai multe egaliti. n cazul echicompunerii n tabela rezultat apar dou cmpuri ce au valori identice. Gradul relaiei obinute ca rezultat al echicompunerii este egal cu suma gradelor celor doua relaii surs.
Compunerea naturalCompunerea natural este echicompunerea a dou tabele, pentru care exist cel puin cte un cmp avnd acelai nume i tip i n care, din rezultat, se elimin cmpurile identice. Gradul relaiei obinute ca rezultat al compunerii naturale este mai mic dect suma gradelor celor dou relaii surs, deoarece sunt eliminate cmpurile identice.
Compunerea externCompunerea extern este o echicompunere care, spre deosebire de aceasta, afieaz i tuplurile care nu au corespondent n cadrul celor dou tabele surs. Compunerea extern poate s fie la stnga i n acest caz se vor afia toate tuplurile din primul tabel, pentru cele care nu au corespondent se completeaz cu NULL valoarea atributelor lips, iar din al doilea tabel se vor afia doar tuplurile care au corespondent n primul tabel. Compunerea extern la dreapta presupune acelai mecanism, cu deosebirea c se vor afia toate tuplurile din tabelul doi chiar dac au sau nu corespondent iar din tabelul unu se vor afia doar tuplurile ce au corespondent.
Diviziunea relaiei R1 (A1, A2 An) de grad (p+m) prin relaia R2 (Ap+1, , Am) de grad m este relaia E (A1, A2, , Ap) de grad p, format din toate tuplurile care, concatenate cu fiecare tuplu din R2, dau totdeauna un tuplu din R1 (E = R1 R2).
Relatia RSRelatia RRelatia S
ABCDEa1b1c1d1e1a2b2c2d2e2a3b3c3d3e3
CDEc1d1e1c2d2e2c3d3e3
ABa1b1a2b2a3c3
Realizarea operatorilor relaionali n SQL Operatori binariTabele pentru exemplificare
Reuniunea: CLIENTI411 U CLIENTI419
Cu eliminarea duplicatelor:
CodC
Nume
Oras
1
A
Iasi
2
B
Cluj
3
C
Cluj
4
D
Cluj
Realizare SQL:
SELECT * FROM CLIENTI411
UNION
SELECT * FROM CLIENTI419;
Fr eliminarea duplicatelor:
CodC
Nume
Oras
1
A
Iasi
2
B
Cluj
3
C
Cluj
1
A
Iai
4
D
Cluj
Realizare SQL:
SELECT * FROM CLIENTI411
UNION ALL
SELECT * FROM CLIENTI419;
Intersecia: CLIENTI411 CLIENTI419
Diferenta: CLIENTI411 - CLIENTI419
Produs CartezianCLIENTI419 X PRODUSE
PROIECTIE (CLIENTI419; CodC, Nume)
Realizare SQL:SELECT CodC, Nume FROM Clienti419 ;
SELECTIE (CLIENTI411; Oras=Cluj)
Realizare SQL:SELECT Clienti411.* FROM Clienti411WHERE Oras=CLUJ ;
Compunere (CLIENTI419, FACTURI ; CLIENTI419.CODC=FACTURI.CODC )
Realizare SQL:SELECT * FROM CLIENTI411 INNER JOIN FACTURI ON CLIENTI419.CODC=FACTURI.CODC ;
Compunere condiionatClauza LEFT OUTER JOIN, conserv toate nregistrrile tabelei din stnga
Clauza RIGHT OUTER JOIN, conserv toate linile tabelei din dreapta
Diviziunea este operatorul relaional a crui realizare n SQL este destul de dificil. Pentru a identifica clienii care au cumprat aciuni la ambele societi avnd codul CABU i ADME va trebui s realizm diviziunea tabelului Tranzacie la tabelul ce conine ca nregistrri cele dou coduri de societi
PRIOECTIE CodSocietate (Societate)
Tranzactie
SELECT CodClientCumparatorFROM Tranzactie, SocietateWHERE Tranzactie.CodSocietate=Societate.CodSocietateGROUP BY CodClientCumparatorHAVING Count(Tranzactie.CodSocietate)=(SELECT COUNT(CodSocietate) FROM Societate);
Tranzactie PRIOECT CodSocietate (Societate)