Algebra relaţională
Algebra relaţională Algebra relaţională cuprinde un ansamblu de operatori ce operează pe relaţii (tabele sursă) şi produc noi relaţii (tabele rezultat). Tabelele sunt mulţimi ce au anumite particularităţi, ca urmare algebra relațională poate fi considerată un subset al algebrei generice pe mulţimi.
Clasificarea operatorilor E. F. Codd a propus opt operaţii de bază în algebra relaţională, dintre care cinci sunt considerate operaţii primare şi trei sunt operaţii derivate (ce pot fi exprimate pe baza operaţiilor primare). Operaţii primare: Reuniunea Diferenţa Produsul cartezian Selecţia Proiecţia
Operaţii derivate: Intersecţia Compunerea Diviziunea
Alte tipuri de operaţii În afară de operaţiile menţionate, mai există operaţii de grupare, agregare, sortare, eliminare a duplicatelor şi operaţii de redenumire care nu se consideră a face parte din algebra relaţională, dar care sunt frecvent folosite în cadrul limbajelor specializate de interogare a bazelor de date cum ar fi SQL (Structured Query Language) şi QBE (Query By Example) .
1. Reuniunea Reuniunea a doua relaţii compatibile (ce au aceeaşi structură) are ca rezultat o relaţie ce conţine totalitatea tuplurilor celor două, fiind excluse tuplurile comune (identice). Notaţie: R1 U R2 = R3 tabelul rezultat.
Unde R1 şi R2 sunt tabelele sursă, iar R3 este
Reprezentarea reuniunii a două tabele:
Reuniune - Exemplu
Clienti U Furnizori
Revenire
2. Diferenţa Prin diferenţa doua relaţii compatibile (R1 şi R2) se obţine o relaţie (R3) care conţine tuplurile din R1 care nu se regăsesc în R2. Notaţie: R1 \ R2 = R3 tabelul rezultat.
Unde R1 şi R2 sunt tabelele sursă, iar R3 este
Reprezentarea diferenţei dintre două tabele:
Diferenţa - Exemplu
Furnizori \ Facturi
Revenire
3. Produsul cartezian Produsul cartezian a doua relaţii (R1 şi R2) are ca rezultat o relaţie (R3) ce conţine toate perechile de tupluri din R1 şi R2. Notaţie: R1 X R2 = R3 tabelul rezultat.
Unde R1 şi R2 sunt tabelele sursă, iar R3 este
Reprezentarea produsului cartezian a două tabele:
Produsul cartezian - Exemplu
Studenti X Facultati
Revenire
4. Selecţia Selecţia aplicată unei tabele (R1) generează o nouă tabelă (R2) având aceeaşi structură ca şi R1, dar care conţine doar tuplurile care îndeplinesc condiţia specificată de selecţie. Notaţie: R2 = SELECT C (R1)
Unde: - R1 este tabelul asupra căruia se aplică
selecţia - C este condiţia - R2 este tabelul rezultat, alcătuit din tuplurile tabelului R1 care unei îndeplinesc Reprezentarea operaţiei de selecţie aplicată tabele: condiţia C
Selecţia - Exemplu
Tabel rezultat Selecţie = SELECT
LocalitateFurnizor=„Bucuresti”
(Furnizori)
Revenire
5. Proiecţia Proiecţia aplicată unei tabele (R1) generează o nouă tabelă (R2) care conţine tuplurile ce conţin un subset al atributelor tabelei R1. Notaţie: R2 = PROIECŢIE L (R1)
Unde:
- R1 este tabelul asupra căruia se aplică proiecţia - L este subsetul de atribute - R2 este tabelul rezultat, cuprinzând doar din lista L Reprezentarea operaţieiatributele de proiecţie aplicată unei tabele:
Proiecţia - Exemplu
Tabel rezultat (Furnizori)
Proiecţie
=
PROIECTIE
DenumireFurnizor,
TelefonFurnizor
Revenire
6. Intersecţia Intersecţia a două relaţii compatibile - având aceeaşi structură (R1 şi R2) generează o nouă relaţie (R3) care conţine doar înregistrările comune (identice) pentru cele două relaţii. Notaţie: R1 R2 = R3 tabelul rezultat.
Unde R1 şi R2 sunt tabelele sursă, iar R3 este
Reprezentarea intersecţiei dintre două tabele:
Intersecţia - Exemplu
Clienti
Furnizori
Revenire
7. Compunerea Compunerea dintre două tabele (R1 şi R2) generează o nouă tabelă (R3) care combină tuplurile celor două tabele sursă, fiind alese doar acelea care îndeplinesc o anumită condiţie specificată în cadrul compunerii. Notaţie: - R1 şi R2 sunt tabelele de bază asupra R3 = R1 JOIN C R2 Unde: cărora se aplică compunerea - C este condiţia care poate să conţină operatori logici şi aritmetici, precum şi agregări de date Reprezentarea operaţiei compunere: - de R3 este tabelul rezultat
Compunerea - Exemplu
Furnizori JOIN
DataFactura > 15/12/2011
Facturi
Revenire
7. Tipuri particulare de Compunere În funcţie de natura condiţiilor, există mai multe cazuri particulare de compunere, dintre care, în algebra relaţională prezintă o importanţă deosebită următoarele: 7.1. Echicompunerea 7.2. Compunerea naturală 7.3. Compunerea externă
7.1. Echicompunerea Echicompunerea este compunerea pentru care condiţia este alcătuită numai din egalităţi. Reprezentarea operaţiei de echicompunere:
7.2. Compunerea naturală Compunerea naturală este echicompunerea a două tabele, pentru care există cel puţin câte un câmp având acelaşi nume şi tip şi în care, din rezultat, se elimină câmpurile identice. Reprezentarea operaţiei de compunere naturală:
7.2. Compunerea externă Compunerea externă este o echicompunere care afişează şi tuplurile care nu au corespondent în cadrul celor două tabele sursă. În tabelul rezultat, pentru tuplurile care nu au corespondent se completează valoarea NULL. Reprezentarea operaţiei de compunere externă:
8. Diviziunea Diviziunea presupune împărţirea unei tabele (R1), denumită deîmpărţit, la o tabelă denumită împărţitor (R2), rezultând o altă tabelă (R3) denumită cât, astfel încât orice tuplu al tabelei cât (R3) trebuie să se regăsească în cadrul tuplurilor tabelei deîmparţit (R1) în combinaţie cu fiecare tuplu din tabela împărţitor (R2). Pentru a putea să aibă sens diviziunea, tabela împărţitor (R2) trebuie să aibă ca atribute un subset al atributelor tabelei deîmpărţit (R1). Notaţie: R3 = R1÷ R2 rezultat.
Unde R1 şi R2 sunt tabelele sursă, iar R3 este tabelul
Reprezentarea operaţiei de diviziune:
Diviziunea - Exemplu
Linie Factura ÷ Produs
Revenire
Realizarea operatorilor relaţionali în SQL
Realizarea operatorului Reuniune Reuniunea a două tabele se realizează cu ajutorul clauzei UNION. Exemplu: Sintaxa SQL aferentă exemplului
Click pentru Exemplu
SELECT CLIENTI.IDClient As ID, CLIENTI.DenumireClient As Denumire, CLIENTI.LocalitateClient As Localitate, CLIENTI.TelefonClient As Telefon FROM CLIENTI UNION SELECT FURNIZORI.IDFurnizor As ID, FURNIZORI.DenumireFurnizor As Denumire, FURNIZORI.LocalitateFurnizor As Localitate, FURNIZORI.TelefonFurnizor As Telefon FROM FURNIZORI;
Realizarea operatorului Diferenţa Pentru realizarea diferenţei a două tabele nu există o clauză SQL specifică. Operatorul Diferenţă poate fi realizat prin utilizarea unei interogări cu subinterogare, în care condiţia conţine NOT IN. Exemplu: Sintaxa SQL aferentă exemplului Click pentru Exemplu
SELECT FURNIZORI.IDFurnizor, FURNIZORI.DenumireFurnizor, FURNIZORI.LocalitateFurnizor, FURNIZORI.TelefonFurnizor FROM FURNIZORI WHERE FURNIZORI.IDFurnizor NOT IN (SELECT IDFurnizor FROM FACTURI);
Realizarea operatorului Produsul cartezian Operatorul Produsul cartezian se realizează în SQL prin enumerarea tabelelor în cadrul clauzei FROM, fără specificarea anumitor condiţii. Observaţie: Utilizarea unor condiţii determină selecţia unui set particular de valori, constituind, de fapt, reprezentarea în SQL a operatorului Compunere. Exemplu: Sintaxa SQL aferentă exemplului Click pentru Exemplu
SELECT STUDENTI.CodStudent, STUDENTI.Localitate, FACULTATI.DenumireFacultate FROM STUDENTI, FACULTATI;
STUDENTI.NumeStudent, FACULTATI.CodFacultate,
Realizarea operatorului Selecţie Operatorul Selecţie se realizează în SQL cu ajutorul clauzei WHERE. Exemplu: Sintaxa SQL aferentă exemplului Click pentru Exemplu
SELECT FURNIZORI.IDFurnizor, FURNIZORI.DenumireFurnizor, FURNIZORI.LocalitateFurnizor, FURNIZORI.TelefonFurnizor FROM FURNIZORI WHERE FURNIZORI.LocalitateFurnizor="Bucuresti";
Realizarea operatorului Proiecţie Operatorul Proiecţie se realizează în SQL prin intermediul clauzei SELECT, în cadrul căreia se vor preciza câmpurile după care se face proiecţia. Exemplu: Sintaxa SQL aferentă exemplului Click pentru Exemplu
SELECT FURNIZORI.DenumireFurnizor, FURNIZORI.TelefonFurnizor FROM FURNIZORI;
Realizarea Intersecţie
operatorului
Operatorul Intersecţie se realizează în SQL prin intermediul clauzei WHERE, cu ajutorul operatorului IN şi a subinterogărilor. Exemplu: Sintaxa SQL aferentă exemplului Click pentru Exemplu
SELECT CLIENTI.IDClient, CLIENTI.DenumireClient, CLIENTI.LocalitateClient, CLIENTI.TelefonClient FROM CLIENTI WHERE CLIENTI.DenumireClient IN (SELECT FURNIZORI.DenumireFurnizor FROM FURNIZORI);
Realizarea Compunere
operatorului
Operatorul Compunere se realizează în SQL prin intermediul condiţiilor de compunere din clauza WHERE. Exemplu: Sintaxa SQL aferentă exemplului Click pentru Exemplu
SELECT FURNIZORI.IDFurnizor, FURNIZORI.DenumireFurnizor, FURNIZORI.LocalitateFurnizor, FURNIZORI.TelefonFurnizor, FACTURI.NumarSerieFactura, FACTURI.DataFactura FROM FURNIZORI, FACTURI WHERE FURNIZORI.IDFurnizor = FACTURI.IDFurnizor And FACTURI.DataFactura>#12/15/2011#;
Realizarea operatorilor Compunere naturală şi Compunere externă Operatorul Compunere naturală se realizează în SQL prin intermediul operatorului INNER JOIN. Operatorul Compunere externă se realizează în SQL prin intermediul operatorilor LEFT JOIN şi RIGHT JOIN. A se vedea exemplele din cursul Limbajul SQL.
Realizarea operatorului Diviziune Operatorul Diviziune se realizează în SQL prin intermediul interogărilor cu subinterogări.
Exemplu:
Click pentru Exemplu
Sintaxa SQL aferentă exemplului
SELECT [LINIE FACTURA].NumarFactura FROM PRODUS INNER JOIN [LINIE FACTURA] ON PRODUS.CodProdus = [LINIE FACTURA].CodProdus GROUP BY [LINIE FACTURA].NumarFactura HAVING Count([LINIE FACTURA].CodProdus)= (SELECT Count(Produs.CodProdus) FROM PRODUS);