Sunteți pe pagina 1din 12

2.

3 Exemplu INNER JOIN


TipCredit
CodTipCredit 1 2 TipCredit Divers Extra BCR Divers BCR CodMoneda 1 1

ContractCredit
NrContractCredit 1 SumaAcordata 7.000,00 CodTipCredit 1

2
3 4 5 6

12.000,00
9.000,00 20.000,00 13.400,00 10.000,00

2
1 2 3 3

3
4

MOTOR
PRACTIC

2
2

INNER JOIN INTRE TipCredit si ContractCredit


TipCredit.CodTipCredit 1 1 TipCredit Divers Extra BCR Divers Extra BCR CodMoneda 1 1 NrContractCredit 1 3 SumaAcordata 7.000,00 9.000,00 ContractCredit.CodTipCredit 1 1

2
2 3 3

Divers BCR
Divers BCR MOTOR MOTOR

1
1 2 2

2
4 5 6

12.000,00
20.000,00 13.400,00 10.000,00

2
2 3 3

Cererea SQL prin care se realizeaz compunerea datelor din cele dou tabele este: SELECT * FROM TipCredit INNER JOIN ContractCredit ON TipCredit.CodTipCredit=ContractCredit.CodTipCredit nregistrrile din tabelul rezultat se obin prin combinarea fiecrei nregistrri din TipCredit cu fiecare nregistrare din ContractCredit care are acelai CodTipCredit

2.4 Exemplu LEFT/RIGHT JOIN


TipCredit
CodTipCredit 1 2 TipCredit Divers Extra BCR Divers BCR CodMoneda 1 1

ContractCredit
NrContractCredit 1 SumaAcordata 7.000,00 CodTipCredit 1

2
3 4

12.000,00
9.000,00 20.000,00

2
1 2

3
4

MOTOR
PRACTIC

2
2

LEFT JOIN INTRE TipCredit si ContractCredit sau RIGHT JOIN NTRE ContractCredit i TipCredit
TipCredit.CodTipCredit 1 1 TipCredit Divers Extra BCR Divers Extra BCR CodMoneda 1 1 NrContractCredit 1 3 SumaAcordata 7.000,00 9.000,00 ContractCredit.CodTipCredit 1 1

2
2 3 4

Divers BCR
Divers BCR MOTOR PRACTIC

1
1 2 2

2
4

12.000,00
20.000,00

2
2

Cererea SQL prin care se realizeaz compunerea datelor din cele dou tabele este: SELECT * FROM TipCredit LEFT JOIN ContractCredit ON TipCredit.CodTipCredit=ContractCredit.CodTipCredit nregistrrile din tabelul rezultat se obin prin combinarea fiecrei nregistrri din TipCredit cu fiecare nregistrare din ContractCredit care are acelai CodTipCredit. n plus n tabelul rezultat apar i nregistrrile din tabelul din plasat n stnga (TipCredit LEFT JOIN ContractCredit) care nu au o nregistrare corespondent n dreapta. Acelai rezultat se obine cu ContractCredit RIGHT JOIN TipCredit.

2.5 Compunere date fr a utiliza INNER JOIN


TipCredit
CodTipCredit 1 2 TipCredit Divers Extra BCR Divers BCR CodMoneda 1 1

ContractCredit
NrContractCredit 1 SumaAcordata 7.000,00 CodTipCredit 1

2
3 4 5 6

12.000,00
9.000,00 20.000,00 13.400,00 10.000,00

2
1 2 3 3

3
4

MOTOR
PRACTIC

2
2

INNER JOIN INTRE TipCredit si ContractCredit


TipCredit.CodTipCredit 1 1 TipCredit Divers Extra BCR Divers Extra BCR CodMoneda 1 1 NrContractCredit 1 3 SumaAcordata 7.000,00 9.000,00 ContractCredit.CodTipCredit 1 1

2
2 3 3

Divers BCR
Divers BCR MOTOR MOTOR

1
1 2 2

2
4 5 6

12.000,00
20.000,00 13.400,00 10.000,00

2
2 3 3

Cererea SQL prin care se realizeaz compunerea datelor din cele dou tabele este: SELECT * FROM TipCredit, ContractCredit WHERE TipCredit.CodTipCredit=ContractCredit.CodTipCredit nirarea tabelelor dup clauza FROM separate prin virgul are ca efect obinerea produsului cartezian dintre cele dou tabele (practic se obine un tabel n care fiecare nregistrare din tabelul TipCredit se combin cu fiecare nregistrare din tabelul ContractCredit- 6*4=24 nregistrri). Ulterior prin clauza WHERE se rein doar nregistrrile n care valorile de pe cmpurile CodTipCredit coincid

2.6 Compunerea datelor din mai mult de dou tabele


