Upload
lau2491917665276
View
312
Download
1
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