Curs 4-Baze de Date-Interogarea Bazelor de Date

download Curs 4-Baze de Date-Interogarea Bazelor de Date

of 30

Transcript of Curs 4-Baze de Date-Interogarea Bazelor de Date

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    1/30

    Curs 4INTEROGAREA BAZELOR DE DATE

    Interogarea (query) este operaia prin care se obin datele dorite dintr-o bazde date, selectate conform unui anumit criteriu (condiie). Dat fiind c operaia deinterogare este cea mai important operaie de manevrare a datelor, de multe ori limbajele

    de manevrare a datelor sunt denumite limbaje de interogare.Pentru formularea conceptual a interogrilor n bazele de date relaionale s-audezvoltat dou limbaje abstracte de interogare: algebra relaionali calculul relaional.

    Algebra relaional (relational algebra) const dintr-o mulime de operaii careau ca operanzi relaii, iar rezultatul este tot o relaie.

    Calculul relaional (relational calculus) este bazat pe calculul predicatelor iexprim o interogare formulnd o definiie a rezultatului dorit (de regul, o relaie) printr-o expresie de calcul relaional. Variabilele unei expresii de calcul relaional pot fivariabile de tuplu (variabile ale cror valori sunt definite pe mulimea tuplurilor uneianumite relaii) sau variabile de domeniu (variabile ale cror valori sunt definite pedomenii de definiie ale atributelor). Pe baza unor astfel de variabile se definete calcululrelaional al tuplurilor, respectiv calculul relaional al domeniilor.

    Aceste limbaje de interogare abstracte, algebra relaional, calculul relaional altuplelor

    i calculul rela

    ional al domeniilor sunt echivalente din punct de vedere al

    capacitii de exprimare a interogrilor, diferenele constnd n modul de formulare aacestora. S-a demonstrat c, pentru orice expresie de algebr relaional, se poate gsi oexpresie de calcul relaional echivalent i invers.

    Limbajele de interogare reale implementate n sistemele de baze de daterelaionale sunt limbaje definite pe baza unuia sau altuia din limbajele de interogareabstracte, sau pe o combinaie a acestora. De exemplu:

    Limbajul SQL2 este n cea mai mare parte bazat pe algebra relaional, darmai conine i construcii derivate din calculul relaional -MicrosoftAccess, Sql Server (se numete T-SQL).

    Limbajul ISBL (Information System Base Language) al firmei IBM este bazat nntregime pe algebra relaional.

    Limbajul QUEL al SGBD Ingres este bazat pe calculul relaional al tuplurilor.Limbajul QBE (Query by Example), dezvoltat la firma IBM este bazat pe

    calculul relaional al domeniilor-Microsoft Access, Visual Foxpro.Un limbaj de interogare real este denumit relaional completdac implementeaz

    toate operaiile prevzute de unul din limbajele de interogare abstracte. n general, toatelimbajele relaionale implementate n sistemele SGBD sunt limbaje relaionale mai multdect complete, coninnd i operaii care nu sunt prevzute n limbajele relaionaleabstracte, ca de exemplu, efectuarea unor calcule aritmetice asupra valorilor unor atribute(sum, medie, minim, maxim), funcii de tiprire a relaiilor, etc.

    Limbajul SQL2 este limbajul cel mai utilizat n sistemele relaionale i deaceea, n continuare majoritatea exemplificrilor vor fi prezentate n SQL2.

    4.1 ALGEBRA RELAIONALAlgebra relaional(relational algebra) exprim interogrile prin aplicarea unor

    operatori specializai (operatorii algebrei relaionale) asupra relaiilor. E.F. Codd apropus opt operaii ale algebrei relaionale, grupate n dou categorii:Operaii pe mulimi: reuniunea (union), intersecia (intersection), diferena

    (difference) i produsul cartezian (Cartesian product). Aceste operatii reprezintadaptarea operatiilor corespunztoare din teoria mulimilor i acioneazasupra relaiilor vzute ca mulimi de elemente (tupluri), fr a lua nconsideraie compoziia fiecrui element.

    Operaii relaionale speciale: restricia (restriction), proiecia (projection),jonciunea (join) i diviziunea (division). Aceste operaii iau n consideraiecompoziia tuplurilor, formate din valori ale atributelor relaiilor.

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    2/30

    Toate aceste operaii trebuie s asigure proprietatea de nchidere, adic rezultatulfiecrei operaii trebuie s fie tot o relaie. Aceast proprietate permite efectuareaoperaiilor imbricate: proiecia unei jonciuni dintre o relaie i restricia aplicat alteirelaii, etc.

    Restricia i proiecia sunt operaii unare (au un singur operand, o relaie);operatiile pe mulimi, jonciunea i diviziunea sunt operaii binare (au doi operanzi, dourelaii).

    4.1.1 OPERAII PE MULIMI

    n operaiile asupra relaiilor considerate ca mulimi se impun anumite condiiicelor doi operanzi, astfel nct relaia rezultat s fie obinut ca o mulime de tupluriomogene. Aceste condiii depind de tipul operaiei: reuniunea, intersecia i diferenanecesit ca relaiile s fie compatibile, iar produsul cartezian necesit ca numele atributelorcelor dou relaii operand s fie distincte. Pentru ca dou relaii s fie compatibile, trebuies aib acelai numr de atribute i atributele corespondente s fie definite pe domeniicompatibile.

    Reuniunea a dou relaii compatibile R i S este o relaie QU= R u S care

    conine toate tuplurile ce aparin fie relaiei R, fie relaiei S, fie ambelor relaii.Tuplurile care aparin ambelor relaii se introduc n relaia rezultat o singur dat, adic

    nu se duplic.Operaia de reuniune se exprim n limbajul SQL ca o reuniune a dou tabeleobinute ca rezultat a dou comenzi SELECT, cu sintaxa:

    SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]UNIONSELECT lista_coloane2 FROM tabel2 [WHERE condiie2];

    Cele dou liste de coloane din clauzele SELECT trebuie s conin atributecompatibile. Tabelele din clauzele FROM, ca i condiiile din clauzele WHERE pot fiidentice sau diferite.

    Fie relaiile: ANGAJATI(IdAngajat,Nume,Prenume,DataNasterii,Adresa,Functie, Salariu) i FURNIZORI (IdFurnizor, Nume,Prenume, DataNaterii,Adresa,Firma).

    O opera

    ie de reuniune pe baza acestor rela

    ii poate arta astfel:SELECT Nume,Prenume FROM ANGAJATI WHERE Adresa =BucurestiUNIONSELECT Nume,Prenume FROM FURNIZORI WHERE Adresa =Bucureti;

    Rezultatul va fi o relaie cu atributele (Nume,Prenume) care conine numelei prenumele tuturor angajailori ale furnizorilor care locuiesc n oraul Bucureti.Dac exist tupluri duplicat (un angajat i un furnizor cu acelai nume i prenume, ceea ceeste posibil), relaia rezultat conine un singur tuplu cu valorile respective. Opiunea SQLUNIONALLpermite ca rezultatul s conin duplicate, deci acest rezultat nu mai poate finumit relaie. Dup cum se observ, limbajul SQL admite unele construcii care nurespect cerinele teoretice ale modelului relaional.

    Intersecia a dou relaii compatibile R i S este o relaie QI = R n S careconine toate tuplurile care aparin att relaiei R ct i relaiei S. La fel ca i reuniunea,operaia de intersecie se exprim n SQL ca intersecie a dou tabele obinute carezultat a dou comenzi SELECT, cu sintaxa:

    SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]INTERSECTSELECT lista_coloane2 FROM tabel2 [WHERE condiie2];

    Diferena a dou relaii compatibile R i S este o relaie QM= R - S care

    conine toate tuplurile care aparin relaiei R, dar nu aparin relaiei S. Operaia de

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    3/30

    diferen se exprim n SQL ca diferen a dou tabele obinute ca rezultat a doucomenzi SELECT, cu sintaxa:

    SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]MINUSSELECT lista_coloane2 FROM tabel2 [WHERE condiie2];

    Reuniunea i intersecia sunt comutative (RuS = SuR; R n S = S n R) iasociative (Ru (S u T) = (RuS)uT; Rn(SnT) = (RnS)nT). Diferena nu este

    nici comutativ (R- S * S - R), nici asociativ (R-(S - T) * (R - S)- T).Produsul cartezian. n teoria mulimilor, produsul cartezian al mulimilorR i S

    este o mulime compus din toate perechile ordonate de elemente ale celor dou mulimi:R x S = {|aeR,beS}.

    n algebra relaional, produsul cartezian al relaiilor R(A1,A2,... A

    n) i

    S(B1,B2,...B

    m) este o relaie Q

    C(A1,A

    2,....A

    n,B

    1,B

    2,...B

    m) = R x S care are

    ca atribute toate atributele primei relaii plus toate atributele celei de-a doua relaii. Pentru ase obine tuplurile relaiei rezultat se combin (se concateneaz) valorile atributelorfiecrui tuplu din prima relaie cu valorile atributelor tuturor tuplurilor din cea de-a douarelaie.

    Din aceast definiie se observ c gradul relaiei rezultat este egal cu sumagradelor celor dou relaii operanzi, iar cardinalitatea este egal cu produsulcardinalitilor celor dou relaii operand.

    Ca exemplu, se va calcula produsul cartezian al relaiilorANGAJATI i SECTII,prezentate mai jos n figura. 3.1.

    ANGAJATI

    IdAngaja Nume Prenume Adresa Salari IdSectie1 Ionescu Ion 1945.01.05 Bucuresti 4000 12 Po escu Petre 1972.06.21 Bucuresti 3500 13 Vasilescu Ana 1966.04.02 Bucuresti 3000 24 Ionescu Ion 1970.11.12 Bucureti 2500 3

    SECTII

    IdSectie Nume Buget1 Productie 400000023

    ProiectareCercetare

    30000002000000

    ANGAJATI SECTIIIdAngaja ANGAJA .... ANGAJATI. SECTII. SECTII Buget

    Nume IdSectie IdSectie Nume1 Ionescu 1 1 Producti 40000001 Ionescu 1 2 Proiecta 3000000

    1 Ionescu 1 3 Cercetar 20000002 Po escu 1 1 Producti 40000002 Po escu 1 2 Proiecta 30000002 Po escu 1 3 Cercetar 20000003 Vasilescu 2 1 Producti 40000003 Vasilescu 2 2 Proiecta 30000003 Vasilescu 2 3 Cercetar 20000004 Ionescu 3 1 Producti 40000004 Ionescu 3 2 Proiecta 30000004 Ionescu 3 3 Cercetar 2000000

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    4/30

    Fig. 3.1. Produsul cartezian a dou relaii.

    Pentru ca rezultatul produsului cartezian s fie corect din punct de vedererelaional, este necesar ca atributele celor dou relaii operand s aib nume diferite,deoarece n relaia rezultat nu pot exista dou atribute cu acelai nume. Aceast cerin serezolv uor, prin calificarea numelor unor atribute cu numele relaiei creia i aparin sauprin redenumirea atributelor.

    Calificarea numelui unui atribut cu numele relaiei se realizeaz prin scriereanumelui atributului precedat de numelui relaiei, cele dou nume fiind separate prinoperatorul punct (.), la fel ca n reprezentarea datelor sau funciilor membre ale unui obiect(instan a unei clase) n programarea obiect-orientat. De exemplu, atributul IdSectiedin relaiile ANGAJATI i SECTII se poate diferenia prin calificare astfel:SECTII.IdSectie i ANGAJATI.IdSectie.

    Pentru redenumirea atributelor n algebra relaional se poate folosi o operaiespecial, care se adaug celor opt operaiii de baz. Sintaxa conceptual a operaiei deredenumire este:

    RENAME nume_relatie.nume_atribut AS noul_nume_atribut

    Operaia produs cartezian este conceptual comutativ, adic RS = SR, dac seconsider c atributele unei relaii nu sunt ordonate. Dac se consider schema relaieirezultat ca list a atributelor sale, atunci, prin convenie, atributele primei relaii operand

    sunt primele n lista de atribute a relaiei rezultat, iar atributele celei de-a doua relaiiurmeaz n lista atributelor relaiei rezultat.Operaia produs cartezian este asociativ, dac se consider c ordinea atributelor

    ntr-o schem de relaie i ordinea tuplurilor ntr-o relaie nu este relevant: R (S T) =(R S) T.

    n limbajul SQL, produsul cartezian a dou tabele R i S se obine ca o variant ainstruciunii SELECT, ntr-una din formele:

    SELECT * FROM R,S;SELECT lista_coloane FROM R,S;

    n prima form, limbajul SQL admite operaia produs cartezian i n situaia ncare n cele dou relaii operand exist dou atribute cu acelai nume, subnelegndu-sec atributele rezultatului sunt ordonate, mai nti fiind atributele primei relatii, urmate deatributele celei de-a doua relatii.

    Pentru cea de-a dou form, atributele cu acelai nume trebuie s fie calificate cunumele relaiei respective. De exemplu, produsul cartezian al relaiilorSECTII(IdSectie,Nume,Buget) i ANGAJATI(IdAngajat,Nume,Prenume,DataNasterii,Adresa,Salariu,IdSectie) se poate scrie n SQL ntr-una dinformele:

    SELECT * FROM SECTII,ANGAJATI;SELECT SECTII.IdSectie,SECTII.Nume,Buget,IdAngajat,

    ANGAJAI.Nume,Prenume,DataNasterii,Adresa,Salariu,ANGAJAI.IdSectie FROM SECTII,ANGAJATI;

    n plus, n limbajul SQL se pot redenumi atributele folosind cuvntul cheie ASntre numele unui atribut i redenumirea acestuia. n aceast form, interogarea precedentpoate fi scris astfel:

    SELECT SECTII.IdSectie,SEC TII.Nume AS SNume,Buget,IdAngajat,ANGAJAI.NumeAS ANume,Prenume,DataNasterii,Adresa,Salariu, ANGAJATI.IdSectie FROMSECTII,ANGAJATI;

    n unele implementri ale limbajului SQL nu este necesar cuvntul cheie AS pentruredenumirea atributelor.

    4.1.2 OPERAII RELAIONALE SPECIALE

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    5/30

    n operaiile speciale asupra relaiilor se ia n consideraie compoziia tuplurilor(combinaii de valori ale atributelor) i se impun anumite condiii atributelor acestora.

    Restricia (restriction) este o operaie relaional unar care selecteaz dintretuplurile relaiei operand acele tupluri care ndeplinesc o condiie dat.

    Operaia de restricie se mai numete iselecie (i, ntr-adevr, restricia face oselecie a tuplurilor), dar este mai bine s fie evitat aceast denumire deoarece se poateconfunda cu instruciunea SELECT, care are rolul de instruciune general de

    interogare.Operaia de restricie se noteaz:

    )(R

    , unde este o expresie logic

    specificat asupra atributelor relaiei R. n relaia rezultat sunt selectate acele tupluri alerelaiei R pentru care expresia are valoarea 1 (TRUE). Relaia rezultat are aceleaiatribute ca i relaia operand.

    Expresia logic este format din una sau mai multe variabile logice v conectateprin operatorii logici AND, OR, NOT, ca de exemplu:

    = v1 AND (v2OR v

    3)...

    Fiecare variabil logic v este rezultatul returnat de un operator de comparaie. Sepot compara valorile a dou atribute sau se poate compara valoarea unui atribut cu oconstant.

    De exemplu, pentru a selecta din relaia ANGAJATI toi angajaii care lucreazn secia 1 i au salarii mai mari sau egale cu 4000 i pe cei care lucreaz n secia 2i au salarii mai mari sau egale cu 3000, se folosete restricia prezentat n figura 3.2.Rezultatul prezentat corespunde strii relaiei ANGAJATI din figura 3.1.

    Precedena operatorilor logici este cea cunoscut din logica matematic: NOT,AND, OR; aceast preceden se poate modifica folosind paranteze. n expresia dinfigura 3.2 nu sunt neaprat necesare parantezele, dar au fost introduse pentru a evideniamai clar condiiile impuse valorilor atributelor.

    (IdSectie=1 AND Salariu>4000)OR IdSectie=2 AND Salariu>3000)ANGAJATI)

    IdAngajat Nume Prenume DataNasterii Adresa Salariu IdSectie1 Ionescu Ion 1945.01.05 Bucuresti 4000 13________Vasilescu Ana______1966.04.02____Bucuresti 3000____ 2

    Fig. 3.2. Operaia de restricie.

    O secven de restricii poate fi aplicat n orice ordine, adic:

    cond1(cond2(R)) = cond2(cond1(R))

    Mai mult, se poate observa i demonstra cu uurin c orice secven derestricii poate fi nlocuit printr-o singur restricie n care expresia logic de condiie seobine prin conjuncia (AND) tuturor condiiilor:

    cond1(cond2(..condn(R)..))=cond1 AND cond2...AND ondn(R)

    Identitatea de mai sus poate fi interpretat i invers, i anume c operaia derestricie poate fi divizat (splitat) n operaii de restricii succesive cu condiii caresunt componentele conjunctive (conectate prin operatorul AND) ale condiiei de restricie.

    Cardinalitatea (numrul de tupluri) relaiei rezultat al operaiei de restricie estemai mic sau cel mult egal cu cardinalitatea relaiei operand. Situaia de egalitate aparedac expresia logic de condiie este evaluat la valoarea TRUE pentru oricare tuplu alrelaiei operand. De regul, ns, prin operaia de restricie se obine un numr detupluri mai mic dect numrul de tupluri al relaiei date.

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    6/30

    n limbajul SQL restricia se exprim printr-o form particular ainstruciunii SELECT, n care lista de atribute este format din toate atributele uneisingure relaii, iar clauzaWHERE este obligatorie i introduce condiia derestricie:

    SELECT * FROM tabel WHERE conditie [clauze_secundare];

    De exemplu, pentru a obine restricia din figura 3.2 se introduce comanda:

    SELECT * FROM ANGAJATI WHERE IdSectie = 1AND Salariu >= 4000 OR IdSectie = 2 AND Salariu>=3000;

    n termenii folosii n limbajul SQL, restricia selecteaz o parte din liniiletabelului operand.Proiecia (projection) este o operaie relaional unar prin care se selecteaz o

    submulime de atribute ale relaiei operand.Notaia pentru proiecie este:

    lista_atribute(nume_relatie). Relaia

    rezultat a operaiei de proiecie conine numai atributele din lista de atribute dat caparametru, care este o submulime nevid a mulimii atributelor relaiei operand.

    Dou exemple de operaii de proiecie asupra relaiei ANGAJATI cu starea dinfigura 3.1 sunt prezentate n figura 3.3.

    Dac lista atributelor de proiecie este o cheie (sau conine o cheie) a relaieioperand, atunci relaia rezultat are toate tuplurile distincte (fig. 3.3, a). n aceast situaienumrul de tupluri ale relaiei rezultat este egal cu numrul de tupluri ale relaiei operand.

    Dac lista de atribute nu este o cheie (sau nu conine o cheie) a relaiei operand,atunci este posibil ca prin proiecie s se obin dou sau mai multe tupluri identice, darn relaia rezultat sunt eliminate tuplurile duplicat. De exemplu, n proiecia pe atributele(Nume,Prenume) a relaiei ANGAJATI din figura 3.3, b tuplul (Ionescu,Ion)este introdus o singur dat n relaia rezultat, dei el este obinut de dou ori prinoperaia de proiecie. n acest situaie, numrul de tupluri ale relaiei rezultat este maimic dect numrul de tupluri ale relaiei operand.

    Gradul relaiei rezultat al unei proiecii (numrul de atribute) este mai mic sauegal cu gradul relaiei operand. Numrul de atribute al relaiei rezultat este egal cunumrul de atribute al relaiei operand dac lista de proiecie este identic cu listaatributelor relaiei date. IdAngajat,Nume,Prenume(ANGAJATI) Nume,Prenume(ANGAJATI)

    IdAngajat Nume Prenume Nume Prenume1 Ionescu Ion Ionescu Ion2 Po escu Petre Po escu Petre3 Vasilescu Ana Vasilescu Ana4 Ionescu Ion

    ab

    Fig. 3.3. Operaii de proiecie:

    a - lista atributelor de proiecie conine o cheie a relaiei operand;b - lista atributelor de proiecie nu conine o cheie a relaiei operand.

    Fie o succesiune de operaii de proiecie:

    lista1( lista2 ...( listak(R))...)

    O astfel de succesiune de proiecii este corect numai dac lista1 lista2...listak;bineneles, se consider listele de atribute ca mulimi. n aceast situaie, ntreagasuccesiune de proiecii se poate nlocui cu proiecia pe lista de atribute cea mai din

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    7/30

    stnga: lista1

    (R) .Egalitatea de mai sus se poate interpreta i reciproc: o proiecie pe o mulime de

    atribute (lista1) poate fi nlocuit cu o succesiune de proiecii pe mulimi de atributecare includ lista de atribute dat.

    n limbajul SQL, operaia de proiecie se obine tot prin instruciunea deinterogare SELECT; lista de coloane introdus n instruciunea SELECT este listaatributelor de proiecie. Sub forma:

    SELECT DISTINCT lista_coloane FROM nume_tabel;

    instruciunea SELECTreprezint o operaie de proiecie asupra relaiei numetabel peatributele date n lista coloane. De exemplu, proiecia din figura 3.3, b se scriepoate n SQL astfel:

    SELECT DISTINCT Nume,Prenume FROM ANGAJATI;

    Dac lipsete clauza DISTINCTi lista de atribute nu este o supercheie a relaiei,rezultatul operaiei poate conine tupluri duplicat (deci nu este o relaie n sensuldefiniiei din modelul relaional).

    n termenii folosii n limbajul SQL,proiecia realizeaz o selecie acoloanelor unui tabel.

    Jonciunea (cuplarea) - (join) este o operaie binar a algebrei relaionale princare se combin tuplurile a dou relaii ntr-o singur relaie.Jonciunea se noteaz cu semnul >< i este o operaie foarte important n bazele

    de date relaionale, deoarece ea permite realizarea asocierilor ntre relaii. n continuarevor fi prezentate dou forme ale operaiei de jonciune: 8-jonciunea i jonciuneanatural.

    -jonciunea a dou relaii R(A1,A2,...A

    n) i S(B1,B

    2,...B

    m) este o

    relaie J(A1,A

    2,... A

    n,B1,B

    2,...B

    m) = R >

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    8/30

    Adresa, Salariu,IdSectie) i SECTII (IdSectie,Nume,Buget) cuvalorile date n figura 3.1. Rezultatul acestei operaii este dat n figura 3.4.

    ANGAJATI >< S =

    A1,.An,B1,.Bm,C1,.Ck (R.B1=S.B1 AND R.Bm=S.Bm)(R S)

    Atributele (B1,B2,...B

    m) din cele dou relaii comparate pentru egalitate n

    jonciunea natural se numesc atribute comune (sau atribute de jonciune) i trebuie s fiedefinite pe domenii compatibile. Ele se consider identice (chiar dac au denumiri diferite)i n reuniunea atributelor se introduc o singur dat.

    Jonciunea natural se reprezint numai cu semnul >< SECTII

    _____________________________________________________________IdAngajat Nume ANGAJATI. Salariu IdSectie SECTII. Buget

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    9/30

    1 Ionescu 4000 1 Productie 40000002. Popescu 3500 1 Productie 40000003 Vasilescu 3000 2 Proiectare 30000004 Ionescu 2500 3 Cercetare 2000000

    Fig. 3.5. Jonciunea natural a relaiilorANGAJATI, SECTII.

    Gradul relaiei rezultat al jonciunii naturale a celor dou relaii este: q = n +m + k i este mai mic dect suma gradelor celor dou relaii (sum egal cu n + 2*m+ k).

    Dac nu exist nici o combinaie de tupluri care s ndeplineasc condiia dejonciune, rezultatul operaiei este o relaie cu zero tupluri. Dac nu se impune nici-ocondiie de jonciune, jonciunea devine un produs cartezian al celor dou relaii, cu unnumr de tupluri egal cu produsul (N

    Rx N

    S) al numrului de tupluri N

    Ri respectiv N

    S,

    ale celor dou relaii. n cazul general, numrul de tupluri ale relaiei rezultat al operaieide jonciune este cuprins ntre 0 i (N

    Rx N

    S).

    Operaia de jonciune natural este conceptual comutativ(adic R >< S = S >< R),dac se consider c atributele unei relaii nu sunt ordonate. Dac se consider schemarelaiei rezultat ca list a atributelor sale, atunci, prin convenie, atributele primei relaii

    operand sunt primele n lista de atribute a relaiei rezultat, iar atributele celei de-a douarelaii, mai puin atributul (sau atributele) de jonciune, urmeaz n lista atributelorrelaiei rezultat.

    Operaia de jonciune natural nu este, n general, asociativ. Fie mulimile deatribute disjuncte A, B, C, D i relaiile cu schemele: R(A,B), S(B,C) i T(A, D). nexpresia (R >< S) >< T se efectueaz mai nti jonciunea R >< S pe atributul comun Bale celor dou relaii, rezultnd o relaie cu schema Q(A,B,C), dup care se efectueazjonciunea Q >< T pe atributul comun A

    Asocierea de la dreapta la stnga a relaiilor date (expresia R >< (S >< T)) nueste posibil, deoarece jonciunea (S >< T) nu se poate evalua, dat fiind c relaiileS(B,C) i T (A,D) nu au nici-un atribut comun.

    Se poate remarca uor c exist i situaii n care jonciunea natural esteasociativ, i anume cnd fiecare pereche de relaii din expresia dat au atribute comune.

    Operaia de jonciune natural este utilizat pentru a combina date din dourelaii, astfel nct informaia rezultat s fie cuprins ntr-o singur relaie. n cazul celmai frecvent, jonciunea natural se calculeaz ntre o relaie care refer i relaiareferit, atributul de jonciune fiind cheia strin (n relaia care refer), respectiv cheiaprimar (sau candidat) n relaia referit. Rezultatul obinut reflect asocierea dintre celedou relaii. De exemplu, jonciunea natural din figura 3.5 ntre relaiile ANGAJATI iSECTII reflect asociereaN: 1 ntre acestea. Din acest exemplu se poate remarca faptulc prin operaia de jonciune se obin informaii combinate din cele dou relaiioperand. Pentru fiecare tuplu din relaia care refer (n exemplul de mai sus, relaiaANGAJATI) se obin toate informaiile din tuplul referit (n exemplul de mai sus,relaia SECTII), adic acel tuplu care are valoarea cheii primare egal cu valoarea cheiistrine care o refer. n exemplul de mai sus, prima linie a tabelului rezultat conine toate

    informaiile (nume secie, buget) despre secia n care lucreaz angajatul respectiv(secia 1), etc.Fora modelului relaional const n posibilitatea de a combina informaiile din

    dou sau mai multe relaii pentru a obine rezultatul unei interogri, combinare care se poate face printr-una sau mai multe operaii de jonciune. Aceast posibilitate decombinare a informaiilor este denumit de unii autori ca o navigare prin baza de date.

    n limbajul SQL, -jonciunea se poate exprima direct cu o instruciune SELECTpe dou sau mai multe tabele, condiia de jonciune fiind introdus prin clauza WHERE.De exemplu, -jonciunea din figura 3.4 se poate obine prin instruciunea:

    SELECT * FROM ANGAJATI,SECTII WHERE ANGAJATI.IdSectie =

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    10/30

    SECTII.IdAngajat;

    O jonciune natural se poate exprima n limbajul SQL numai n mod explicit,adic trebuie ca lista de atribute a instruciunii SELECT s conin numai atributelediferite din cele dou relaii (fiecare atribut de jonciune se introduce o singur dat), iarn clauza WHERE trebuie introdus condiia de egalitate a atributelor corespondente. Deexemplu, jonciunea natural ANGAJATI >< SECTII din figura 3.5 se obine prininstruciunea SQL:

    SELECT IdAngajat,ANGAJATI.Nume,Prenume,DataNasterii,Adresa,Salariu,SECTII.IdSectie,SECTII.Nume,Buget,IdAngajat FROM ANGAJATI,SECTII WHEREANGAJATI.IdSectie = SECTII.IdSectie;

    Diviziunea (division) este o operaie binar a algebrei relaionale prin care seobine o relaie care conine atributele diferenei mulimilor de atribute ale relaiiloroperand.

    Fie dou mulimi de atribute: A = {A1,A2,..A

    n} i B = {B1,B

    2,..B

    m} i

    dou relaii R(A,B) i S(B) astfel nct mulimea atributelor relaiei S s fie osubmulime a mulimii atributelor relaiei R. Relaia QD obinut prin operaia dediviziune are ca atribute toate atributele diferenei celor dou mulimi de atribute (adicacele atribute care aparin relaiei R i nu aparin relaiei S) i conine acele tupluri

    t[A] care au proprietatea c pentru orice tuplu s din S exist un tuplu t n R care areatributul B egal cu tuplul s. Se poate scrie:QD(A) = R- S =n

    AaR.B = S.B(R)

    n limbajul SQL, diviziunea se exprim printr-o instruciune SELECT,introducnd explicit lista atributelor de proiecie i condiia de egalitate a atributelorcorespondente din cele dou relaii prin clauza WHERE.

    Algebra relaional este o colecie de operaii asupra relaiilor. Cele opt operaii propuse de E.F.Codd (reuniunea, intersecia, diferena, produsul cartezian, restricia,proiecia, jonciunea, diviziunea), la care se adaug operaia de redenumire a atributelor,nu constituie o mulime minim de operaii ale algebrei relaionale, deoarece o parte dinoperaii se pot exprima prin intermediul altora. Aa cum s-a prezentat mai sus, jonciuneaeste o proiecie a unei restricii a produsului cartezian al celor dou relaii, iar diviziuneaeste o proiecie a unei restricii asupra relaiei demprit. La fel, intersecia se poate

    exprima printr-o expresie construit pe baza operaiei de diferen: R n S = R - (R -S).Cinci operaii (reuniunea, diferena, produsul cartezian, restricia, proiecia) sunt

    operaii primitive i constituie mulimea minim de operaii ale algebrei relaionale. Pe baza lor se poate construi orice expresie a algebrei relaionale. Dar i celelalte treioperaii (i n special jonciunea) sunt operaii deosebit de utile n formulareainterogrilor, astfel nct algebra relaional a pstrat toate cele opt operaii propuse deE.F.Codd, la care s-a adugat operaia de redenumire a atributelor.

    4.1.3 FORMULAREA INTEROGRILORInterogrile exprimate n limbaj natural se pot formula ntr-unul din limbajele

    abstracte de interogare, algebra relaional sau calculul relaional, dup care se poate gsicomanda corespunztoare n limbajul de interogare implementat de sistemul SGBD n careva fi realizat baza de date (cum este limbajul SQL).

    Pentru utilizator, o interogare este o metod de a regsi anumite informaii dintr-obaz de date, prin intermediul unei aplicaii de baze de date. Din punctul de vedere alprogramatorului aplicaiei de baze de date, interogarea se exprim printr-o comandechivalent expresiei de interogare, comand care se transmite sistemului SGBD.

    Din punct de vedere al sistemului de gestiune, o interogare este un program (deexemplu, n limbajul SQL) pe care l compileaz i apoi l execut. Ca orice program, ointerogare este prelucrat de ctre SGBD n mai multe faze: analiza lexical, analizasintactic i analiza semantic, pentru validarea interogrii, urmate de generarea codului.

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    11/30

    De asemenea, dac exist mai multe soluii pentru aceeai interogare, sistemul de gestiuneselecteaz soluia optim. Conceptual, subsistemul SGBD de prelucrare a interogrilorconst din urmtoarele componente:

    Compilatorul de interogri, care efectueaz analiza lexical i sintactic ainterogrii; acesta valideaz din punct de vedere sintactic interogarea, adicverific existena relaiilor, a vederilor, a indexurilori a atributelor implicaten interogare i utilizarea corect a acestora.

    Optimizatorul de interogri, care efectueaz analiza semantic a interogrii iselecteaz alternativa optim dintre mai multe soluii posibile de execuie ainterogrii.

    Generatorul de cod,care genereaz programul de execuie al interogrii, conformoptimizrilor efectuate.

    Componenta de execuie (runtime),care execut programul interogrii.

    Compilarea interogrii se realizeaz la fel ca orice compilare a programelor, fraspecte specifice sistemelor de baze de date. Optimizarea interogrilor este o operaiespecific sistemelor de gestiune i utilizeaz proprietile operaiilor relaionale pentru aobine performane de execuie a interogrilor ct mai bune. Optimizarea este efectuatde ctre SGBD, transparent, fr intervenia programatorului.

    n algebra relaionalo interogare se formuleaz printr-o expresie constnd dintr-osecven de identificatori (nume de relaii, nume de atribute), constante i operatori.Pentru exprimarea unei interogri printr-o expresie de algebr relaional, trebuie s fieprecizate urmtoarele elemente:

    Lista atributelor relaiei rezultat, care se numesc atribute de proiecie.Lista relaiilor din care se extrag informaiile. Condiia pe care trebuie s o ndeplineasc tuplurile relaiei rezultat.

    n funcie de aceste elemente, se pot studia dou situaii de rezolvare ainterogarilor: interogri care se rezolv n cadrul unei singure relaii i interogri care serezolv folosind dou sau mai multe relaii ale bazei de date.

    Interogri ntr-o singur relaie. Dac toate atributele care intervin n interogare(atributele de proiecie i atributele din condiie) sunt atribute ale unei singure relaii R,atunci interogarea se poate rezolva la nivelul acelei relaii, ca o proiecie (pe atributelerelaiei rezultat) a restriciei cu condiia impus asupra relaiei date, prin expresia:

    Q = lista_atribute conditie(R)

    Exemplul 3.1. Fie relaia ANGAJATI definit n figura 3.1 i interogarea: Caresunt numele i prenumele angajailor care au un salariu mai mare sau egal cu 3000?.

    Se observ c aceast interogare poate fi rezolvat la nivelul unei singure relaii,relaia ANGAJATI. Expresia de algebr relaional care exprim interogarea dat este:

    Q1 = Nume,Prenume Salariu >3000 (ANGAJATI)

    Instruciunea SQL care realizeaz aceast interogare este:SELECT Nume,Prenume FROM ANGAJATI WHERE

    Salariu >= 3000; Rezultatul interogrii este

    urmtorul:

    Nume PrenumeIonescu IonPopescu PetreVasilescu Ana

    Exemplul 3.2. Fie relaia ANGAJATI definit n figura 3.1 i interogarea: Caresunt numele, prenumele i salariul angajailor care lucreaz n secia cu numrul 1?

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    12/30

    Analiznd aceast interogare se constat c toate atributele de proiectie (nume, prenume, data nasterii i salariul unui angajat) i atributul din condiia de interogare(numrul sectiei) sunt atribute ale relaiei ANGAJATI, deci interogarea poate fi rezolvatla nivelul acestei relaii.

    Expresia de algebr relaional care exprim interogarea dat este:Q2=

    Nume,Prenume,SalariuIdSectie = 1

    (ANGAJATI)

    Comanda SQL care realizeaz aceast interogare este:SELECT Nume,Prenume,Salariu FROM ANGAJATI WHEREIdSectie=1;

    Rezultatul interogrii este:

    NumePrenume SalariuIonescu PopescuI

    onPetre 350 4000

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    13/30

    Interogri n dou sau mai multe relaii. n situaia n care atributele deproiecie i atributele din condiia de interogare nu aparin unei singure relaii, pentrurezolvarea interogrii trebuie s fie folosite toate acele relaiile care, mpreun, coninaceste atribute.

    Conceptual, o astfel de interogare se rezolv construind mai nti o relaie care sconin toate atributele necesare prin combinarea a dou sau mai multe relaii folosind

    operaii de produs cartezian sau jonciuni, iar rezultatul interogrii se obine prinrestricia (cu condiia de interogare) i proiecia (pe atributele de proiecie) a acesteirelaii.

    Cazul cel mai frecvent de interogare necesit jonciunea natural a dou sau maimulte relaii asociate, folosind perechea de atribute cheia strin - cheia primar referitpentru fiecare operaie de jonciune:

    Q = lista_atribute

    conditie

    (R >< S >< T...)

    Exemplul 3.3. Fie relaiile ANGAJATI, SECTII definite n figura 3.1 iinterogarea Care sunt numele, prenumele i salariul angajailor care lucreaz n secia cunumele Producie ?.

    Atributele de proiecie (Nume,Prenume,Salariu) sunt atribute ale relaieiANGAJATI; atributul Nume al unei secii (care apare n condiia de interogare)

    nu se afl n aceeai relaie, ci n relaia SECTII de pentru a rezolva aceastinterogare, este necesar combinarea celor dou relaii (fig. 3.6).

    Combinarea celor dou relaii se efectueaz prin jonciunea natural (pe atributul comun

    IdSectie) a celor dou relaii. Relaia rezultat al jonciunii conine toateinformaiile necesare interogrii: numele, prenumele i salariul angajailori numeleseciei corespunztor numrului seciei (IdSectie) n care lucreaz fiecare angajat.Dup aceasta se face restricia (cu condiia SECTII.Nume= Productie), urmatde proiecia pe atributele de proiecie. Expresia final de algebr relaional care expriminterogarea dat este:

    Q3

    = ANGAJATI.Nume,Prenume,Salariu

    SECTII.Nume='Productie'

    (ANGAJATI >< SECTII)

    Comanda SQL care realizeaz aceast interogare este:

    SELECT ANGAJATI.Nume,Prenume,Salariu FROMANGAJATI,SECTII WHERE SECII.IdSectie= ANGAJATI.IdSectie AND SECTII.Nume =Productie;

    Aa cum s-a mai precizat, n limbajul SQL trebuie s fie introdus explicit condiiade jonciune natural (SECTII.IdSectie = ANGAJATI.IdSectie), mpreun cucelelalte condiii de interogare (SECTII.Nume =Productie).

    Rezultatul acestei interogri asupra relaiilor cu starea din figura 3.1 este:

    Nume Prenume SalariuIonescu Ion 4000

    aceea,

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    14/30

    Popescu Petre 3500

    Exemplul 3.4. Fie relaiile FURNIZORI, ACHIZIII, COMPONENTE (fig.3.7), uor modificate fa de cele prezentate n capitolul precedent.FURNIZORIIdFurnizor Nume Prenume Adresa1 Marculescu Mihai Bucuresti2 Mircescu Vasile Bucuresti3 Amzulescu Ion Craiova

    ACHIZITIIIdComponenta IdFurnizor Cantitate PretUnitar1 1 100 1101 2 200 1002 2 300 2003 3 300 150

    COMPONENTEIdComponenta Denumire Culoare Greutate1 Rezistenta Rosu 12 Condensator Alb 23 Ferita Negru 4

    Fig. 3.7. Relaiile FURNIZORI, ACHIZITII,COMPONENTE.

    Interogarea "Care sunt numele i prenumele furnizorilor care au livrat componenten cantiti mai mari sau egale cu 200 ?" necesit jonciunea relaiilorFURNIZORI iACHIZITII care, mpreun, conin atributele ce intervin n interogare. Expresia dealgebr relaional care realizeaz aceast interogare este:

    Q4=n

    Nume,Prenume Cantitate > 200 (FURNIZORI X ACHIZITII)

    n SQL, aceast interogare se exprim astfel:

    SELECT Nume,Prenume FROM FURNIZORI,ACHIZITIIWHERE FURNIZORI.IdFurnizor = ACHIZITII.IdFurnizor ANDCantitate >= 200;

    Nume PrenumeMircescu VasileAmzulescu Ion

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    15/30

    Eemplul 3.5. Pentru aceleai relaii din figura 3.7, se consider interogarea: "Caresunt numele, prenumele i adresa furnizorilor care au livrat componenta cu denumireaRezistenta? ".

    Atributele de proiecie (Nume, Prenume, Adresa) apar in relaieiFURNIZORI, iar atributul Denumire aparine relaiei COMPONENTE. Asocierea dintreaceste relaii este realizat prin relaia ACHIZITII, astfel nct aceast interogarenecesit jonciunea tuturor celor trei relaii. (fig. 3. 8).

    Fig. 3.8. Interogare pe mai multe relaii asociate.

    Pentru realizarea interogrii date se vor executa urmtoarele operaii:

    R1 = ACHIZITII >< COMPONENTER2= FURNIZORI >< R

    1= FURNIZORI>< (ACHIZITII >< COMPONENTE)

    R3=

    Denumire ='Rezistenta'(R

    2)

    Q5=

    Nume,Prenume,Adresa(R

    3)=

    Nume,Prenume,Adresa

    Denumire ='Rezistenta'

    (FURNIZORI >< (ACHIZITII >< COMPONENTE))

    n limbajul SQL, interogarea de mai sus se exprim prin instruciunea:SELECT Nume, Prenume, Adresa

    FROM FURNIZORI,ACHIZITII,COMPONENTEWHERE FURNIZORI.IdFurnizor =

    ACHIZITII.IdFurnizor ANDCOMPONENTE.IdComponenta =ACHIZITII.IdComponenta AND Denumire =Rezistenta;

    Rezultatul acestei interogri pentru starea relaiilor din figura 3.7 este:

    Nume Prenume Adresa

    Marculescu Mihai BucurestiMircescu________Vasile_________Bucuresti

    Se observ c n comanda SQL nu se evideniaz care sunt operaiile de jonciunei ordinea lor de execuie, iar condiiile de restricie i jonciune sunt cuprinse ntr-osingur expresie (n clauza WHERE). Sistemul SGBD este acela care determin moduloptim de realizare a operaiilor coninute n blocul de interogare.

    4.2 Limbajul SQLLimbajul SQL (Structured Query Language) este limbajul utilizat de majoritatea

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    16/30

    sistemelor de baze de date relationale pentru definirea i manipularea datelor.Limbajul SQL a fost dezvoltat ntr-un prototip de sistem de gestiune a bazelor de

    date relaionale -System R - la IBM, la mijlocul anilor 1970. In 1979 Corporatia Oracle aintrodus prima implementare a limbajului SQL n varianta comercial. n anul 1987Institutul National American de Standarde - ANSI (American National StandardizationInstitute) a elaborat standardul limbajului SQL. Ulterior au avut loc mai multe revizii ale

    acestui standard. n 1992 Organizaia International de Standarde - ISO (InternationalStandardization Office) a adoptat limbajul SQL ca limbaj standard pentru sistemele degestiune a bazelor de date relaionale sub denumirea de SQL-92 (sau, mai simplu, SQL2)[ANSI92]. Un standard ulterior, SQL-99 (numit i SQL3) adaug limbajului trsturi alemodelului obiect-relaional.

    Majoritatea sistemelor SGBD relaionale actuale suport standardul SQL2, darfiecare implementeaz, de fapt, un dialect specific al limbajului SQL. n diferiteleimplementri ale limbajului SQL pot s lipseasc unele comenzi prevzute n standardulSQL2, dar pot exista extensii specifice, neprevzute n standard, care micoreaz oarecumgradul de portabilitate a aplicaiilor. Unele sisteme de gestiune (ca Oracle9i, PostgreSQL-7.2) suport i o mare parte din specificaiile obiect-relaionale prevzute n standardul

    SQL99 (SQL3). Deoarece aceast lucrare este axat pe modelul relaional se vor descrie nprincipal instruciunile standardului SQL2.Limbajul SQL folosete termenii de tabel (table), linie (row), coloan (column)

    pentru a desemna o relaie, un tuplu sau un atribut, deci este orientat spre reprezentareaprin tabele a relaiilor, care este mai simpl i mai intuitiv pentru proiectani i pentruprogramatori.

    Limbajul SQL cuprinde att componenta de descriere a datelor relaionale (Limbajde Descriere a Datelor- LDD) ct i componenta de manipulare a datelor (Limbaj deManipulare a Datelor- LMD), ambele fiind absolut necesare n gestiunea bazelor de date.Pe lng aceste componente principale, standardul SQL2 mai prevede i alte componenteale limbajului:

    Controlul tranzaciilor- conine comenzi pentru specificarea tranzaciilor. Uneleimplementri adaug comenzilor prevzute n standard i alte comenzisuplimentare de control al concurenei i refacerea datelor.

    Controlul securitii i al proteciei datelor- conine comenzi de administrare abazelor de date, pentru definirea utilizatorilori a drepturilor acestora de accesla tabele. Aceast component este puternic dependent de sistemul de gestiuneal bazei de date, iar pentru sistemele performante, administrarea bazei de dateeste un capitol foarte extins, care face obiectul activitii unei categorii specialede utilizatori ai bazei de date (administratori ai bazei de date).

    Limbajul SQL este un limbaj neprocedural: o instruciune SQL specific ceinformaii trebuie s fie setate sau obinute, nu modul (procedura) n care se opereaz.Limbajul SQL conine numai instruciuni de definire i manipulare a datelor i nuconine instruciuni de control al fluxului execuiei (instruciuni ca for, while, if, etc).De aceea, pentru realizarea aplicaiilor de baze de date, s-a dezvoltat o multitudine detehnologii, limbaje, biblioteci i interfee de programare care integreaz, printr-o tehnicoarecare, instruciunile SQL de acces la date.

    n continuare se vor prezenta cele mai importante instruciuni de descriere imanipulare a datelor definite n standardul SQL2.

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    17/30

    Pentru a nva i testa diferite instruciuni SQL trebuie s fie instalat un sistem degestiune a bazelor de date i un program utilitar care primete instruciuni de la consol ile transmite sistemului SGBD pentru a fi executate. Majoritatea sistemelor SGBD oferastfel de instrumente soft (cu sau fr interfa grafic). De exemplu, pentru sistemulMicrosoft SQL Server exist utilitarele isqli osqlcare permit executarea instruciunilorTransact-SQL (care sunt extensii ale limbajului SQL); pentru sistemele Oracle exist

    utilitarul SQL*Plus care permite execuia de la consol att a instruciunilor SQL, ca i a blocurilor PL/SQL; pentru sistemul mySQL exist utilitarul mySQL care executinstruciuni SQL. Aceste programe utilitare sunt descrise n primul capitol din ndrumarulde aplicaii. Bineneles, atunci cnd se testeaz o anumit instruciune SQL trebuie s fiefolosit exact varianta implementat n sistemul folosit, care poate diferi ntr-o oarecaremsur de forma general din standard.

    4.2.1 Structura lexical a limbajului SQL

    O instruciune SQL (statement) este o secven de elemente componente (tokens)terminat cu semnul punct i virgul (;). Fiecare instruciune SQL conine o comandSQL (command), care specific ce aciune se efectueaz, urmat de alte elemente

    componente, care specific operaii, clauze, parametri, etc. De exemplu, instruciunea:SELECT * FROM ANGAJATI;conine comanda SQL SELECT, urmat de alte elemente componente ale instruciunii.

    Un element al unei instruciuni SQL poate fi: cuvnt cheie (key word), identificator(identifier), constant (literal) sau un caracter special. Elementele componente sunt, ngeneral, separate printr-unul sau mai multe spaii albe (whitespaces): caracter spaiu,caracter linie nou sau caracter tab. Separatorii pot lipsi dac nu exist ambiguiti nsecvena de elemente ale unei comenzi. O comand se poate scrie pe una sau mai multelinii, iar ntr-o linie se pot introduce una sau mai multe comenzi.

    Cuvinte cheie i identificatori. Cuvintele cheie sunt elemente componente cusemnificaie fix n limbajul SQL. Acestea pot fi comenzi (SELECT, UPDATE, INSERT,

    etc.), operatori (AND, OR, NOT, LIKE), clauze (WHERE, SET, VALUES, etc.). Deexemplu, n instruciunile urmtoare, toate cuvintele scrise ngroat (bold) sunt cuvintecheie:

    SELECT * FROM SECTII WHERE IdSectie = 1;INSERT INTO SECTII VALUES (2,Productie,500);Identificatorii sunt elemente componente care denumesc tabele, coloane sau alte

    obiecte ale bazei de date. n exemplul de mai sus, SECTII, IdSectie sunt identificatori.n SQL cuvintele cheie i identificatorii trebuie s nceap cu o liter sau cu

    caracterul subliniere ( _ ), iar caracterele urmtoare pot fi litere, cifre sau caracterulsubliniere. Cuvintele cheie i identificatorii au aceeai structur lexical i nu pot fidifereniai fr a cunoate limbajul. n cuvintele cheie i identificatori nu se difereniaz

    caracterele mici de cele mari (sunt case-insensitive),deci comenzile INSERT, insert, sauInsert, etc. sunt identice. Totui, pentru evidenierea comenzilor SQL, n continuaremajoritatea cuvintelor cheie vor fi scrise cu majuscule. La fel vor fi scrise i numelerelaiilor.

    Pe lng acest tip de identificatori simpli (formai dintr-o secven de litere, cifrei caracterul subliniere), mai exist i un alt tip de identificatori, identificatorii delimitai(quoted identifiers), constnd dintr-o secven de caractere ncadrat (la nceput i lasfrit) de caracterul ghilimele ( ). Un identificator delimitat este ntotdeauna identificator(niciodat cuvnt cheie), iar literele mari sunt diferite de literele mici (este case-sensitive).

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    18/30

    De exemplu, elementul SELECT este un identificator delimitat i poate denumi o tabelsau o coloan (atribut), n timp ce elementul SELECT este un cuvnt cheie i utilizarea luica nume de tabel sau de atribut va produce o eroare de interpretare a comenzii.

    Un identificator delimitat poate conine orice caracter cu excepia caracterululghilimele, permind crearea unor nume (de tabele, coloane, etc.) mai complexe, care sconin spaii sau caractere speciale ( &, %, etc.), ceea ce cu identificatori simpli (ne-

    delimitai) nu este posibil.Constante. Constantele (literale) pot fi iruri de caractere, numere ntregi, numerereale sau constanta NULL. Ele se reprezint aproximativ la fel ca n alte limbaje deprogramare (de exemplu C/C++).

    Caractere speciale. Unele caractere care nu sunt litere sau cifre pot avea rol deoperatori SQL sau pot avea o semnificaie special n cadrul comenzilor SQL. Deexemplu, caracterul punct i virgul (;) este folosit pentru terminarea comenzilor; caracterulpunct (.) este folosit ca punct zecimal sau pentru calificarea numelor; caracterul asterisc (*)este folosit ca operator de nmulire sau n comanda SELECT, etc.

    4.2.2 Expresii, operatori i funcii SQL2

    O expresie SQL const dintr-unul sau mai muli operanzi, operatori i paranteze.Un operand poate fi numele unei coloane (a unui tabel), o constant (literal), sau valoareareturnat de o functie; parantezele sunt folosite pentru a preciza o anumit ordine aoperaiilor, dac aceasta este diferit de cea implicit, dat de precedena operatorilor.

    Un operator SQL este compus dintr-unul sau mai mai multe caractere speciale (carenu sunt litere sau cifre), ca de exemplu: +,-,*,/,%,,=,~,!,@ #,&,|, ,?,,$, sau este uncuvnt cheie, ca de exemplu: AND, OR, NOT, LIKE, etc. Din punct de vedere al numruluide operanzi, operatorii SQL sunt de dou categorii, binari i unari, cei unari putnd fioperatori prefix sau operatori postfix. Din punct de vedere al tipului de operaie, operatoriiSQL (din orice categorie) pot fi aritmetici, logici, de comparaie SQL, sau relationali.

    Operatorii aritmetici ai limbajului SQL2 sunt compui din unul sau mai multecaractere speciale i au notaie i semnificaie asemntoare cu a celor definii n diferitelimbaje de programare, cu mici diferene care se pot remarca din lista de mai jos.Operatorii aritmetici binari sunt: + (adunarea), - (scaderea), * (nmulirea), / (mprirea),% (modulo), ^ (ridicarea la putere), & (AND orientat pe biti), | (OR orientat pe biti), #(XOR orientat pe biti) , > (deplasarea la dreapta). Tot operatoriaritmetici sunt i operatorii binari de comparatie: < (mai mic), > (mai mare), = (mai mare sau egal), = (egal), (sau !=) (diferit). Operatorii aritmetici unarisunt: @ (valoarea absoluta),! (factorial), !! (factorial, operator postfix), ~ (NOT orientatpe biti).

    Operatorii de comparaie SQL sunt descrii n tabelul urmtor.

    Operator Operaia efectuatA BETWEEN min AND max compar A cu dou valori, min i maxA IN (v1,v2, ...vn) compar A cu o lista de valori (v1, v2,vn )A IS NULL compar A cu NULLA IS NOT NULL compar A cu NOT NULLA LIKE model_sir compar A cu un model de ir de caractere

    Pentru operatorii de comparaie, valoarea de comparat (A) este, de regul, valoareaunui atribut al unei relaii, dat prin numele coloanei corespunztoare a tabelului care

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    19/30

    reprezint relaia respectiv, oconstant sau valoarea unei expresii. Operatorii de comparaie (att cei aritmetici, ct ioperatorii de comparaie specifici SQL), returneaz (evalueaz) valoarea logic TRUE (1),dac condiia de comparaie este ndeplinit i FALSE (0) dac condiia de comparaienu este ndeplinit. Valoarea NULL este returnat dac ambii operanzi comparai auvaloarea NULL.

    Operatorii logici ai limbajului SQL sunt notai prin cuvinte cheie: AND, OR,NOT. Toi aceti operatori se aplic unor variabile logice cu 3 valori (trivalente): TRUE(1), FALSE (0) i NULL; valoarea NULL semnific lipsa de informaie. Operatorii logiciSQL returneaz o valoare logic trivalent (TRUE, FALSE sau NULL), aa cum se poatevedea din tabelele de adevr de mai jos.

    A B A AND B A OR BTRUE TRUE TRUE TRUETRUE FALSE FALSE TRUETRUE NULL NULL TRUEFALS FALSE FALSE FALSE

    FALS NULL FALSE NULLNULL NULL NULL NULL

    A NOT ATRUE FALSEFALSE TRUE

    NULL

    NULLOperatorii relaionali sunt notai prin cuvinte cheie: UNION (reuniune),

    INTERSECT (intersecie), MINUS (diferena).Funciile definite n SQL sunt de dou categorii:funcii agregatifuncii scalare.Funciile agregatcalculeaz un rezultat din mai multe linii ale unui tabel. Aceste funciivor fi detaliate ntr-o seciune urmtoare, la descrierea instruciunii SELECT.

    Funciile scalare primesc unul sau mai multe argumente i returneaz valoareacalculat sau NULL n caz de eroare. Argumentele funciilor pot fi constante (literale) sauvalori ale atributelor specificate prin numele coloanelor corespunzatoare. Exist mai multetipuri de funcii scalare SQL:

    Funcii numerice: Majoritatea versiunilor de SQL furnizeaz funcii de calcultrigonometric (sin, cos, etc.), funcii de calcul al logaritmului (ln, log), al puterii(pow), funcii de rotunjire (floor, ceil), etc.

    Funcii pentru manipularea irurilor de caractere.Funcii pentru data calendaristic i timp.Funcii de conversie.

    Funciile scalare se folosesc n expresii, care pot s apar n diferite clauze aleinstruciunilor SQL.

    4.2.3 Tipuri de date i domenii SQL2

    n limbajul SQL (standardul SQL2) sunt definite mai multe tipuri de date: numeric,ir de caractere, ir de bii, data (calendaristic), timp. Denumirile tipurilor de date, ca i

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    20/30

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    21/30

    limbajului SQL, deci sunt destul de deprtate de noiunea de domeniu relaional, aa cuma fost descris n seciunea precedent, dat fiind c nu se face nici o precizare asemnificaiei domeniului.

    Standardul SQL2 prevede comanda CREATE DOMAIN, care atribuie un nume dedomeniu i unele constrngeri unui tip predefinit SQL2, dar aceast comand nu prea maieste implementat n sistemele de gestiune actuale, care prefer alte soluii de definire a

    domeniilor.De exemplu, n SQL Server, se pot crea aa-numitele tipuri definite de utilizator(user-defined types), care sunt, de fapt, echivalente cu domeniile create cu comanda SQLCREATE DOMAIN. Pentru aceasta se folosete o procedur stocat, scris n limbajulTransact-SQL care este specific sistemului SQL Server i care extinde limbajul SQL. nsistemele de baze de date Oracle 8i i Oracle 9i, se pot crea cu adevrat tipuri de date noi,folosind comanda CREATE TYPE, care permite gruparea sub un anumit nume a maimultor atribute, de diferite tipuri (predefinite sau definite de utilizator), ntr-un modasemntor cu definirea claselor din limbajele obiect-orientate. Aceste tipuri definite deutilizator sunt folosite ca domenii ale atributelor (coloanelor) tabelelor. Pentru fiecare tip dedate nou definit, se pot prevedea metode, scrise ntr-unul din limbajele C, Java sau

    PL/SQL. Aceste caracteristici reprezint trsturile obiect-relaionale ale sistemelor debaze de date Oracle 8i i Oracle 9i. n sistemul PostgreSQL se pot crea, de asemenea, tipuride date noi, folosind comanda CREATE TYPE, iar tipurile nou create pot fi folosite cadomenii ale atributelor.

    Conveniile sintactice care se vor folosi n acest capitol i n urmtoarele pentruprezentarea limbajului SQL i a limbajelor de programare dezvoltate pe baza acestuia suntprezentate n tabelul 2.3.

    Convenie sintactic UtilizareLitere mari Cuvinte cheie ale limbajului sau denumiri de tabele.[ ] (paranteze drepte) Element opional al instruciunii.{ } (acolade) Element obligatoriu al instruciunii.

    | (bar vertical) Separ elementele din parantezele drepte sau acolade. Numai unuldin elementele separatecu bar vertical se pot introduce n instruciunea respectiv.

    [,...n] Indic faptul c elementul precedent poate fi repetat de n ori.Elementele repetate sunt

    separate prin virgul.element1, List de n elemente de acelai tip............... Elementele repetate sunt separate prin virgul.elementnlista_elemente List de elemente de acelai tip (separate prin virgul)

    Caracterele folosite pentru a specifica o anumit convenie sintactic (paranteze,bara vertical, virgula, etc.) nu apar n instruciunile propriu-zise. Listele de elemente(compuse din mai multe elemente separate prin virgul) vor fi exprimate fie folosind unacele trei din construciile de mai sus, care se potrivete cel mai bine instruciuniirespective. Pe lng aceste convenii, pentru o prezentare ct mai concis i mai uor deneles a instruciunilor, s-au mai adoptat i alte notaii: denumiri sugestive aleelementelor sintactice, renunarea la detalii minore pentru a se putea urmri caracteristicilede ansamblu, etc.

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    22/30

    4.2.4 Instruciuni SQL de definire a datelor

    Componenta de definire a datelor a limbajului SQL (numitLimbajul de Definire aDatelor- LDD) permite crearea (CREATE), modificarea (ALTER) i distrugerea (DROP)obiectelor bazei de date: tabele de baz (TABLE), tabele vedere (VIEW), indexuri(INDEX), proceduri (PROCEDURE), etc. Majoritatea dialectelor limbajului SQL conincomenzile:

    CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATEUSER CREATE FUNCTION, CREATE PROCEDURE, CREATETRIGGER ALTER TABLE, ALTER VIEW, ALTER FUNCTION,ALTER PROCEDURE DROP TABLE, DROP VIEW, DROPINDEX, DROP USER DROP FUNCTION, DROP PROCEDURE,DROP TRIGGERn continuare vor fi descrise cele mai importante instruciuni SQL de definire adatelor.

    4.2.4.1 CREAREA TABELELOR SI A VEDERILOR

    n limbajul SQL2 un tabel se creeaz folosind instruciunea CREATE TABLE,

    care are urmtoareasintax:

    CREATE TABLE nume_tabel (col1 dom1 [constrangeri_coloana],col2 dom2 [constrangeri_coloana],

    coln domn [constrangeri_coloana],[constrangeri_tabel] );

    Constrngerile impuse fiecrei coloane (atribut), ca i constrngerile de tabel, suntopionale i vor fi discutate n capitolul urmtor.

    De exemplu, tabelul ANGAJATI corespunztor relaiei ANGAJATI (descris n

    seciunea precedent) se poate defini astfel:CREATE TABLE ANGAJATI (

    Nume varchar(20),Prenume varchar(20),DataNasterii date,Adresa varchar(50),Functie varchar(20),Salariu numeric);

    Instruciunea CREATE TABLE definete att un tip de relaie (cu atributelespecificate) ct i o variabil relaie care iniial este vid (nu conine nici un tuplu).

    Tabelele create cu instruciunea CREATE TABLE sunt numite i tabele de baz

    (base tables); ele sunt memorate n fiierele bazei de date i pot fi accesate pentruintroducerea, modificarea i regsirea (interogarea) datelor.

    Vederi(views). Un tabel vedere este un tabel virtual, care nu este memorat fizic nfiiere, ci reprezint o selecie (dup un anumit criteriu) a datelor memorate n unul saumai multe tabele de baz.

    Datele (valorile atributelor) sunt memorate o singur dat, n tabelele de baz, darpot fi accesate att prin tabelele de baz ct i prin tabelele vederi. Instruciunea SQL decreare a unui tabel vedere este:

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    23/30

    CREATE VIEW nume_vedere AS (SELECT...);Formatul comenzii SELECT va fi descris n capitolul urmtor.Un tabel vedere este ntotdeauna actualizat ("la zi"), adic orice modificare

    efectuat n tabelele de baz se regsete imediat n orice tabel vedere creat pe bazaacestora.

    4.2.4.2 MODIFICAREA SI STERGEREA TABELELOR

    Comanda de modificare a tabelelor (ALTER TABLE) permite adugarea sautergerea unor atribute, modificarea domeniilor unor atribute, precum i adugarea,modificarea sau tergerea unor constrngeri ale tabelului.

    De exemplu, instruciunea de adugare a atributului DataAngajarii n tabelulANGAJATI se scrie n felul urmtor:

    ALTER TABLE ANGAJATI ADD DataAngajarii Date;Pentru tergerea unei coloane dintr-un tabel se folosete cuvntul cheie DROP n

    comanda ALTER TABLE. De exemplu, pentru tergerea coloanei DataAngajarii dintabelul ANGAJATI se introduce instruciunea:

    ALTER TABLE ANGAJATI DROP DataAngajarii;Instruciunile de tergere a tabelelor de baz i a vederilor sunt:

    DROP TABLEnume_tabel;

    DROP VIEWnume_vedere;

    4.2.5 INSTRUCIUNI SQL de manipulare a datelor

    Instruciunile SQL de manipulare a datelor conin una din comenzile: SELECT,INSERT, UPDATE sau DELETE i vor fi studiate n continuare.

    4.2.5.1 INSTRUCIUNEA SELECTInstruciunea SELECT este instruciunea de interogare n limbajul SQL, prin care

    se regsesc informaiile dorite din unul sau mai multe tabele ale bazei de date.Instruciunea SELECT este foarte puternic i are urmtoarea sintax general:

    SELECT [DISTINCT]lista_coloane [FROMlista_tabele] [WHEREconditie][clauze_secundare];

    Ca rezultat al instruciunii SELECT se obine un tabel care conine atributele(coloanele) din lista_coloane ale acelor linii (tupluri) ale produsului cartezian al tabelelordin lista_tabele pentru care expresia logic conditie este adevrat (are valoarea TRUE).

    Se remarc trei seciuni (clauze) importante ale instruciunii de interogare:SELECT, FROM i WHERE. Clauza SELECT definete coloanele tabelului rezultat.Clauza FROM indic unul sau mai multe tabele (o list de tabele) din care se selecteazliniile tabelului rezultat. Clauza WHERE definete condiia pe care trebuie s ondeplineasc fiecare linie a tabelului rezultat. n afara acestor clauze, comanda SELECTmai poate conine i clauze secundare (ORDER BY, GROUP BY, HAVING), care permitordonri sau grupri ale tuplurilor (liniilor) rezultate, etc. Singura clauz obligatorie esteSELECT; restul clauzelor sunt opionale.

    Clauza SELECT introduce lista coloanelor unor tabele sau expresii care vor fi

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    24/30

    selectate i afiate. Coloanele din list trebuie s aparin unuia din tabelele specificate nclauza FROM. De exemplu, comanda urmtoare va selecta numele i prenumele tuturorangajailor din tabelul ANGAJATI:

    SELECT Nume, Prenume FROM ANGAJATI;Ca rezultat al instruciunii de mai sus se pot obtine dou sau mai multe linii

    identice, dac exista angajai cu acelai nume i prenume, deci rezultatul operaiei nu este

    o relaie n sensul definiiei din modelul relaional. Pentru eliminarea liniilor duplicatse introduce parametrul DISTINCT i atunci se elimin liniile duplicat iar rezultatul este orelaie n sensul definiiei din modelul relaional. Deci instruciunea de mai sus se poatescrie:

    SELECT DISTINCT Nume,Prenume FROM ANGAJATI;Dac lista de atribute este un asterisc (*), atunci se selecteaz toate atributele

    produsului cartezian al tabelelor indicate prin clauza FROM, care ndeplinesc condiia dinclauza WHERE. De exemplu, instruciunea:

    SELECT * FROM ANGAJATI;permite selectarea tuturor coloanele i a liniilor din tabelul ANGAJATI.

    n clauza SELECT se pot introduce i funcii de totalizare (funcii agregat).Funciile agregat definite n limbajul SQL2 sunt date n tabelul urmtor.

    Funcia Valoarea returnataCOUNT numrul de linii aleSUM suma tuturor valorilor dintr-oMAX valoarea cea mai mare dintr-oMIN valoarea cea mai mic dintr-oAVG media valorilor dintr-o

    De exemplu, comenzile urmtoare vor afia numrul de linii ale tabelului

    ANGAJATI i salariul maxim, minim i mediu al angajailor:SELECT COUNT(*) FROM ANGAJATI;

    SELECT MAX(Salariu) FROM ANGAJATI;

    SELECT MIN(Salariu) FROM ANGAJATI;

    SELECT AVG(Salariu) FROM ANGAJATI;Instruciunea SELECT poate s conin chiari numai clauza SELECT, deci fr s

    se refere la un tabel (printr-o clauz FROM). n acest caz, comanda SELECT conine olist de expresii pe care le evalueaz i rezultatele calculate sunt returnate ca o linie a unuitabel ale crui coloane sunt chiar expresiile date.

    n clauza SELECT se pot redenumi atributele (coloane ale tabelelor) sau se pot

    specifica nume pentru expresii, folosind urmtoarea sintax:SELECT nume1 [AS] noul_nume1 [,...n] FROM lista_tabele [alte_clauze];Se observ c noul nume atribuit unei coloane (sau expresii) urmeaz vechiului

    nume (sau expresiei), precedat (optional, depinznd de implementare) de cuvntul-cheieAS. De exemplu, comanda urmtoare va afisa numele angajatului denumit NumeAngajat i80% din salariul acestuia, denumit SalariuNet:

    SELECT Nume NumeAngajat,Salariu*0.8 SalariuNet FROM ANGAJATI;Clauza FROM este obligatorie dac ntr-una din clauzele SELECT, WHERE sau

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    25/30

    HAVING apar nume de coloane ale unor tabele. n acest caz, lista de tabele care nsoeteclauza FROM trebuie s conin numele tuturor tabelelor (separate prin virgul) ale crorcoloane se folosesc. Dac lista conine mai mult de un tabel, atunci numele coloanelor dinclauza SELECT trebuie s fie diferite i, dac nu sunt diferite, se calific cu numeletabelului caruia i aparine, precednd numele atributului cu numele tabelului urmat deoperatorul punct (.). De exemplu:

    SELECT ANGAJATI.Nume,SECTII.Nume FROM ANGAJATI,SECTII;De retinut c, dei limbajul SQL este case-insensitive, totui este necesar ca numele

    tabelului cu care se calific numele unui atribut s fie identic (inclusiv tipul de caracter,majuscul sau nu) cu cel declarat n clauza FROM.

    Clauza WHERErestrictioneaz tuplurile returnate ca rezultat la acele tupluri carendeplinesc condiia introdus de aceast clauz sub forma unei expresii logice.

    O expresie logic se construieste din valori logice, operatori logici (AND, OR,NOT) i paranteze. O valoare logic se obtine, n mod obinuit, ca rezultat al comparaieintre doi operanzi folosind un operator de comparaie. Un operand poate fi un atribut(nume de coloan dintr-unul din tabelele introduse prin clauza FROM), o constant,

    valoarea unei expresii aritmetice sau o valoare returnat de o funcie. Operatorii decomparaie utilizai n clauza WHERE pot fi att operatori aritmetici de comparaie ct ioperatori SQL de comparaie, aa cum se poate vedea n instruciunile urmtoare:

    SELECT Nume,Prenume FROM ANGAJATI WHERE DataNasterii >1968-01-01;

    SELECT Nume,Prenume FROM ANGAJATIWHERE Salariu BETWEEN 3000 AND 4000 AND Functie = Inginer;

    Prima instruciune va afia toi angajaii care s-au nscut dup data de 1 Ianuarie1968; cea de-a doua comand va afia toi angajaii cu funcia Ingineri salariul cuprinsntre 3000 i 4000.

    Clauza ORDER BY introduce numele atributului dup care se face ordonarealiniilor tabelului rezultat. Ordonarea se face n ordine cresctoare n mod implicit sau dacnumele atributului este urmat de cuvntul cheie ASC; dac numele atributului este urmat decuvntul DESC, ordonarea liniilor se face n ordine descresctoare a valorilor acelui atribut.Ordonarea liniilor astfel obinut este ordonare logic, foarte util n prezentarea (afiarea)rezultatului i nu nseamn ordonarea nregistrrilor n fiierele relaiilor. De exemplu,pentru afiarea listei angajatilor ordonat dup numele acestora, se introduce comanda:

    SELECT * FROM ANGAJATI ORDER BY Nume;Clauza GROUP BY se folosete pentru gruparea rezultatelor funciilor agregat

    (totalizatoare) n funcie de valoarea uneia sau mai multor coloane.

    Pentru aceasta, n instruciunea SELECT se introduce clauza GROUP BY, urmatde numele coloanei (sau al coloanelor) dup valoarea crora se dorete gruparearezultatelor funciei agregat. n acest caz, funcia agregat se aplic separat acelor linii careau aceeai valoare a atributelor specificate de clauza GROUP BY.

    De exemplu, salariul mediu calculat separat pe grupuri de angajati, fiecare grupfiind compus din liniile care au aceeai valoare a atributului Functie, se obine cuurmtoarea instruciune SQL:

    SELECT AVG (Salariu) FROM ANGAJATI GROUP BY Functie;Clauza HAVING. Funciile agregat (totalizatoare) nu pot fi utilizate n clauza

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    26/30

    WHERE; de exemplu instruciunea urmtoare (prin care se cere lista angajailor cusalariu mai mare dect salariul mediu) este eronat:

    SELECT Nume,Prenume FROM ANGAJATI WHERE Salariu >= AVG(Salariu);Pentru folosirea unei funcii agregat ntr-o condiie de selecie se folosete clauza

    HAVING. Clauza HAVING este asemntoare clauzei WHERE, adic introduce ocondiie pe care trebuie s o ndeplineasca tuplurile rezultat, i, n plus, permite utilizarea

    funciilor agregat n expresia conditional. Exemplul de mai sus se scrie corect astfel:SELECT Nume,PrenumeFROM ANGAJATI HAVING Salariu >= AVG (Salariu);Instruciuni SELECT imbricate. Subinterogri. Instruciunile SELECT se pot

    imbrica pe mai multe niveluri, o instruciune avnd ca argument rezultatul unei alteiinstruciuni, numit subinterogare. Exist mai multe moduri de construire asubinterogrilor, una din formele cele mai frecvent folosite fiind urmtoarea:

    SELECT lista_atribute FROM tabel1WHERE colx IN (SELECT colx FROM tabel2 WHERE conditie);ntr-o astfel de construcie valoarea de comparaie (pentru operatorul de

    comparaie IN) din clauza WHERE a primei instruciuni SELECT se definete printr-osubinterogare care const dintr-o alt instruciune SELECT. Alte forme de construire asubinterogrilor vor fi prezentate n capitolele urmtoare.

    Crearea uniunilor cu SQL.

    Se utilizeaz pentru situaiile n care datel se selecteaz din maimulte tabele. Se utilizeaz structura JOIN ON care specific tabelul caretrebuie unit i relaia dintre cmpuri.

    Sintaxa:SELECT [ALL|DISTINCT|DISTINCTROW]From nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura

    ON criteriu_legatura[ nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura

    ON criteriu_legatura ][WHERE conditie][ORDER BY criteriu]unde: nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura

    specific denumirea tabelului cuplat cu celelalte tabele. Fiecare tabelcare particip ntr-o uniune trebuie introdus naintea clauzei JOIN. INNERdefinete o uniune intern, LEFT, RIGHT definesc uniuni externe.

    ON criteriu_legatura definete cele dou cmpuri care trebuieunite i relaia dintre ele.

    Exemplu: Testai efectul instruciunii:

    SELECT nume, studenti.marca, nota_fin, cod_discFROM studenti INNER JOIN [note] ON studenti.marca=note.marcaWHERE (studenti.cod_spec="CE") and (note.cod_disc=1407)ORDER BY studenti.nume;

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    27/30

    Tipurile de unire 1. (Join): Const n includerea unui rnd pentru fiecareposibila perechede randuri din cele doua tabele.

    Varianta 1.

    SELECT * FROM Table1, Table2

    Example:

    select * from Table1, Table2Table1 Table2 c1 c2 c3 c4

    c1 c2 c3 c4 a 1 c 3a 1 c 3 a 1 d 4 b 2 d 4 b 2 c 3

    b 2 d 4

    2) Inner join: Se adauga o conditie de potrivire intre cele doua tabele:se selecteaz doar aceleinregistrari care au in comun aceeasi valoare intr+o anumite coloana. De obicei se verifica o conditiedintre coloane comune celor doua tabele.

    Syntax:

    SELECT * FROM Table1 INNER JOIN Table2 on condition

    SELECT * FROM Table1 INNER JOIN Table2 on Table1.c2=Table2.c4

    Select Grupe.Denumire, Studenti.Nume, Studenti.prenume From Grupe INNER Join Studenti

    On Grupe.codg=Studenti.codg

    Example:

    select * from Table1 innerjoin Table2 on c2=c4

    Table1 Table2c1 c2 c3 c4 c1 c2 c3 c4a 1 c 1 a 1 c 1

    b 2 d 2 b 2 d 2

    3) Outer Join

    a) Left Outer Join: Include toate nregistrrile din tabelul specificat n parteastanga a clauzei LEFT OUTER, chiar daca nu se potrivesc.

    Syntax:

    SELECT * FROM Table1 LEFT JOIN Table2 on condition

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    28/30

    Example:

    select * from Table1 left joinTable2 on c2=c4

    Table1 Table2c1 c2 c3 c4 c1 c2 c3 c4a 1 c 1 a 1 c 1

    b 2 d 2 b 2 d 2

    e 3 f 4 e 3 null nullb) Right Outer Join: A right outer join is the reverse of a left outer join. All rows from the

    right table are returned. Null values are returned for the left table any time a right table rowhas no matching row in the left table

    select * from Table1 left joinTable2 on c2=c4

    Table1 Table2 c1 c2 c3 c4 c1 c2 c3 c4a 1 c 1 a 1 c 1

    b 2 d 2 b 2 d 2e 3 f 4 null null f 4

    Example: Retrieve all the titlesSELECT Titles.TitleID, Titles.Name AS Title, Genres.Name AS Genre, Titles.PathFROM

    GenresINNER JOIN Titles

    ON Genres.GenreID=Titles.GenreID

    Example: Select all titles and the play list they appear in (if a title does not appear in a play list, select null inthe PlaylistID column

    SELECT Titles.TitleID, Titles.Name, PlaylistItems.PlayListIDFROM

    Titles

    INNER JOIN PlaylistItemsON Titles.TitleID = PlaylistItems.TitleID

    Using Where

    Allows to specify conditions to use in order to filter the data.

    Example: Retrieve all the titles of an author

    SELECT Titles.TitleID, Titles.Name, Titles.PathFROM

    TitlesINNER JOIN TitleAuthors

    ON Titles.TitleID=TitleAuthors.TitleIDINNER JOIN Authors

    ON Authors.AuthorID=TitleAuthors.AuthorIDWHERE (((Authors.Name)=Author));

    Using Group By

    Combines records with identical values in the specified field list into a single record. A summary value iscreated for each record if you include an SQL aggregate function, such as Sum or Count

    Syntax

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    29/30

    SELECT select_listFROM table_listWHERE conditionGROUP BY column_list

    4.2.5.2 INSTRUCIUNEA INSERT

    Instruciunea INSERT se folosete pentru introducerea datelor n tabele i areurmtoarea sintax: INSERT INTOnume_tabel(col1,col2,...coln)VALUES(val1,val2,...valn);ntre valori i numele de coloane trebuie s existe o coresponden unu la unu.

    Valorile din list pot fi constante (literale) sau expresii. De exemplu, introducerea unei liniin tabelul SECTII se poate face cu instruciunea:

    INSERT INTO SECTII (IdSectie,Nume,Buget)VALUES (1,Productie,4000000);

    Lista de coloane poate s lipseasc dac se introduc valori n toate coloaneletabelului, dar n aceast situatie ordinea valorilor introduse trebuie s respecte ordineaatributelor. Aceasta ordine provine din ordinea de definire a atributelor prin instruciunea

    CREATE TABLE, precum i din operaiile ulterioare de alterare a tabelului respectiv, ise poate afla printr-o instruciune DESCRIBE nume_tabel. De exemplu, introducerea uneilinii n tabelul ANGAJATI(IdAngajat,Nume,Prenume,DataNasterii,Adresa,Salariu), sepoate face cu instruciunea:

    INSERT INTO ANGAJATIVALUES(100,Mihailescu, Mihai,1950-04-05,Craiova,3000);2.2.5.3

    INSTRUCIUNEA UPDATEInstruciunea UPDATE permite actualizarea valorilor coloanelor (atributelor) din

    una sau mai multe linii ale unui tabel. Aceasta are sintaxa:UPDATE nume_tabel SET col1 = expr1 [,...n] [WHERE conditie];Clauza WHERE impune ca actualizarea valorilor coloanelor s se efectueze numai

    asupra acelor linii care ndeplinesc condiia dat. Dac este omis clauza WHERE, vor fimodificate valorile coloanelor din toate liniile tabelului.De exemplu, pentru a modifica liniaintrodus mai sus n tabelul ANGAJATI, se poate introduce instruciunea:

    UPDATE ANGAJATISET Adresa = Bucuresti,Str. Victoriei WHERE IdAngajat = 100;Update Rezultate SET Notafin = IIF()

    4.2.5.4 INSTRUCIUNEA DELETEInstruciunea DELETE permite tergerea uneia sau mai multor linii dintr-untabel i are forma: DELETE FROM nume_tabel [WHERE conditie];

    Din tabel se terg acele linii care ndeplinesc condiia dat n clauza WHERE.Dac este omis clauza WHERE, vor fi sterse toate liniile din tabel.

    De exemplu, pentru a sterge din tabelul ANGAJATI toi angajatii care au numeleIonescu, se introduce instruciunea:

    DELETE FROM ANGAJATI WHERE Nume =Ionescu;n aceast seciune au fost prezentate consideraii generale asupra comenzilor de

    definire i manipulare a datelor prevzute n standardul SQL2. Alte comenzi SQL vor fiprezentate pe parcursul seciunilor i a capitolelor urmtoare, o dat cu introducereanoiunilor la care se refer.

  • 8/8/2019 Curs 4-Baze de Date-Interogarea Bazelor de Date

    30/30

    In plus, exist numeroase extensii, opiuni i detalii ale comenzilor, uneledepinznd de implementarea limbajului n fiecare tip i versiune de SGBD. Pentru acesteaspecte este necesar s fie consultat documentaia sistemului respect