Cererea SQL prin care se realizeaz compunerea datelor din cele trei tabele este: SELECT * FROM (TipCredit INNER JOIN ContractCredit ON TipCredit.CodTipCredit=ContractCredit.CodTipCredit) INNER JOIN Moneda ON Moneda.CodMoneda=TipCredit.CodMoneda; Sau SELECT * FROM Moneda INNER JOIN (TipCredit INNER JOIN ContractCredit ON TipCredit.CodTipCredit=ContractCredit.CodTipCredit) ON Moneda.CodMoneda=TipCredit.CodMoneda Rezultatele obinute de cele dou cereri sunt asemntoare diferind doar ordinea coloanelor rezultate.

Query1
TipCredit.Cod TipCredit 1 2 1 2 3 3 TipCredit Divers Extra BCR Divers BCR Divers Extra BCR Divers BCR MOTOR MOTOR TipCredit.Cod Moneda 1 1 1 1 2 2 NrContractCre dit 1 2 3 4 5 6 SumaAcordata 7.000,00 12.000,00 9.000,00 20.000,00 13.400,00 10.000,00 ContractCredit .CodTipCredit 1 2 1 2 3 3 Moneda.CodM oneda 1 1 1 1 2 2 Moneda RON RON RON RON EURO EURO

2.7 Utilizarea de ALIAS-uri n frazele SQL

Alias-un nume ce poate fi atribuit unui tabel sau unei coloane Exemplu utilizare aliasuri pentru coloane
SELECT Clienti.CNP as [Cod Numeric Personal], Mid(CNP,2,2) as [Anul nasterii] FROM Clienti

Exemplu utilizare aliasuri pentru tabel


SELECT C.CNP as [Cod Numeric Personal], Mid(CNP,2,2) as [Anul nasterii] FROM Clienti AS C
Rezultat interogare
Cod Numeric Personal 1831213456745 2790902446677 1880429334455 2771203093392 Anul nasterii 83 79 88 77

2.8 Utilizarea funciilor agregat pentru centralizarea datelor fr a recurge la grupri Exemplu: S se determine numrul de contracte ncheiate n RON i valoarea total a acestora
SELECT count(*) as [Numar de contracte], SUM(SumaAcordata) as [Valoare totala] FROM (TipCredit INNER JOIN ContractCredit ON TipCredit.CodTipCredit=ContractCredit.CodTipCredit) INNER JOIN Moneda ON Moneda.CodMoneda=TipCredit.CodMoneda WHERE Moneda =RON Mod de funcionare: Clauza FROM compune datele din cele trei tabele, rezultatul fiind tabelul Query1 de mai jos. Clauza WHERE filtreaz liniile tabelului Query1 reinndu-le doar pe cele pe care moneda este RON Count(*) numr liniile rezultate n urma filtrrii (un contract pe linie) SUM(SumaAcordata) returneaz totalul pe coloana SumaAcordat doar pentru liniile rezultate n urma filtrrii

Query1 TipCredit.CodTip Credit 1 2 1 2 3 3 TipCredit Divers Extra BCR Divers BCR Divers Extra BCR Divers BCR MOTOR MOTOR TipCredit.CodMo neda 1 1 1 1 2 2 NrContractCredit 1 2 3 4 5 6 SumaAcordata 7.000,00 12.000,00 9.000,00 20.000,00 13.400,00 10.000,00 ContractCredit.Co dTipCredit 1 2 1 2 3 3 Moneda.CodMone da 1 1 1 1 2 2 Moneda RON RON RON RON EURO EURO

2.9 Utilizarea funciilor agregat pentru centralizarea datelor cu grupri Exemplu: S se determine numrul de contracte i valoarea total a acestora pe fiecare tip de credit. Se vor lua n calcul numai contractele n RON i se vor afia doar acele tipuri de credit pentru care s-au ncheiat cel puin dou contracte i valoarea medie a contractelor ncheiate este mai mare de 10.000 RON. Rezultatele vor fi ordonate descresctor dup valoarea total a contractelor ncheiate.
SELECT TipCredit, COUNT(*) as [Numar de contracte], SUM(SumaAcordata) as [Valoare totala] FROM (TipCredit INNER JOIN ContractCredit ON TipCredit.CodTipCredit=ContractCredit.CodTipCredit) INNER JOIN Moneda ON Moneda.CodMoneda=TipCredit.CodMoneda WHERE Moneda =RON GROUP BY TipCredit.CodTipCredit, TipCredit HAVING COUNT(*)>=2 AND AVG(SumaAcordata)>10000 ORDER BY SUM(SumaAcordata) DESC

2.9 Utilizarea funciilor agregat pentru centralizarea datelor cu grupri


Mod de funcionare: Clauza FROM compune datele din cele trei tabele, rezultatul fiind tabelul Query1 de mai jos. Clauza WHERE filtreaz liniile tabelului Query1 reinndu-le doar pe cele pe care moneda este RON(trebuie remarcat faptul c celelalte restricii nu pot fi precizate n acest moment deoarece numrul de contracte i valoarea medie a acestora pe fiecare tip de credit nu disponibile ca valori n tabelul rezultat)

