35
Baze de date – Microsoft Access Baze de date Curs 7 Limbajul SQL (III)

Curs 7 Fabbv

Embed Size (px)

DESCRIPTION

baze de date

Citation preview

  • Baze de date Microsoft Access

    Baze de dateCurs 7

    Limbajul SQL (III)

  • XPCurs 8 - coninut

    Limbajul SQL : subinterogri, algebra relaional.

    2

  • XPSubinterogri

    Microsoft Office Access 2010 3

    O subinterogare sau o interogare imbricat presupune ca setul de rezultate obinut de la o interogare s constituie argument pentru o alt (interogare n interogare).

  • XPSQL Subinterogri (Exemple)

    Microsoft Office Access 2010 4

    Produs (CodProdus, Denumire, UnitateMasura, Categorie)ContinutComanda (NrComanda,CodProdus, Cantitate, Pret)Comanda(NrComanda, DataComanda, DataLivrare)

    1. S se afieze produsele care nu au fostcomandate.

    SELECT *FROM ProdusWHERE CodProdus NOT IN

    (SELECT CodProdusFROM ContinutComanda);

  • XPSQL Subinterogri (Exemple)

    Microsoft Office Access 2010 5

    ContinutComanda (NrComanda,CodProdus, Cantitate, Pret)Comanda(NrComanda, DataComanda, DataLivrare)2. S se afieze produsele pentru care numrul comenzilor

    n 2005 a fost mai mare dect numrul total alcomenzilor din anul 2004.SELECT CodProdus, COUNT(Comanda.NrComanda)FROM ContinutComanda INNER JOIN Comanda ON

    ContinutComanda.NrComanda= Comanda.NrComandaWHERE YEAR(DataComanda)=2005GROUP BY CodProdusHAVING COUNT(Comanda.NrComanda) >

    (SELECT COUNT(Comanda.NrComanda)FROM ContinutComanda INNER JOIN Comanda ON ContinutComanda.NrComanda= Comanda.NrComandaWHERE YEAR(DataComanda)=2004GROUP BY CodProdus);

  • XPSQL Subinterogri (Exemple)

    Microsoft Office Access 2010 6

    Comparaia returneaz TRUEdac se verific pentru fiecaredin valorile din coloana returnatde subinterogare.

    1. S se afieze chitanele cu cele mai mari sume.

    SELECT NrChitanta FROM ChitantaWHERE SumaPlatita>= ALL

    (SELECT SumaPlatitaFROM Chitanta);

    Prin ALL are n vedere compararea valorii de ieire asubinterogrii cu fiecare nregistrare din interogarea extern.

  • XPSQL Subinterogri (Exemple)

    Microsoft Office Access 2010 7

    Comparaia returneaz TRUE dac se verific pentru cel puin una din valorile din coloana

    returnat de subinterogare.

    1. S se afieze comenzile ce au aceleai date ca ichitanele.

    SELECT NrComanda FROM ComandaWHERE DataComanda= ANY

    (SELECT DataChitantaFROM Chitanta);

    ANY/SOME: are n vedere compararea valorii de ieire a subinterogrii cu fiecare nregistrare din interogarea extern.

  • XPSQL Subinterogri (Exemple)

    Microsoft Office Access 2010 8

    EXISTS: folosete subinterogarea ca pe o condiie, analiznd setul de rezultate al acesteia i returnnd valoarea False dac nu exist nici o ieire

    Se poate astfel verifica existena anumitor nregistrri i controla ansamblul rspunsurilor date de interogare.

    1. S se afieze produsele care au fost comandate.

    SELECT * FROM ProdusWHERE EXISTS (SELECT * FROM ContinutComanda

    WHERE ContinutComanda.CodProdus=Produs.CodProdus ) ;

  • XPSQL: CROSSTAB

    Microsoft Office Access 2007 9

    TRANSFORM funcie agregat AS aliasInstruciune de selecie cu grupare pe linie

    PIVOT cmp antet coloan ;

    Instruciunea de selecie servete pentru a specifica antetele de rnd ale rezultatelor interogrii;

    Cmpul antet coloan constituie cmpul sau expresia ce se utilizeaz n definirea antetelor de coloane, pentru setul de rezultate al interogrii.

    Funcia agregat opereaz asupra nregistrrilor, prin definirea calculului aplicat elementelor de grup;

  • XPSQL: CROSSTAB

    Microsoft Office Access 2007 10

    TRANSFORM AVG(Pret) AS PretMediu

    SELECT Denumire

    FROM Comanda , ContinutComanda, Produs

    WHERE Produs.CodProdus = ContinutComanda.CodProdus AND

    Comanda.NrComanda = ContinutComanda.NrComanda

    GROUP BY Denumire

    PIVOT YEAR(DataComanda) ;

  • XPOperatorul UNION

    Microsoft Office Access 2007 11

    Dac se dorete s se vizualizeze rezultatele mai multorinterogri SELECT n acelai timp, prin combinarea ieirilorlor, poate fi utilizat facilitatea UNION a limbajului deinterogare SQL.

    SELECT NrChitanta, DataChitanta, Sumaplatita, "Chitanta" AS Tip

    FROM ChitantaUNIONSELECT NrOP, DataOP, SUMA,

    "OP" AS TipFROM OrdinePlata;

  • XPAlgebra relaional

    Algebra relaional cuprinde un ansamblu de operatori ce opereaz pe relaii (tabele surs) i produc noi relaii (tabele rezultat).

    Algebra relaional este un subset al algebrei generice pe mulimi.

    Microsoft Office Access 2010 12

  • XPConcepte ale algebrei relationale

    Microsoft Office Access 201013

    Cardinalitatea tabelei=

    Numrul de nregistrri (tupluri) dintr-un tabel

    Gradul tabelei=

    Numrul de coloane (atribute) dintr-un tabel

    Cardinalitate = 3

    Grad = 3

  • XPOperatori relaionali.

    operatori generali ce opereaz n general asupra oricrei categorii de mulimi Reuniune

    Intersecie

    Diferen

    Produs cartezian

    operatori specifici operaiilor pe relaii. Selecie

    Proiecie

    Compunere

    Diviziune

    Microsoft Office Access 2010 14

  • XP

    O alt clasificare a operatorilor se bazeaz pe numrul de tabele cerute de acel operator.

    Operatorii binari (care se aplic pentru cel puin dou tabele) : Reuniune Intersecie Diferen Produs cartezian Compunere Diviziune

    Operatori unari (pentru a cror aplicare este nevoie de cel puin o tabel): Selecie Proiecie

    Microsoft Office Access 2010 15

  • XPReuniunea Reuniunea a dou relaii compatibile (ce au aceeai

    structur) are ca rezultat o relaie ce conine totalitatea tuplurilor celor dou, excluzndu-se tuplurile comune (identice).

    Numrul de nregistrri din tabela rezultat (cardinalitatea tabelei) a reuniunii este mai mic sau cel puin egal cu suma numerelor de nregistrri din fiecare tabel.

    Dac nu exist nregistrri comune (identice) n cele dou tabele atunci cardinalitatea tabelei rezultat al reuniunii este egal cu suma cardinalitilor celor dou tabele.

    Gradul relaiei (numrul de coloane) rezultat este egal cu gradul celor dou relaii.

    Microsoft Office Access 2010 16

  • XPReuniunea

    Microsoft Office Access 2010 17

    SELECT CodStudent, Nume, Oras

    FROM Studenti

    UNION

    SELECT CodStudent, Nume, Oras

    FROM Doctoranzi

  • XPDiferena

    Microsoft Office Access 2010 18

    Prin diferena dintre relaia R1 i relaia R2, careeste compatibil cu R1, se obine tot o relaie R3 ceconine tuplurile din R1 care nu se regsesc n R2.Gradul relaiei R3 este egal cu gradul relaiei R1 irespectiv R2.

    SELECT * FROM Studenti

    WHERE CodStudent NOT IN

    (SELECT CodStudent FROM

    Doctoranzi)

  • XPProdusul cartezian

    Produsul cartezian a dou relaii R1 i R2 este relaia R3 ce conine toate perechile de tupluri din R1 i R2.

    Cardinalitatea relaiei R3 este egal cu produsul cardinalitilor relaiilor R1 i R2.

    Gradul relaiei R3 este egal cu suma gradelor relaiilor R1 i R2.

    Microsoft Office Access 2007 19

  • XPRealizarea operatorilor relaionali

    n SQL Produsul cartezian

    Microsoft Office Access 2007 20

    Societate

    Broker

    SELECT * FROM Broker, Societate

    Broker X Client

  • XPSelecia

    Microsoft Office Access 2007 21

    Selecia aplicat unei tabele R1 genereaz o nou tabel R2 avnd aceeai structur ca i R1, dar care conine doar tuplurile ce ndeplinesc condiia specificat de selecie.Cardinalitatea relaiei rezultat R2 este mai mic sau egal cu cardinalitatea relaiei R1, n timp ce gradul relaiei este egal cu al relaiei surs.

    Notaia specific pentru selecie este R2 = SELECTC (R1), unde

    R1 este tabelul (relaia) de baz, asupra creia se aplica seleciaC este condiia ce se refer la atributele lui R2R2 este tabelul (relaia) rezultat, alctuit din tuplurile lui R1 care ndeplinesc condiia C;

  • XPRealizarea operatorilor relaionali

    n SQL Selecia

    Microsoft Office Access 2010 22

    Societate

    SELECT * FROM Societate WHERE LocalitateSocietate="Bucuresti"

    SELECT LocalitateSocietate=Bucuresti (Societate)

  • XPProiecia

    Microsoft Office Access 2010 23

    Proiecia este o operaie unar ce returneaz tuplurile ceconin un subset al atributelor tabelei surs. Proieciaaplicat asupra unei tabele R1 genereaz o tabel R2 ce vaavea gradul mai mic dect R1 dar cu acelai numr detupluri (cardinalitate).

    Notaia specific pentru proiecie este

    R2=PROIECTIEL (R2), unde:R1 este tabelul (relaia) surs asupra creia se aplic proiecia ;L este subsetul de atribute (dintre atributele lui R2) ;

    R2 este tabelul (relaia) rezultat, alctuit din tuplurile lui R2 cuprinznd doar atributele din lista L;

  • XPRealizarea operatorilor relaionali

    n SQL Proiecia

    Microsoft Office Access 2010 24

    SELECT Oras

    FROM Studenti

  • XPIntersecia

    Microsoft Office Access 2007 25

    Intersecia a dou relaii compatibile (avnd aceeaistructur) este tot o relaie ce conine doarnregistrrile comune (identice) pentru cele doutabele. Cardinalitatea relaiei obinute n urmainterseciei a dou tabele este mai mic sau celpuin egal cu minimul cardinalitilor celor doutabele. Gradul relaiei R3 este egal cu gradul relaieiR1 i respectiv al relaiei R2.

    SELECT *

    FROM Studenti

    WHERE CodStudent

    IN (SELECT CodStudent

    FROM Doctoranzi)

  • XPCompunerea

    Microsoft Office Access 2007 26

    Compunerea a dou tabele R1 i R2 este o tabel R3 cecombin tuplurile celor dou tabele surs, fiind alese doaracelea care ndeplinesc o anumit condiie specificat n cadrulcompunerii. Gradul relaiei obinute ca urmare a compunerii adou relaii este egal cu suma gradelor relaiilor surs.

    Notaia specific pentru compunere este R3=R1 JOINC R2, unde

    R1 i R2 sunt tabelele (relaiile) de baz asupra crora se aplic compunerea;C este condiia care poate s conin operatori logici i aritmetici precum i agregri de date.R3 este tabelul (relaia) rezultat, alctuit din tuplurile produsului cartezian R2 X R3 care ndeplinesc condiia C.

  • XPCompunerea

    Microsoft Office Access 2007 27

    SELECT NrCredit, DataCredit, valoareCredit,

    Perioada_luni, Min_durata, Max_durata, TipCredit

    FROM Credit, TipCredit

    WHERE Perioada_luni>=Min_durata AND

    Perioada_luni

  • XPEchicompunerea

    Microsoft Office Access 2007 28

    Este compunerea pentru care condiia este alctuit numai dinegaliti, putnd conine una sau mai multe egaliti. n cazulechicompunerii, n tabela rezultat apar dou cmpuri ce au valoriidentice. Gradul relaiei obinute ca rezultat al echicompuneriieste egal cu suma gradelor celor doua relaii surs.Cardinalitatea (numrul de tupluri ale relaiei rezultat) este maimic sau egal cu produsul cardinalitilor tabelelor surs.

  • XPCompunerea natural

    Microsoft Office Access 2010 29

    Compunerea natural (figura 1.23) este echicompunerea a doutabele, pentru care exist cel puin cte cmp avnd acelainume i tip, n care din rezultat se elimin cmpurile identice.Gradul relaiei obinute ca rezultat al compunerii naturale estemai mic dect suma gradelor celor doua relaii surs, deoarecesunt eliminate cmpurile identice. Cardinalitatea ce reprezintnumrul de tupluri ale relaiei rezultat este mai mic sau egaldect produsul cardinalitilor tabelelor surs.

  • XPCompunerea extern

    Microsoft Office Access 2010 30

    Compunerea extern este o echicompunere dar care, spredeosebire de aceasta, afieaz i tuplurile care nu aucorespondent n cadrul celor dou tabele surs

    a 1b 3a 2

    A B

    R1

    x 1z 2

    C DR2

    x 6

    OUTER JOIN B=Da 1b 3a 2

    A B

    R1 OUTER JOIN B=D R2

    x 1NULL NULL

    C D

    z 2NULL NULL x 6

    =

    Cursuri LEFT JOIN InscrieriCurs

    CursuriInscrieriCurs

    Cursuri RIGHT JOIN InscrieriCurs

    Cursuri

    InscrieriCurs

  • XPCompunerea extern

    Microsoft Office Access 2010 31

    Compunerea extern este o echicompunere dar care, spredeosebire de aceasta, afieaz i tuplurile care nu aucorespondent n cadrul celor dou tabele surs

    a 1b 3a 2

    A B

    R1

    x 1z 2

    C DR2

    x 6

    OUTER JOIN B=Da 1b 3a 2

    A B

    R1 OUTER JOIN B=D R2

    x 1NULL NULL

    C D

    z 2NULL NULL x 6

    =

    Cursuri LEFT JOIN InscrieriCurs

    CursuriInscrieriCurs

    Cursuri RIGHT JOIN InscrieriCurs

    Cursuri

    InscrieriCurs

  • XPDiviziunea

    Microsoft Office Access 2010 32

    Diviziunea presupune mprirea unei tabele (R1), denumitdemprit, la o tabela denumit mpritor (R2) rezultnd o alttabela (R3) denumit ct, astfel nct orice tuplu al tabelei ct(R3) trebuie s se regseasc n cadrul tuplurilor tabeleidemprit (R1) n combinaie cu fiecare tuplu din tabelampritor (R2). Pentru a putea s aib sens diviziunea, tabelampritor (R2) trebuie s aib ca atribute un subset alatributelor tabelei demprit (R1). Gradul tabelei ct (R3) esteegal cu diferena gradelor tabelelor demprit (R1) i mpritor(R2).

    a 1b 2

    xy

    a 2d 3

    xx

    A B CR1 R2

    R1

    12

    B

    R2

    a xA C

  • XPDiviziunea

    Microsoft Office Access 2010 33

    a 1b 2

    xy

    a 2d 3

    xx

    A B C

    R1

    12

    BR2

    R1 R2=SELECT Count=2 (W)

    a xA C

    a 1 xA B C

    S=R1 JOIN R1.B=R2.B R2

    b 2 ya 2 x

    JOIN R1.B=R2.B =a xA C

    T=PROI A,C (S)

    b ya x

    R1 R2

    W=GROUP A,C,COUNT(*) (T)

    a xA C

    2Count

    b y 1

    Numarul de

    tupluri din R2

    a 1b 2

    xy

    a 2d 3

    xx

    A B C

    R1

    12

    BR2

    a 1 xA B C

    S1=SELECTB=1 (R1)

    a 1b 2

    xy

    a 2d 3

    xx

    A B C

    R1S2= SELECTB=2 (R1)

    b 2a 2

    yx

    A B C

    T1 T2=R1 R2

    a xA C

    a xA C

    T1=PROI A,C (S1)

    b yA C

    T2=PROI A,C (S2)

    a x

    Varianta 1

    Varianta 2

    a 1b 2

    xy

    a 2d 3

    xx

    A B CR1 R2

    R1

    12

    B

    R2

    a xA C

  • XPDiviziunea

    Microsoft Office Access 2010 34

    Identificarea clienii care au cumprat aciuni la ambele societi avnd codul CABU i ADME

    Tranzactie PRIOECT CodSocietate (Societate)

    PRIOECTIE CodSocietate (Societate)

    Tranzactie

    SELECT CodClientCumparator

    FROM Tranzactie, Societate

    WHERE Tranzactie.CodSocietate=Societate.CodSocietate

    GROUP BY CodClientCumparator

    HAVING Count(Tranzactie.CodSocietate)=(SELECT COUNT(CodSocietate) FROM

    Societate);

  • XPDiviziunea

    Microsoft Office Access 2010 35

    InscriereCurs

    Cursuri InscriereCurs Cursuri

    =

    Diviziunea este util pentru a se evidenia studenii care urmeaz o anumit list de cursuri