Documente Academic
Documente Profesional
Documente Cultură
Limbaje de interogare Algebra relationala si calculul relational Operatiile pe multimi ale algebrei relationale
Reuniunea Intersecia Diferenta Produsul Cartesian Selectia Proiectia Jonctiunea Diviziunea
Limbaje de interogare
Interogarea (query): operaia prin care se obin informatiile dorite dintr-o baz de date, selectate conform unui anumit criteriu (condiie); Limbaje de interogare: abstracte si concrete (reale - implementari in diferite SGBD-uri) Limbaje de interogare abstracte: algebra relationala si calculul relational Algebra relationala (relational algebra) - const dintr-o mulime de operaii care au ca operanzi relaii, iar rezultatul este tot o relaie Calculul relaional (relational calculus) - bazat pe calculul predicatelor exprim o interogare definind rezultatul dorit ca expresie de calcul relaional Calculul relational al tuplurilor foloseste variabile de tuplu (variabile definite pe mulimea tuplurilor unei relaii) Calculul relational al domeniilor foloseste variabile de domeniu (variabile definite pe domenii de definiie ale atributelor) Cele trei limbaje formale sunt echivalente din punct de vedere al interogarilor Limbajele de interogare reale sunt definite pe baza unuia sau altuia din limbajele de interogare abstracte, sau pe o combinaie a acestora. De exemplu, limbajul SQL2 este n cea mai mare parte bazat pe algebra relaional, dar mai conine i construcii derivate din calculul relaional.
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 2
Algebra relaional
Algebra relaional (relational algebra) - interogrile sunt expresii compuse din operatii care au ca operanzi relatii si rezultatul este o relatie Operatiile algebrei relationale: operatii pe multimi si operatii speciale, la care se adauga operatia de redenumire (rename) a atributelor (E.Codd) Operatiile relationale pe multimi acioneaz asupra relaiilor vzute ca mulimi (de tupluri), fr a lua n consideraie compoziia fiecrui tuplu; acestea sunt:
Reuniunea Intersecia Diferena Produsul cartezian
Operaiile relaionale speciale iau n consideraie compoziia tuplurilor, formate din valori ale atributelor relaiilor; acestea sunt:
Restricia Proiecia Jonciunea Diviziunea
Proprietatea de nchidere: operanzii (unul sau doi operanzi) sunt relaii, rezultatul este o relaie; aceast proprietate permite operaii imbricate: proiecia unei jonciuni etc.
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 3
Operaia de reuniune
Reuniunea (union) a dou relaii compatibile r(R) i s(S): q = r s = { t | t r or t s} Pentru ca r si s sa fie compatibile, trebuie ca:
r si s s aiba acelasi grad (acelasi numar de atribute) Atributele corespondente (n ordine pozitional) s fie compatibile
Tuplurile care aparin ambelor relaii se introduc n relaia rezultat o singur dat (nu se duplic) Relatia rezultat are un numar de tupluri (cardinalitatea) mai mic sau egal cu suma numerelor de tupluri ale celor doi operanzi Exemplu: A B 1 2 1 r
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date
B 2 3 s
B 1 2 1 3
4
rs
rs
r-s r Reuniunea si intersectia sunt comutative si asociative (r s = s r ; r (s t) = (r s) t); diferenta nu este nici nici comutativa, nici asociativa
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 5
Tuplurile relaiei rezultat se obtin prin concatenarea valorilor atributelor fiecrui tuplu din prima relaie cu valorile atributelor tuturor tuplurilor din a doua relaie Relaia rezultat are numrul de tupluri (cardinalitatea) egal cu produsul numarului de tupluri ale relatiilor operand A B C D E Exemplu: C D E A B 1 10 a 10 a 1 10 a 1 10 a 1 20 b 2 20 b 1 10 b r 10 b 2 10 a 2 10 a s 2 20 b 2 10 b rxs Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de 6
date
Intersectia:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1] INTERSECT SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];
Diferenta:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1] MINUS SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];
Produsul Cartesian este implementat in toate SGBD-urile (instructiunea SQL SELECT) In sistemul Oracle sunt implementate toate operatiile pe multimi In alte SGBD-uri nu sunt implementate toate operaiile pe mulimi; in SQL Server 2000 si in MySQL 5.0 nu sunt implementate operaiile INTERSECT i MINUS
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 8
Operaia de selecie
Seleca (sau restricia select, restriction) ntr-o relatie r(R) - definita astfel: p(r) = {t | t r and p(t)}
unde p, predicatul selectiei, este o expresie logic compus din termeni conectati prin operatorii and, or not (i, eventual, paranteze)
Fiecare termen este o valoare logic obinut ca rezultat al unei operaii de comparaie de forma:
<atribut> op <atribut> sau <atribut> op <constanta>, unde op este un operator de comparatie aritmetic (=, , >, . <. ) sau special(IS NULL etc.) Tuplul t este selectat (introdus in rezultat) daca p(t) = TRUE
n limbajul SQL:
SELECT * FROM tabel WHERE p; n termenii folosii n limbajul SQL, restricia selecteaz o parte din liniile tabelului operand
Operatia de proiecie
Proiectia (project) pe atributele A1, A2, .. Ak intr-o relatie r(R) se noteaz: A1, A2, Ak (r), unde A1 R, A2 R, Ak R Rezultatul este o relatie cu k atribute, cele din lista data Daca {A1, A2, Ak} nu contine o supercheie, pot sa apara tupluri duplicat; teoretic, tuplurile duplicat se elimina, dat fiind ca rezultatul este o multime Exemplu: A B 10 20 30 40 C 1 1 1 2 A C 1 1 1 2 = A C 1 1 2
A,C (r)
Schema relatiei rezultat este Q = R S = {A, B, C} q = r s = A,B,C (r.B1=s.B1 AND r.B2=s.B2 AND r.Bn = s.Bn) (r x s) Atributele comune R.B si S.B trebuie s fie compatibile n cele doua relatii; dac sunt compatibile, ele se consider identice chiar dac au denumiri diferite, si n reuniunea atributelor R S se introduc o singur dat Cazul cel mai frecvent de jonctiune naturala: intre doua relatii asociate (1: N), atributul comun fiind cheia strain cheia primar (candidat) referit
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 11
Jonciunea extern introduce n plus toate liniile care exit n prima relaie (pentru LEFT OUTER JOIN) sau n cea de-a doua relaie (pentru RIGHT OUTER JOIN) i pentru care nu exist linii n ceallalt relaie care s ndeplineasc condiia de join; exemplu:
SELECT city.Name Oras, Code 'Cod Tara', country.Name Tara, Continent FROM city RIGHT OUTER JOIN country ON CountryCode=Code WHERE Continent='Antarctica' OR Continent = 'Europe' ORDER BY Continent; Se vor afia si rile care nu au nici un oras nscris n tabelul city.
13
Operaia de diviziune
Fie relaiile r(R) si s(S), unde:
R = {A, B} unde A={A1,A2,..Am}, B={ B1,B2,..Bn} S = {B}
n limbajul SQL, diviziunea se exprim printr-o instruciune SELECT, introducnd explicit toate conditiile impuse valorilor atributelor Exemplu: A B A B
r
Prof. Felicia Ionescu
1 2 3 1 2 1 3
1 2 s
rs
14
Si celelalte trei operaii sunt deosebit de utile n formularea interogrilor, astfel nct algebra relaional a pstrat toate cele opt operaii propuse de E.F.Codd, la care s-a adugat operaia de redenumire a atributelor
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 15
Formularea interogarilor
Interogarea este operatia prin care se obtin informaiile dorite (care indeplinesc o anumita conditie) dintr-o baz de date. O interogare:
se formuleaza mai intai n limbaj natural, apoi se exprima ntr-un limbaj abstract de interogare (algebra relaional sau calculul relaional), se transpune n limbajul de interogare al SGBD-ului folosit (ex., limbajul SQL), iar aplicatia client transmite SGBD-ului instructiunea (sau instructiunile) obtinute
n algebra relaional o interogare se formuleaz printr-o expresie care defineste urmtoarele elemente:
Lista atributelor relaiei rezultat, care se numesc atribute de proiecie; Lista relaiilor din care se extrag informaiile Condiiile pe care trebuie s le ndeplineasc tuplurile relaiei rezultat.
Exemplul 1: Fie relaia ANGAJATI i interogarea: Care sunt numele i prenumele angajailor care au un salariu mai mare sau egal cu 2000?.
Expresia de algebr relaional: q = Nume, Prenume Salariu >= 2000 (ANGAJATI) Instruciunea SQL: SELECT Nume, Prenume FROM ANGAJATI WHERE Salariu >= 2000;
Exemplul 2: (MySQL - WORLD): Care sunt numele si populatia oraselor din tara cu codul ROM ?
Expresia de algebr relaional: q = Name, Population CountryCode=ROM (city) Instructiunea SQL: SELECT Name, Population FROM city WHERE CountryCode=ROM';
Exemplul 3: Fie relaia ANGAJATI i interogarea: Care sunt numele, prenumele si adresa angajailor care lucreaza in sectia numarul 1?.
Expresia de algebr relaional: q = Nume, Prenume, Adresa IdSectie = 1 (ANGAJATI) Instructiunea SQL: SELECT Nume, Prenume, Adresa FROM ANGAJATI WHERE IdSectie=1;
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 17
Expresia generala de algebra relationala a interogarii este: q = lista_atribute p(r x s x t...) Daca intre relatiile din produsul cartesian exista atribute comune care trebuie sa aiba valori egale (de regula, perechile cheie strin - cheie candidata) atunci se pot face operaii de jonciune: q = lista_atribute p1 AND conditii-join(r x s x t...) = lista_atribute p1 (r s t...)
SECTII
Buget Denumire IdSectie
Fie interogarea: Care sunt numele, prenumele, funcia i salariul angajailor care lucreaz n secia cu denumirea Productie? q = Nume, Prenume, Functia, Salariu Denumire= Productie (ANGAJATI SECTII)
SELECT Nume, Prenume, Functia, Salariu FROM ANGAJATI, SECTII WHERE SECTII.IdSectie = ANGAJATI.IdSectie AND Denumire = Productie; Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 19
Interogarea: n ce filme au jucat fiecare din actorii din baza de date sakila ? q = first_name, last_name, title (film film_actor actor) Instructiunea SQL:
SELECT first_name, last_name, title FROM FILM, FILM_ACTOR, ACTOR WHERE FILM.film_id = FILM_ACTOR.film_id AND ACTOR.actor_id = FILM_ACTOR.actor_id ORDER BY FILM.film_id;
21
Subinterogri
Subinterogrile sunt operaii care determin diferite date (valori scalare, tabele rezultat, numr de elemete etc.) folosite n interogarea de baz Subinterogrile pot conine la rndul lor alte subinterogri Exemplul 1: Care sunt angajaii (nume, prenume, adresa) care lucreaz n aceeai secie cu angajatul cu numele Ionescu i prenumele Ion?
Se determin printr-o subinterogare n ce secie lucreaz angajaul dat Se selecteaz toi angajaii din acea secie:
SELECT Nume, Prenume, Adresa FROM ANGAJATI WHERE IdSectie = (SELECT IdSectie FROM ANGAJATI WHERE Nume = 'Ionescu' AND Prenume = 'Ion');
Exemplul 2: Care sunt numele, prenumele, denumirea seciei i salariul angajailor care au salariul egal cu salariul maxim pe una din secii:
Se determin printr-o subinterogare tabelul cu valori maxime ale salariului n fiecare secie Se selectez angajaii care au salariul n mulimea salariilor maxime pe sectii:
SELECT Nume, Prenume, Salariul, Denumire FROM ANGAJATI INNER JOIN SECTII ON ANGAJATI.IdSectie=Sectii.IdSectie WHERE Salariul IN (SELECT MAX(Salariul) FROM ANGAJATI Group By IdSectie);
Prof. Felicia Ionescu Cap. 3 - Interogarea bazelor de date 22
23