Documente Academic
Documente Profesional
Documente Cultură
a) SGBD Access 2010: SQL SELECT: WHERE LMD: III Interogri de asociere (jonciune / compunere) intern
Tabela A a1 a2 a3 a4 a5 a 6 Tabela B b1 b2 b3 b4 b5 a1 Tabela C c1 c2 c3 c4 C5 a1
Compunerile echivalente (EchiCompunerile) -> utilizeaz clauza WHERE (pt selecia nregistrrilor) asociat cu o egalitate a valorilor n cmpurile de legtur.
SELECT [domeniu] list selecie cmpuri din tabele diferite T1.a1, FROM <nume tabele> T1, T2,..... T2.a1, [WHERE <criteriu de compunere> [i de selecie] [ORDER BY <list cmpuri criterii de ordonare> {ASC/DESC}]; ......... SELECT A.a1, B.b2* B.b3 SELECT A.a1, A.a2, B.b1, C.c1, C.c3 AS Total FROM A, B, C FROM A, B WHERE A.a1=B.a1 AND A.a1=C.a1 WHERE A.a1=B.a1 AND ORDER BY C.c3; A.a5>=10000;
A compus cu B i A compus cu cu C
Exemple:
Compunerea a 2 tabele (WHERE)
SELECT Facturi.[Numar Factura], Facturi.[Data Facturii], Facturi.[Cod Fiscal],[Continut Factura].[Cod ISBN], [Continut Factura].Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] AS Valoare FROM Facturi,[Continut Factura] WHERE Facturi.[Numar Factura] = [Continut Factura].[Numar Factura];
Exemple:
Compunerea a 3 tabele (WHERE)
SELECT Facturi.[Numar Factura], Facturi.[Data Facturii], [Continut Factura].Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] AS Valoare, Clienti.[Cod Fiscal], Clienti.[Denumire Client], FROM Facturi, [Continut Factura],Clienti WHERE Facturi.[Numar Factura]=[Continut Factura].[Numar Factura] AND Clienti.[Cod Fiscal] = Facturi.[Cod Fiscal];
Tabela A a 1 a2 a3 a4
b1
b2
b3
b4
b5
a1
c1
c2
c3
c4
c5
b1
SELECT [domeniu] <list selecie cmpuri din tabele diferite> FROM <nume tabel_1> {INNER/LEFT OUTER/RIGHT OUTER } JOIN <nume tabel_2> ON <criteriu asociere>
[WHERE <criteriu de selecie> [ORDER BY <list cmpuri criterii de ordonare> {ASC/DESC}];
SELECT A.a1, A.a2, A.a5, B.b1, C.c1 FROM A INNER JOIN B (INNER JOIN C ON B.b1=C.b1) ON (A.a1=B. a1 );
b) SGBD Access 2010: SQL SELECT: JOIN O compunere intern (INNER) sau echivalent (echicompunere) este aceea n care liniile unui tabel sunt combinate cu liniile altui tabel pentru care exist egalitate ntre cmpurile de legtur (cazul 1 din Join Properties). LEFT OUTER JOIN (1n) include toate nregistrrile din tabelul A (cardinalitate 1) i numai acele nregistrri din tabelul B (cardinalitate n) pentru care valorile atributelor cheie (a1) sunt egale (cazul 2 din Join Properties).
RIGHT OUTER JOIN (1n) include toate nregistrrile din tabelul B (cardinalitate n) i numai acele nregistrri din tabelul A (cardinalitate 1) pentru care valorile atributelor cheie (a1) sunt egale (cazul 3 din Join Properties).
Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5 a1
Exemple:
Compunerea a 2 tabele (INNER)
SELECT Facturi.[Numar Factura], Facturi.[Data Facturii], Facturi.[Cod Fiscal], [Continut Factura].[Cod ISBN], [Continut Factura].Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] AS Valoare FROM Facturi INNER JOIN [Continut Factura] ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura];
Exemple:
Compunerea a 3 tabele (INNER)
SELECT Facturi.[Numar Factura], Facturi.[Data Facturii], [Continut Factura].Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] AS Valoare, Clienti.[Cod Fiscal], Clienti.[Denumire Client] FROM Clienti INNER JOIN Facturi
(INNER JOIN [Continut Factura] ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura])
Exemple:
DISCOUNT N LINIE DE FACTUR
SELECT Facturi.[Numar Factura], [Continut Factura].Cantitate, [Continut Factura]. [Pret f], [Cantitate]*[Pret f] AS Valoare,
IIf([Valoare]<5000000,0,[Valoare]*0.15) AS Reducere
FROM Facturi INNER JOIN [Continut Factura] ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura];
FACTURILE PE LUNA MARTIE 2012 SELECT facturi.nrfact, facturi.datafact, facturi.codfiscal, [continut factura].codisbn,[continut factura].cantitate, [continut factura].pretf, [continut factura].cantitate*[continut factura].pretf AS Valoare, Month([facturi.Datafact]) AS Luna, Year([facturi.Datafact]) AS Anul FROM facturi INNER JOIN [continut factura] ON facturi.nrfact=[continut factura].nrfact WHERE Month([Datafact])=3 AND Year([Datafact])=2012;
O subinterogare sau o interogare imbricat presupune ca setul de rezultate obinut de la o interogare s constituie argument pentru o alta (interogare n interogare). a) Subinterogri construite pe o singur tabel SELECT [domeniu] <list selecie cmpuri > FROM <nume tabel> [WHERE <nume_cmp> operatori [> , < , >=, <=, <> , = , IN ] (SELECT <nume_cmp> FROM <nume tabel> [WHERE <criteriu de selecie>]);
SELECT DISTINCT a1,a3,a5 FROM A WHERE a5 > (SELECT a5 FROM A WHERE a3=text);
SELECT DISTINCT [Nrcontract], codfz, DATA FROM CONTRACTE WHERE CODFZ IN (SELECT CODFZ FROM CONTRACTE WHERE ([DATA]=#4/17/2012#));
SELECT [Nrcontract], codfz, DATA FROM CONTRACTE WHERE CODFZ <> (SELECT CODFZ FROM CONTRACTE WHERE (NRCONTRACT=111));
Care sunt elementele a1 (facturile) emise n aceeai zi cu elementul a1 (factura) 1120? SELECT a1 FROM A WHERE a2 IN (SELECT a2 FROM A WHERE a1=1120);
Execuia interogrii se va derula n doi timpi: executarea subcererii (SELECT a2 FROM A WHERE a1=1120) se materializeaz ntr-o singur tabel intermediar cu o singur linie.
a1
executarea cererii principale, adic selecia lui a1din tabela A, pentru care exist condiia
Tabela A a1
1118
a2
05.11.2007
a3
aaa
a4
bbb
a5
30
A6
50
1119
06.11.2007
06.11.2007 06.11.2007
ddd
rrr
eee
ttt
45
36
74
58
a2 06.11.2007
1120 1121
Exemplu:
NUMRUL DE FACTURI EMISE CLIENILOR DUP 01/05/2012 SELECT [Cod Fiscal], Count(*) AS NR FROM (SELECT * FROM Facturi WHERE [Data Facturii]>#5/1/2012#) GROUP BY [cod fiscal];
SELECT S.[Cod Fiscal], Count(*) AS NR FROM [SELECT * FROM Facturi S WHERE [Data Facturii]>#5/1/2012#] AS S GROUP BY [Cod fiscal];
SELECT [CODFZ], Count(*) AS NUMAR FROM (SELECT * FROM CONTRACTE WHERE [DATA]>#1/1/2009#) GROUP BY [codFZ];
SQL V.
Tabela A a1 a2
SubInterogri
a3 a4 a5 a6
SELECT
b1
n
b2
SELECT
b3 b4 b5
n .....
a1
Tabela B
SELECT [domeniu] list selecie cmpuri FROM nume tabel_1 [WHERE tabel_1.cmp legtur=(SELECT cmp legtur FROM nume tabel_2 [WHERE criteriu de selecie pentru subinterogare])
SELECT a1,a2,a5 FROM A WHERE A.a1=(SELECT a1 FROM B WHERE b4>25000);
SELECT CLIENTI.[COD-CL], LOCALITATE FROM CLIENTI WHERE CLIENTI.[COD-CL] IN (SELECT FACTURI.[COD-CL] FROM FACTURI WHERE FACTURI.[COD-CL]=3);
COMPUNERE CU WHERE
2 tabele.
SELECT Facturi.nrfact, Facturi.datafact, Facturi.codfiscal, [Continut Factura].codisbn, [Continut Factura].cantitate, [Continut Factura].pretf, [Continut Factura].cantitate*[Continut Factura].pretf AS Valoare FROM Facturi, [Continut Factura] WHERE Facturi.nrfact=[Continut Factura].nrfact;
WHERE 3 tabele SELECT Facturi.nrfact, Facturi.datafact, Facturi.codfiscal, [Continut factura].codisbn, [Continut factura].cantitate, [Continut factura].pretf, [Continut factura].cantitate*[Continut factura].pretf AS valoare, Clienti.codfiscal, Clienti.denumirecl FROM Facturi, [Continut factura], Clienti WHERE Facturi.nrfact=[Continut factura].nrfact And Clienti.codfiscal=Facturi.codfiscal;
SELECT FACTURI.nrfact, FACTURI.datafact, FACTURI.codfiscal, [CONTINUT FACTURA].codisbn, [CONTINUT FACTURA].cantitate, [CONTINUT FACTURA].pretf, [CONTINUT FACTURA].cantitate *[CONTINUT FACTURA].pretf AS valoare FROM FACTURI INNER JOIN [CONTINUT FACTURA] ON FACTURI.nrfact=[CONTINUT FACTURA].nrfact;
SELECT Facturi.nrfact, Facturi.datafact, Facturi.codfiscal, [Continut factura] .codisbn, [Continut factura].cantitate, [Continut factura].pretf, [Continut factura].cantitate*[Continut factura].pretf AS valoare FROM Facturi LEFT JOIN [Continut factura] ON Facturi.nrfact=[Continut factura].nrfact;
RIGHT JOIN
SELECT Facturi.nrfact, Facturi.datafact, Facturi.codfiscal, [Continut factura].codisbn, [Continut factura].cantitate, [Continut factura]. pretf, [Continut factura].cantitate * [Continut factura].pretf AS valoare FROM Facturi RIGHT JOIN [Continut factura] ON Facturi.nrfact=[Continut factura].nrfact;