Query1 TipCredit.CodTip Credit 1 2 1 2 3 3 TipCredit Divers Extra BCR Divers BCR Divers Extra BCR Divers BCR MOTOR MOTOR TipCredit.CodMo neda 1 1 1 1 2 2 NrContractCredit 1 2 3 4 5 6 SumaAcordata 7.000,00 12.000,00 9.000,00 20.000,00 13.400,00 10.000,00 ContractCredit.Co dTipCredit 1 2 1 2 3 3 Moneda.CodMone da 1 1 1 1 2 2 Moneda RON RON RON RON EURO EURO

2.9 Utilizarea funciilor agregat pentru centralizarea datelor cu grupri


Mod de funcionare: Clauza GROUP BY realizeaz gruparea nregistrrilor rmase n urma filtrrii cu WHERE dup valorile cmpurilor CodTipCredit i TipCredit. Rezult n cazul de fa dou grupuri de nregistrri: un grup avnd CodTipCredit 1 i TipCredit Divers BCR un grup avnd CodTipCredit 2 i TipCredit Divers Extra BCR Pentru obinerea grupurilor respective era suficient utilizarea doar a cmpului CodTipCredit drept criteriu de grupare dar, deoarece se dorete afiarea cmpului TipCredit, se prefer utilizarea acestui ca element suplimentar de grupare ntruct nu se modific structura grupurilor rezultate i, pe de alt parte, cmpurile care apar n clauza SELECT sunt doar cmpuri pe care se utilizeaz o funcie agregat sau sunt utilizate cu GROUP BY. Funciile agregat utilizate acioneaz acum asupra fiecruia din grupurile constituite. Se determin astfel numrul de contracte ncheiate, valoarea total i valoarea medie a contractelor ncheiate pe fiecare tip de credit. Dintre acestea doar valoarea total i numrul total de contracte sunt afiate (SELECT COUNT(*) as [Numar de contracte], SUM(SumaAcordata) as [Valoare totala]), valoarea medie fiind utilizat n clauza de restricie. Rezultatul obinut n urma aplicrii clauzelor de mai sus este prezentat n tabelul Query1 dup GROUP BY de mai jos. Se remarc faptul c n acest moment se pot preciza restriciile referitoare la numrul de contracte ncheiate i valoarea medie. Aceste restricii se precizeaz utiliznd clauza HAVING.
Query1 TipCredit.CodTip Credit TipCredit 2 Divers BCR TipCredit.CodMo neda 1 NrContractCredit 2 SumaAcordata 12.000,00 ContractCredit.Co dTipCredit 2 Moneda.CodMone da Moneda

1 RON

2 Divers BCR
1 Divers Extra BCR 1 Divers Extra BCR

1
1 1

4
1 3

20.000,00
7.000,00 9.000,00

2
1 1

1 RON
1 RON 1 RON

Query1 dup GROUP BY TipCredit Divers Extra BCR Divers BCR Numar de contracte 2 2 Valoare totala 16.000,00 lei 32.000,00 lei Valoare medie 8.000,00 lei 16.000,00 lei

2.9 Utilizarea funciilor agregat pentru centralizarea datelor cu grupri


Mod de funcionare: n urma restriciilor HAVING COUNT(*)>=2 AND AVG(SumaAcordata)>10000 este eliminat prima linie din tabelul Query1 dup GROUP BY deoarece nu are media peste 10000. Clauza ORDER BY acioneaz asemeni clauzei HAVING, pe ceea ce rezult n urma utilizrii clauzei GROUP BY avnd rolul de a ordona cresctor (ASC) sau descresctor (DESC) rezultatele finale. n cazul de fa se realizeaz ordonarea descresctoare dup valoarea total a contractelor ncheiate (operaie ale crei rezultate nu sunt foarte evidente deoarece rezultatul obinut n urma filtrrii este format dintr-o singur linie)

Query1 dup GROUP BY TipCredit Divers Extra BCR Divers BCR Numar de contracte 2 2 Valoare totala 16.000,00 lei 32.000,00 lei Valoare medie 8.000,00 lei 16.000,00 lei

2.10 Subinterogri
O subinterogare reprezint un bloc de cerere plasat n cadrul unei alte fraze SQL care valorific sub forma unor argumente rezultatul produs de subinterogare. Un exemplu de cerere SQL care implic o subinterogare este urmtorul:
S se determine numrul de contracte i valoarea total a acestora pe fiecare tip de credit. Se vor lua n calcul numai contractele n RON i se vor afia doar acele tipuri de credit la care valoarea medie a contractelor ncheiate este mai mare dect valoarea medie a contractelor ncheiate n RON n anul curent.

Partea scris difereniat n cerina de mai sus impune utilizarea unei subinterogri.