Sunteți pe pagina 1din 25

SGBD Access 2010: LIMBAJUL SQL

SQL ( Structured Query Language )

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

b) SGBD Access 2010: SQL SELECT : JOIN


a5 a 6 Tabela B Tabela C

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.a5, B.b3, (A.a5*B.b3) AS [Produs] FROM A INNER JOIN B ON A.a1=B.a1;

A compus cu rezultatul compunerii dintre B i C

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])

ON Clienti.[Cod Fiscal] = Facturi.[Cod Fiscal];

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;

SQL IV SubInterogri SELECT n SELECT n .....


Tabela A a1 a2 a3 a4 a5 a6

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

1119 1120 1121

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];

NUMRUL DE CONTRACTELOR INCHEIATE CU FURNIZORII DUP 01/05/2009

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

B) Subinterogri construite pe mai multe tabele

Legtura dintre tabele se realizeaz prin subinterogare (fr o compunere explicit)

Legtura dintre tabele se realizeaz printr-o compunere explicit (JOIN)

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);

Selectarea unor valori din A, pentru o valoare restricionat din B

Cum se numeste localitatea unde clientul cu codul=3 are facturi ?

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;

COMPUNERE CU INNER 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 INNER JOIN [CONTINUT FACTURA] ON FACTURI.nrfact=[CONTINUT FACTURA].nrfact;

COMPUNERE CU LEFT 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 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;

S-ar putea să vă placă și