Curs BD-SQL pentru FABBV an 2
-
Upload
culea-bogdan-alexandru -
Category
Documents
-
view
261 -
download
0
Transcript of Curs BD-SQL pentru FABBV an 2
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 1/50
Interogri de selecieInterogri de selecie
SQLSQL
Structured Query Language
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 2/50
SGBD Access 2000: SQLSQL
Limbajul SQLSQL (StructuredStructured QueryQuery LanguageLanguage) esteun limbaj declarativ (neprocedural) care permite o comunicarecomplex i rapid a utilizatorului cu bazele de date, în funcie decerinele i restriciile informaionale ale acestuia.
Printr-un limbaj declarativ (neprocedural) utilizatorul descrie
informaiile pe care vrea s le obin în urma interogrii, fr a
preciza algoritmii necesari pentru obinerea rezultatelor dorite.
SQL nu este un limbaj de programare sau de sistem, ci mai curândface parte din categoria limbajelor de aplicaii (orientate pe mulimi)
pentru baze de date relaionale.
Faptul c este un limbaj standard a condus la recunoaterea principalelor sale instruciuni de ctre mai multe SGBD-uri (Oracle,Access, Dbase, INFORMIX, DB2, Visual FoxPro.)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 3/50
SGBD Access 2000: SQLSQLPe lâng manipularea i regsirea datelor, SQL efectueaz i operaiicomplexe privind actualizarea i administrarea bazei de date.
În funcie de rolul lor în manipularea datelor i tranzaciilor,instruciunile SQL, pot fi grupate în:
instruciuni de definire a datelordefinire a datelor care permit descrierea structurii bazei de date;
instruciuni de manipulare a datelormanipulare a datelor în sensul adugrii,modificrii i tergerii înregistrrilor; instruciuni de selecie a datelorselecie a datelor care permit consultarea bazei dedate;
instruciuni de procesare a tranzaciilorprocesare a tranzaciilor care privesc unitilelogice de prelucrare i constituie în fapt, operaii multiple demanipulare a datelor; instruciuni de control al cursoruluicontrol al cursorului; instruciuni privind controlul accesului la datecontrolul accesului la date.
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 4/50
SGBD Access 2000: SQLSQL
Cuvintele cheie ale ³vocabularului´ SQL (fraza SQL) sunt:
instruciunileinstruciunile, clauzeleclauzele, funciilefunciile i operatoriioperatorii..
InstruciunileInstruciunile: au cel mai important rol, deoarece determinexecutarea unei aciuni (SELECT; CREATE; INSER T; DELETE;UPDATE).
ClauzeleClauzele restricioneaz aria valoric a entitilor ce particip lainterogare (WHERE; ORDER BY; GROUP BY; HAVING).
FunciileFunciile îmbuntesc capacitile SQL de a manipula datele
(Sum; Max; Avg; Count; Iif).
OperatoriiOperatorii efectueaz o comparare a valorilor seleciei (=; >;>=, >; >= And; Or; Not; Between; Like; In; .
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 5/50
SGBD Access 2000: SQLSQL
R eguli de sintax ale unei fraze SQL:
Orice fraz SQL se va termina cu semnul ³;´
Se utilizeaz punctul (³..´) ca separator între numele tabelei inumele câmpului, atunci când o interogare are ca surse de date mai
multe tabele (SELECT Materiale..Cod_ISBN); Se utilizeaz parantezele drepte (³[][]´) pentru a încadra nume decâmpuri interspaiate sau purttoare de caractere neaceptate de SQL(SELECTMateriale.[Denumire Material])
Se utilizeaz virgula (³,,´) pentru a delimita elementele (parametri)unei liste (SELECT Cod_Mat, Den_Mat, etc.)
Elementele de tip ir de caractere se vor marca între
ghilimele(³text´), iar valorile de tip dat/timp se vor marca între #.
Caracterele de înlocuire generice sunt ³?´ sau ³*´
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 6/50
SGBD Access 2000: SQLSQL SELECTSELECTLimbajul de manipulare a datelor: Interogri (Interogri ( simple simple) de selecie) de selecie
SELECT [domeniu: ALL/DISTINCT/DISTINCTROW] listselecie câmpuri
FROM nume tabel(e)
[WHERE criteriu de selecie]
[ORDER BY list câmpuri criterii de ordonare {ASC/DESC}];
DomeniulDomeniul determin modalitile de manipulare a înregistrrilor dinBD asupra creia opereaz selecia. Domeniul poate fi:
ALLALL (implicit) include toate înregistrrile care îndeplinesc
condiiile impuse; DISTINCTDISTINCT elimin înregistrrile care au valori duplicate încâmpurile selectate (se va afia doar o apariie a datei multiple)
DISTINCTR OWDISTINCTR OW elimin înregistrrile duplicate în ansamblul lor
(nu numai pe acelea care au câmpuri duplicate)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 7/50
SGBD Access 2000: SQLSQL SELECTSELECT
SELECT [domeniu: ALL/DISTINCT/DISTINCTROW] list selecie câmpuri
FROM nume tabel(e)
[WHERE cr iter iu d e selec ie][WHERE cr iter iu d e selec ie] [ORDER BY list câmpuri criterii de ordonare {ASC/DESC}]; [ORDER BY list câmpuri criterii de ordonare {ASC/DESC}];
Clauza FR OM nume tabelFR OM nume tabel precizeaz tabela sau tabelele (sauinterogri deja create) din care fac parte câmpurile ce fac obiectul proieciei BD (,)
List selecie câmpuriList selecie câmpuri reprezint proiecia BD, cuprinzând toatecâmpurile care vor aprea în tabela cu rezultatele interogrii (,)
Clauza WHER EWHER E precizeaz criteriul de selecie sub forma unei
expresii. Clauza este opional i nu opereaz cu funcii totalizatoareClauza ORDER BYORDER BY precizeaz criteriul de ordonare a înregistrrilor selectate. Fiecare câmp precizat în Clauza ORDER BY constituie ocheie de sortare (sensul sortrii se precizeaz prin ASC (implicit) sau
DESC)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 8/50
SGBD Access 2000: SQLSQL SELECTSELECT : Exemple: Exemple
TabelaA
a1 a2 a3 a4 a5 a6
S electar ea câmpur ilor a1 i a2 d in A
SELECT
DIST
INCT
ROW a1,a2FROM A
S electar ea (fr d ublur i) a lui a1 i a5
pent r u car e a5> 1000
SELECT
DIST
INCT
a1,a5FROM A
WHERE a5>1000;
S electar ea (fr d ublur i a) lui a5 > 1000 i a3= ir
SELECT
DIST
INCT
a5FROM A
WHERE a5>1000 AND a3=´text´;
S electar ea lui a5 pt car e a3 ar e o
rdcin pr ecizat
SELECTDISTINCT a5
FROM A
WHERE a3 LIKE ´*text´;
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 9/50
SGBD Access 2000: SQLSQL SELECTSELECT : Exemple: Exemple
TabelaA
a1 a2 a3 a4 a5 a6
S electar ea (fr d ublur i a) lui a5 <> ( 100,1000)SELECT DISTINCT a5
FROM A
WHERE a5
(NOT) BETWEEN 100 AND 1000
S electar ea lui a5 i a r ezultatului unui
pr od us d int r e î nr egist rr ile tabelei A
SELECT DISTINCT a1, a2*a5
AS Valoare
FROM A
Selectarea câmpurilor a2, a4 i a5 din A pt.care a2 s ia valorile 1500, 13000 i 14000,cu ordonare cresctoare a lui a1 idescresctoare a lui a5
SELECT a2,a4,a5
FROM A
WHERE a2 IN(1500, 13000, 14000)
ORDER BY a2 ASC, a5 DESC;
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 10/50
SGBD Access 2000: SQLSQL SELECTSELECT : Exemple: ExempleTabela A
a1 a2 a3 a4 a5 a6
SELECT DISTINCTROW Max(a5)AS [a5_Maxim], Min(a5) AS[a5_Minim], Avg(a5) AS [a5_Medie]FROM A
SELECT
C
OUNT
(*) AS [Numr de tupluri]FROM A
SELECT a1, a5, a6, IIF(a5>=a6;a5-a6;a6-a5) AS [R ezultat evaluare]FROM A
WHERE a2 IS NOT NULL;
S electar ea celei mai mari / mai mici / i
medii valor i a lui a5 d in tabela A
Numrarea î nr egist rr ilor d in tabela A
S electar ea r ezultatului evalurii
unei condiii , pent r u car e a2 este d i f er it d e zer o
SELECT funcie_agregatfuncie_agregat1 AS [Alias], ...2,...FROM nume tabel(e)WHERE criteriu de selecie
Obs. În lipsa opiunii GRUP BY, la utilizareafunciilor agregat, rezultatul va conine o singur linie
Count (<>Null);Sum ;Min ;Max
Avg;Iif
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 11/50
SGBD Access 2000: SQLSQL SELECTSELECTLMD:LMD: Interogri (complexe) de selecie iInterogri (complexe) de selecie i gruparegrupare
S ELECT [d omeniu] [ list selec ie funcie agregat(nume câmp) AS alias] FROM nume tabel ( e)
WHERE cr iter iu d e selec ie
[ GROUP BY câmp(uri) de grupare]
[ HAVING criteriul câmpului de grupare] [ORDER BY list câmpur i cr iter ii d e ord onar e {AS C/DE S C} ];
Funciile de grup (agregat) permit construirea unor interogri SQL prin care utilizatorul poate s efectueze diversediverse calcule pentrucalcule pentru
grupuri de înregistrri grupuri de înregistrri care au câmpuri de aceeai valoarecare au câmpuri de aceeai valoare.
List selecieList selecie se refer la una sau mai multe funcii agregatefuncii agregate care auca argumente nume de câmpuri ale tabelei(lor) bazei de date. Acestecâmpuri trebuie s fie în mod obligatoriu numerice.
AS ALIASAS ALIAS asociaz un pseudonimpseudonim aferent rezultatuluirezultatului unui calcul
simplu sau unei funcii agregat.
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 12/50
SGBD Access 2000: SQLSQL SELECTSELECTLMD:LMD: Interogri (complexe) de selecie iInterogri (complexe) de selecie i gruparegrupare
S ELECT [d omeniu] [funcie agregat(nume câmp) AS alias] [ , list selec ie] FROM nume tabel ( e)
[ GROUP BY câmp(uri) de grupare]
[ HAVING criteriul câmpului de grupare] [ORDER BY list câmpur i cr iter ii d e ord onar e {AS C/DE S C} ];
ClauzaClauza GR OUP BYGR OUP BY precizeaz câmpul sau câmpurile pe baza crorase va efectua gruparea înregistrrilor. Astfel, se pot executa funciileagregate descrise în lista de selecie pentru fiecare dintre grupurile deînregistrri ( cu linia de Total în QBE)
ClauzaClauza GR OUP BYGR OUP BY formeaz grupuri de tupluri grupuri de tupluri ale unei relaii, pe baza valorilor comune luate de un atribut.
Rezultatul unei fraze SELECTSELECT ce conine clauza GR OUP BYGR OUP BY seobine prin regruparea tuturor liniilor din tabelele enumerate înFR OMFR OM, extrgându-se câte o singur apariie pentru fiecare valoaredistinct a coloanei sau a grupului de coloane
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 13/50
SGBD Access 2000: SQLSQL SELECTSELECTLMD:LMD: Interogri (complexe) de selecie iInterogri (complexe) de selecie i gruparegrupare
TabelaA (Coninut Factur)
a1 a2 a3 a4
100
100
100
305 25 125000
208 10 200000
85 30 100000
101
101
208 8 200000
74 10 300000
103
103
90 5 50000
74 25 300000
Tabela R
a1a1 a5=SUM(a3*a4)a5=SUM(a3*a4)
100 812500
101 460000
103 775000
SELECT a1, SUM(a3*a4) AS a5FROM A
GR OUP BY a1;
1.Se ordoneaz liniile tabelei A dup a1;
2. Se constituie un grup pentru fiecarevaloare distinct aferent atributului a1;3. Se aplic funcia agregat SUMSUM asupragrupurilor;4. Se obine rezultatul, al crui numr delinii coincide cu valorile distincte ale lui a1
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 14/50
SGBD Access 2000: SQLSQL SELECTSELECTLMD:LMD: Interogri (complexe) de selecie iInterogri (complexe) de selecie i gruparegrupare
HAVINGHAVING se refer la restricia aplicat câmpului de grupare.Clauza WHERE acioneaz înainte de gruparea înregistrrilor, întimp ce HAVING activeaz restricia dup gruparea acestora.
Deci, prin asocierea clauzei HAVINGHAVING la GR OUP BYGR OUP BY este posibilselectarea anumitor grupuri de tupluri ce îndeplinesc un criteriunumai la nivel de grup.
S ELECT [d omeniu] [funcie agregat(nume câmp) AS alias] [ , list selec ie]
FROM nume tabel ( e)
[ GROUP BY câmp(uri) de grupare]
[ HAVING criteriul câmpului de grupare] [ORDER BY list câmpur i cr iter ii d e ord onar e {AS C/DE S C} ];
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 15/50
SGBD Access 2000: SQLSQL SELECTSELECT
TabelaA (Coninut Factur)
a1 a2 a3 a4
100
100
100
305 25 125000
208 10 200000
85 30 100000
101
101
208 8 200000
74 10 300000
103
103
90 5 50000
74 25 300000
Tabela R
a1a1 a5=SUM(a3*a4)a5=SUM(a3*a4)
100 812500
103 775000
SELECT a1, SUM(a3*a4) AS a5FROM A
GROUP BY a1HAVING SUM(a3*a4) >500000;
460000
SELECT a1, SUM(a3*a4) AS a5FROM A
WHER E a3>5
GROUP BY a1
HAVING SUM(a3*a4) >750000;
Tabela R1
a1a1 a5=SUM(a3*a4)a5=SUM(a3*a4)
100 812500
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 16/50
SGBD Access 2000: SQLSQL SELECTSELECT
Tabela B
b1 b2 b3 b4 b5 a1
SELECT b1, b2, b4, b5, b3*b4 AS [produs b3 i b4]FROM B
WHERE b2=´ctiteriu text´
GROUP BY b4HAVING Sum(b3*b4)>300000;
SELECT b1, b2, Avg(b3) AS [medie b3], Count(*) AS [Total]
FROM BGROUP BY b3,HAVING Avg(b3)>250000 AND
Count (*)>5
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 17/50
SGBD Access 2000: SQLSQL SELECTSELECT: JOIN: JOIN
TabelaA
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
Tabela C
c1 c2 c3 c4 C5 a1
SELECT [domeniu] list selecie câmpuri din tabele diferiteFROM nume tabele
[WHERE criteriu de compunere [i de selecie] [ORDER BY list câmpuri criterii de ordonare {ASC/DESC}];
LMD:LMD: Interogri de asociere (jonciune / compunere) internInterogri de asociere (jonciune / compunere) intern
Compunerile echivalente (EchiCompunerile)Compunerile echivalente (EchiCompunerile) --> utilizeaz clauza WHERE (pt> utilizeaz clauza WHERE (ptselecia înregistrrilor) asociat cu o egalitate a valorilor în câmpurile de legtur.selecia înregistrrilor) asociat cu o egalitate a valorilor în câmpurile de legtur.
A compus cu B i A compus cu cu C
SELECT A.a1, A.a2, B.b1, C.c1, C.c3
FROM A, B, C
WHERE A.a1=B.a1 AND A.a1=C.a1
ORDER BY C.c3;
SELECT A.a1, B.b2* B.b3AS Total
FROM A, B
WHERE A.a1=B.a1 ANDA.a5>=10000;
T1, T2,.....
T1.a1,T2.a1,
.........
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 18/50
Exemple:
SELECTSELECT FacturiFacturi.[ Numar Factura], FacturiFacturi.[ Data F actur ii],FacturiFacturi.[C od F iscal ],[Continut FacturaContinut Factura].[C od I S BN ], [ContinutContinut
FacturaFactura].C antitate, [Continut FacturaContinut Factura].[ P r et f ], [C antitate]*[ P r et f ] AS
ValoareValoareFR OMFR OM FacturiFacturi,[Continut FacturaContinut Factura]WHER EWHER E FacturiFacturi.[ Numar Factura] = [Continut FacturaContinut Factura].[ Numar
Factura];
Compunerea a 2 tabele (WHERE)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 19/50
Exemple:
Compunerea a 3 tabele (WHERE)
SELECTSELECTFacturiFacturi.[ Numar Factura], FacturiFacturi.[ Data F actur ii],[Continut FacturaContinut Factura].C antitate, [Continut FacturaContinut Factura].[ P r et f ],[C antitate]*[ P r et f ] AS ValoareValoare,ClientiClienti.[Cod Fiscal ], ClientiClienti.[ Denumir e C lient ],
FR OMFR OM FacturiFacturi, [Continut FacturaContinut Factura],ClientiClientiWHER EWHER E
FacturiFacturi.[ Numar Factura]==[Continut FacturaContinut Factura].[ Numar Factura]ANDAND
ClientiClienti.[
Cod Fiscal ]
== FacturiFacturi.[
Cod Fiscal ];
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 20/50
SGBD Access 2000: SQLSQL SELECTSELECT: JOIN: JOIN
O compunere intern (INNER INNER ) sau echivalent(echicompunere) este aceea în care liniile unui tabel
sunt combinate cu liniile altui tabel, rezultând unnumr total de linii egal cu produsul numrului delinii din fiecare tabel (cazul 1 din Join Properties).
LEFT OUTER JOINLEFT OUTER JOIN (11n) include toate înregistrrile din tabela AA
(cardinalitate ³11´) i numai acele înregistrri din tabela BB
(cardinalitate ³nn´) pentru care valorile atributelor cheie (a1a1) suntegale (cazul 2 din Join Properties).
R IGHT OUTER JOINR IGHT OUTER JOIN (11
nn) include toate înregistrrile din tabela³BB´ (cardinalitate ³nn´) i numai acele înregistrri din tabela ³AA´(cardinalitate ³11´) pentru care valorile atributelor cheie (a1a1) suntegale (cazul 3 din Join Properties).
TabelaA
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 21/50
SGBD Access 2000: SQLSQL SELECTSELECT : JOIN: JOIN
SELECT [domeniu] list selecie câmpuri din tabele diferiteFROM nume tabel_1
{INNER / LEFT OUTER / RIGHT OUTER } JOIN nume tabel_2
ON criteriu asociere [WHERE criteriu de selecie
[ORDER BY list câmpuri criterii de ordonare {ASC/DESC}];
SELECT A.a5, B.b3, (A.a5*B.b3) AS [Produs]FROM A
INNER JOININNER JOIN B ONON A.a1=B.a1;
SELECT A.a1, A.a2, A.a5, B.b1, C.c1
FROM A
INNER JOININNER JOIN B B
ONON (A.a1=B. a1 ) AND (B.b1=C.b1);
A compus cu
rezultatul compunerii
dintre B i C
TabelaA
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
Tabela C
c1 c2 c3 c4 c5 b1
(INNER JOIN C C ON B.b1=C .b1)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 22/50
Exemple:
SELECTSELECT FacturiFacturi.[ Numar Factura], FacturiFacturi.[ Data F actur ii],FacturiFacturi.[C od F iscal ], [Continut FacturaContinut Factura].[C od I S BN ], [ContinutContinut
FacturaFactura].C antitate, [Continut FacturaContinut Factura].[ P r et f ], [C antitate]*[ P r et f ] ASV aloar e
FR OMFR OM FacturiFacturi INNER JOININNER JOIN [Continut FacturaContinut Factura]ONON FacturiFacturi.[ Numar Factura] = [Continut FacturaContinut Factura].[ Numar Factura];
Compunerea a 2 tabele (INNER)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 23/50
Exemple:
SELECTSELECT FacturiFacturi.[ Numar Factura], FacturiFacturi.[ Data F actur ii],[Continut FacturaContinut Factura].C antitate, [Continut FacturaContinut Factura].[ P r et f ],[C antitate]*[ P r et f ] AS V aloar e,ClientiClienti.[Cod Fiscal ], ClientiClienti.[ Denumir e C lient ]FR OMFR OM ClientiClienti INNER JOININNER JOIN FacturiFacturi
ONON ClientiClienti.[Cod Fiscal ] = FacturiFacturi.[Cod Fiscal ];
Compunerea a 3 tabele (INNER)
(INNER JOIN(INNER JOIN [Continut FacturaContinut Factura]ONON
FacturiFacturi.[ Numar Factura] = [Continut FacturaContinut Factura].[ Numar Factura]))
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 24/50
Exemple:
SELECT Facturi.[ N umar F actur a],[Continut Factura].C antitate, [Continut Factura].[ P r et f ], [C antitate]*[ P r et f ] AS V aloar e,
IIf ([IIf ([V aloar e]<5000000,0,[]<5000000,0,[V aloar e]*0.15)AS]*0.15)AS Red ucer e
FROM Facturi
INNER JOIN [Continut Factura]ON
Facturi.[ N umar F actur a] = [Continut Factura].[ N umar F actur a];
DISCOUNT ÎN LINIE DE FACTUR
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 25/50
Exemple:
SELECT Facturi.[Numar Factura],[Continut Factura].[Cod ISBN],Month([Data Facturii]) AS Luna,Year([Data Facturii]) AS Anul,[Cantitate]*[Pret f] AS Valoare
FROM Facturi INNER JOIN [Continut Factura] ON Facturi.[Numar Factura]= [Continut Factura].[Numar Factura]WHERE Month([Data Facturii])=5 AND Year([Data Facturii])=2001;
FACTUR ILE PE LUNA Mai 2001FACTUR ILE PE LUNA Mai 2001
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 26/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....TabelaA
a1 a2 a3 a4 a5 a6
O subinterogare sau o interogare imbricat presupune ca setul derezultate obinut de la o interogare s constituie argument pentru oalta (interogare în interogare).
SELECT [domeniu] list selecie câmpuri
FROM nume tabel
[WHERE câmp > / < / >= / <= / <> / = / IN
( SELECT câmp
FROM nume tabel [ WHERE criteriu de selecie ]);
SELECT DISTINCTROW a1a1,a3,a5FROM AA
WHERE a5 > (SELECT a5 FROM AA WHERE a3=³text´);
Subinterogri construite pe o singur tabel
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 27/50
SELECTSELECT a1FR OMFR OM AA
WHER EWHER E a2 IN (SELECT(SELECT a2 FR OMFR OM AAWHER EWHER E a1=1120);
Execuia interogrii se va derula în doi timpi:
Tabela AA
a1 a2 a3 a4 a5 A6
1118 05.11.2003 aaa bbb 30 50
1119 06.11.2003 ddd eee 45 74
1120 06.11.2003 rrr ttt 36 58
1121 06.11.2003
Care sunt elementele a1 (facturile)emise în aceeai zi cu elementul a1(factura) 1120?
executarea subcererii (SELECT(SELECT a2 FR OMFR OMAAWHER EWHER E a1=1120) sematerializeaz într-o singur tabel intermediar cu o singur linie.
a2
06.11.2003
executarea
cererii principale,adic selecia luia1din tabela A, pentru care existcondiia
a1
1119
11201121
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 28/50
Exemplu:
SELECT SS.[Cod Fiscal], Count(*) AS NR NR
FROM(SELECT * FROM FacturiWHERE [Data Facturii]>#5/1/2001#) AS SS
GROUP BY [C
od fiscal];
NUMRUL DE FACTURI EMISE CLIENILOR DUP 01/05/2001
SELECT [Cod Fiscal], Count(*) AS NR NR
FROM(SELECT * FROM Facturi
WHERE [Data Facturii]>#5/1/2001#)GROUP BY [cod fiscal];
SS
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 29/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....TabelaA
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
SELECT [domeniu] list selecie câmpuri
FROM nume tabel_1
[WHERE tabel_1 .câmp legtur=(SELECT câmp legtur
FROM nume tabel_2
[WHERE criteriu de selecie pentru subinterogare ])
SELECT a1a1,a2,a5
FROM AA
WHERE AA.a1a1=(SELECT a1a1 FROM BB WHERE b4>25000);
Subinterogri construite pe mai multe tabeleLegtura dintre tabele
se realizeaz prinsubinterogare (fr ocompunere explicit)
Legtura dintre tabelese realizeaz printr-ocompunere explicit
(JOIN)
Selectarea unor valori din A, pentruo valoare restricionat din B
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 30/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....
SELECT [domeniu] list selecie câmpuri
FROM nume tabel_1 ,nume tabel_2
[WHERE tabel_1 .câmp legtur=tabel_2 .câmp de legtur AND
tabel_1 .câmp legtur=(SELECT câmp de legturFROM nume tabel_2
[WHERE criteriu de subinterogare ])
SELECT a1a1,a2,a5FROM A,A,BB
WHERE AA.a1a1=BB.a1a1
AND
AA.a1a1=(SELECT
a1a1 FROM BB WHERE b4>25000);
Subinterogri pentru care a fost construit o compunere
TabelaA
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 31/50
SQLSQL SubInterogriSubInterogri ´́cascadatecascadateµ :µ :SELECTSELECT în în SELECTSELECT în în SELECTSELECT în în SELECTSELECT
TabelaAA (Judee)(Judee)
a1a1 a2 a3 a4 a5 a6
Tabela B (Orae)B (Orae)
b1b1 b2 b3 b4 b5 a1
Tabela C (SocietiCom)C (SocietiCom)
c1c1 c2 c3 c4 c5 b1
TabelaD (Facturi)D (Facturi)
d1d1 d2 d3 d4 d5 c1A (Judee)
Aaa
BbbEee
Fff
Care sunt judeele în care
au fost emise facturi în luna
octombrie 2003 ?
((SELECTSELECT b1 (Cod Postal)b1 (Cod Postal)
FROM CC (SocietiCom)(SocietiCom)
WHERE c1c1 (Cod Fiscal)(Cod Fiscal) ININ
((SELECTSELECT a1 (DenumireJudet)a1 (DenumireJudet)
FROM BB (Orae)(Orae)
WHERE b1(Cod Postal)b1(Cod Postal) ININ
SELECTSELECT a1 (Denumire Jude)a1 (Denumire Jude)FROM AA (Judee)(Judee)
WHERE a1 (DenumireJudet)a1 (DenumireJudet) ININ
(SELECTSELECT c1 (Cod Fiscal)c1 (Cod Fiscal)
FROM D (Facturi)D (Facturi)
WHERE d2d2 (DataFactur)
BETWEEN #01/10/03#
AND #31/10/2003#)))) ))
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 32/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....
Restricionarea subinterogrilor
Domeniul de obinere a rezultatelor unei subinterogri poate fiinfluenat prin precizarea unuia din cuvintele cheie: ALLALL, ANYANY irespectiv EXISTEXIST . Fiecare predicat (ANY, ALL, EXISTS) poate sfie utilizat i în forma cu negaie ± NOTNOT
Prin ALLALL, ANYANY i EXISTEXIST se utilizeaz un predicat de comparaiecare se aplic rezultatului unei subinterogri
Dac în cele mai multe cazuri se compara un atribut (sau rezultatul
unei expresii) cu o constant, operatorii ALLALL, ANYANY i EXISTEXIST permitcompararea valorilor atributului/expresiei cu un set de tupluri cetocmai a fost extras printr-o subinterogare
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 33/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....TabelaA
a1 a2 a3 a4 a5 a6
SELECT a2 FROM AA
WHERE a4=1AND a5< ALLALL
(SELECT a5 FROM AA
WHERE a4=2);
Restricionarea subinterogrilor prinoperatorul ALLALL
Prin ALLALL se preiau toate rezultatele subinterogrii i, dac acesteaîndeplinesc condiia cerut, se returneaz valoarea logic True
EXEMPLU: se afieaz a2 (numele produselor) pentru care a4=1(de calitatea întâi) i a5 (preul) este mai mic decât preul a5 altuturor a2 (produselor) pentru care A4=2 (de calitatea a 2-a)
Numele produselor de calitatea I
pentru care preul este mai mic decât
preurile produselor de calitatea a II-a
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 34/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....Tabela B
b1 b2 b3 b4 b5 a1
SELECT b1,b2,b3,b4FROM BWHERE b3= ANYANY
(SELECT b3 FROM BWHERE b5=´ABC´ AND b4=2000);
Restricionarea subinterogrilor prin operatorul ANYANY
ANY/SOMEANY/SOME: are în vedere compararea valorii de ieire asubinterogrii cu fiecare înregistrare din interogarea extern. Dac pentru fiecare înregistrare din interogare exist un rezultat alsubinterogrii, se va returna valoarea logic True. Cuvântul cheieSOME are acelai rol i caracteristici ca ANY
EXEMPLU: se returneaz lista unor elemente (b1, b2, b3, b4) careaparin domeniului precizat de b3 pentru restriciile b5=³ABC´ i b4=2000
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 35/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....Tabela B
b1 b2 b3 b4 b5 a1
SELECT b2,b4FROM BB
WHERE EXISTS(SELECT * FROM BB
WHERE b4 < 2003);
Restricionarea subinterogrilor prin operatorul EXISTSEXISTS
EXISTSEXISTS: folosete subinterogarea ca pe o condiie, analizând setulde rezultate al acesteia i returnând valoarea F alse dac nu existnici o ieire. Se poate astfel verifica existena anumitor înregistrri icontrola ansamblul rspunsurilor date de interogare.
EXEMPLU: S se verifice dac în cadrul tabelei B exist înregistrri pentru care b4 < 2003
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 36/50
SQLSQL SubInterogriSubInterogri SELECTSELECT în în SELECTSELECT în ..... în .....Tabela B
b1 b2 b3 b4 b5 a1
Restricionarea subinterogrilor agregate prin clauza HAVING
În exemplele clasice, predicatele incluse în clauza HAVING, comparau o expresie cu oconstant. În cazul de fa, se vor include în clauza HAVING chiar subinterogri.
SELECT [domeniu] list selecie câmpuri i/sau funcii agregate
FROM nume tabel
GROUP BY câmp de grupare
HAVING criteriu câmp de grupare > / < / >= / <= / <> / = /
(SELECT ... FROM...GROUP BY);
SELECT Count(*) AS [Numr facturi], b2
FROM BBGROUP BY b1HAVING Count(*) >=
(SELECT Count(*)FROM BB
GROUP BY b2;
Se calculeaz numrul
de elemente b1, cecorespundelementului b2
Se calculeaznumrul de facturice corespundfiecrei zile
Selecteaz numrul deelemente distincte de tip
b2 (data facturii)
Se numr elementele detip b1 (numr factur),
pentru fiecare dat (b2)
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 37/50
Exemplu:
SELECTAVG( NUMARPRODUSE ) AS MEDIE
FROM(SELECT [Numar Factura], COUNT(*) AS NUMARPRODUSEFROM [Continut Factura]GROUP BY [Numar Factura]);
FACTURILE ALCROR NR. DE PRODUSE >MEDIA
X
SELECT [Numar Factura], COUNT(*) AS NUMARPRODUSE
FROM [Continut Factura]GROUP BY [Numr Factura])
HAVING COUNT(*)> NUMRUL MEDIU DE PRODUSE DE PE O FACTURX
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 38/50
SELECT AAUTOR IUTOR I.C NP, AAUTOR IUTOR I.[Nume Prenume], Count(*) AS NR
FROM AUTOR IAUTOR I
INNER JOIN [AUTOR IAUTOR I--CAR TICAR TI] ON AAUTOR IUTOR I.C NP=[AUTOR IAUTOR I--
CAR TICAR TI].C NPGROUP BY GROUP BY A AUTORI UTORI .CNP .CNP
HAVING ((Count(*)=(SELECT MAX(NR ) AS MAXIM FR OMHAVING ((Count(*)=(SELECT MAX(NR ) AS MAXIM FR OM
(SELECT CNP, COUNT(*) AS NR
FR OM [Autori-Carti]
GR OUP BY CNP))));
AUTORUL CARE A SCRIS CELE MAIMULTE CRI
I. Câte cri a
scris fiecare
autor
II. Numrul maxim de cri scrise
III. Selectarea elementelor de afiat: numele
autorului, CNP i nr. de cri
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 39/50
SGBD Access 2000: SQL: UNION
Dac se dorete s se vizualizeze rezultatele mai multor interogriSELECT în acelai timp, prin combinarea ieirilor lor, poate fiutilizat facilitatea UNION a limbajului de interogare SQL.
SELECT lista_campuri FROMSELECT lista_campuri FROM tabela1tabela1UNIONUNION
SELECT list_campuri FROMSELECT list_campuri FROM tabela2tabela2[GROUP BY camp_de_grupare][GROUP BY camp_de_grupare][HAVING criteriul_de_agregare][HAVING criteriul_de_agregare]
[[UNIONUNION SELECT list_campuri FROMSELECT list_campuri FROM tabela3tabela3[GROUP BY camp_de_grupare ][GROUP BY camp_de_grupare ]
[HAVING criteriul_de_grupare]][HAVING criteriul_de_grupare]][[UNIONUNION...]...][ORDER BY camp_criteriu_de_sortare];[ORDER BY camp_criteriu_de_sortare];
Tabelele reunite trebuie s aib aceeai structur.
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 40/50
SELECT [Cod Fiscal],[Denumire Client],Localitate,Telefon
FROM ClientiClientiUNIONUNION
SELECT [Cod Fiscal],[Denumire Client],Localitate,TelefonFROM [Clienti AradClienti Arad]ORDER BY Localitate,[Denumire Client];
SGBD Access 2000: SQL: UNION
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 41/50
TRANSFOR MTRANSFOR M funcie agregat AS alias
Instruciune de selecie cu grupare pe linie
PIVOT câmp antet coloan ;
SGBD Access 2000: SQL: CROSSTAB
CR OSSTAB QueryCR OSSTAB Query per mite ca pe l âng selectar ea d atelor i e f ectuar ea
cal culelor î n linie sau pr in f unc ii ag r egat, s g r upeze î nr egist rr ile pe
linie ( antete d e rând ur i) i pe coloan ( titlur i d e coloan )
Funcia agregat opereaz asupra înregistrrilor, prin definireainstruciunii de selecie;
Instruciunea de selecie servete pentru a specifica antetele de rând alerezultatelor interogrii;
Câmpul antet coloan constituie câmpul sau expresia ce se utilizeazîn definirea antetelor de coloane, pentru setul de rezultate al interogrii.
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 42/50
TRANSFOR MTRANSFOR M Sum([Cantitate]*[Pret f]) AS ValoareSELECT Carti.[ Denumir e C ar te]FROM Facturi
INNER JOIN (Carti INNER JOIN [Continut Factura]ON Carti.[Cod ISBN] = [Continut Factura].[Cod ISBN])ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura]WHERE ((([Continut Factura].Cantitate)>50))
GR OUP BY Carti.[Denumire Carte]GR OUP BY Carti.[Denumire Carte]
PIVOT Month([Data Facturii]);
SQL: CROSSTAB
TRANSFOR MTRANSFOR M funcie agregat AS alias
Instruciune de selecie cu grupare pe linie
PIVOT câmp antet coloan ;
S se calculezesuma valoric avânzrilor de
carte pe luni
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 43/50
SGBD Access 2000: SQL: PARAMETERS
SELECTSELECT Facturi.[Numar Factura], Carti.[Cod ISBN], [Continut
Factura].Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] ASValoare, [Tastati Procent]*[Valoare]/100AS R educere[Tastati Procent]*[Valoare]/100AS R educereFR OMFR OM FacturiINNER JOININNER JOIN (Carti INNER JOININNER JOIN [Continut Factura] ONON Carti.[CodISBN] == [Continut Factura].[Cod ISBN]) ONON Facturi.[Numar Factura]== [Continut Factura].[Numar Factura]WHER EWHER E (((Facturi.[Numar Factura])==[Tastati Nr_Fact])
ANDAND ((Carti.[Cod ISBN])==[Tastati Cod_ISBN]));
Parameters
Nume_parametru1 tip de date (dimensiune), Nume_parametru2 tip de date (dimensiune),.......;
Parameters
Reducere Percent,
Numar de factura LongInteger
SGBD A 2000 SQL C t b l l
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 44/50
CR EATE TABLECR EATE TABLE nume_tabel nume_tabel
( nume( nume--atribut1 tip_dat(mrime) [NOT NULL]atribut1 tip_dat(mrime) [NOT NULL]
[,nume[,nume--atribut2 tip_dat(mrime) [NOT NULL]..]atribut2 tip_dat(mrime) [NOT NULL]..][[CONSTRAINT numeCONSTRAINT nume--atribut CHECK (numeatribut CHECK (nume--atribut <condiie>«)atribut <condiie>«)]][CONSTRAINT nume_index] {PRIMARY KEY|UNIQUE|NOT [CONSTRAINT nume_index] {PRIMARY KEY|UNIQUE|NOT NULL }] NULL }]););
CR EATE TABLECR EATE TABLE Carti
([C od I S BN ] Text(15) CONSTRAINT [Cod ISBN] Primary Key,[ Denumir e C ar te] Text(50), NOT NULL[ Data A par i iei] Date NOT NULL,[S tocul tipar it ] Number, CONSTRAINT [Stocul tiparit] CHECK
([Stocul tiparit] BETWEEN 1000AND 3000),
[ P r et baza] Currency NOT NULL);
SGBD Access 2000: SQL: Crearea tabelelor
SGBD A 2000 SQL M difi t t ii
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 45/50
ALTER TABLEALTER TABLE nume_tabel nume_tabel
ADD numenume--atribut tip_dat(mrime) [NOT NULL]atribut tip_dat(mrime) [NOT NULL][CONSTRAINT nume[CONSTRAINT nume--atribut CHECK (numeatribut CHECK (nume--atribut <condiie>«)];atribut <condiie>«)];
ALTER ALTER TABLETABLE Carti
ADD [Nume coordonator lucrare] Text(25) NOT NULL;
SGBD Access 2000: SQL: Modificarea structurii
SGBD Access 2000: SQL: tergerea unei tabele DR OP TABLEDR OP TABLE nume_tabel nume_tabel ;;
DR OPDR OP TABLETABLE [C lienti Buzau];
SGBD A 2000 SQL M i l d t l
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 46/50
SGBD Access 2000: SQL: Manipularea datelor:Interogri cu aciune de CREARE de tabele
SELECT [domeniu] (câmp1, câmp2,....)INTOINTO nume tabel nou
FR OM nume tabel sur s
[WHER EWHER E criteriu de adugare a înregistrrilor în tabela nou];
SELECTSELECT [Cod Fiscal], [Denumire Client], Adresa, LocalitateINTOINTO [C lienti d in Bucur esti]FR OMFR OM ClientiWHER EWHER E (Localitate="Bucuresti");
SGBD A 2000 SQL M i l d t l
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 47/50
SGBD Access 2000: SQL: Manipularea datelor Interogri cu aciune de ADUGARE de tupluri
INSER T INTOINSER T INTO nume_tabel (câmp1, câmp2,....)VALUESVALUES (valoar e_1, valoar e_2,..... );
INSER T INTOINSER T INTO [Clienti Arad] ( [Cod Fiscal], [Denumire Client],Adresa, Localitate )VALUESVALUES ("r7 32469","S o f t I n f o S A","S t r. N arciselor nr.5"," Ar ad ");
SGBD A 2000 SQL M i l d t l
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 48/50
SGBD Access 2000: SQL: Manipularea datelor Interogri cu aciune de ADUGARE de tupluri
INSER T INTOINSER T INTO nume_tabel_destinaie (câmp1, câmp2,....)SELECT [domeniu] (câmp1, câmp2,....)FR OM nume tabel sur s
[WHER EWHER E criteriu de adugare a înregistrrilor în tabela destinaie];
INSER T INTOINSER T INTO [Clienti din Bucuresti] ( [Cod Fiscal], [DenumireClient], Adresa, Localitate )SELECTSELECT [Cod Fiscal],[Denumire Client], Adresa,LocalitateFR OMFR OM [Clienti Arad]WHER EWHER E [Clienti Arad].[Denumire Client]) Like ("*SRL");
SGBD A 2000 SQL M i l d t l
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 49/50
SGBD Access 2000: SQL: Manipularea datelor:Interogri cu aciune de TERGERE de tupluri
DELETE *DELETE *
FR OMFR OM nume_tabel[WHER EWHER E criteriu de tergere a înregistrrilor];
DELETE *DELETE *
FR OMFR OM [Clienti Arad]WHER E Telefon IS NULL;
SGBD Access 2000 SQL Manip larea datelor
8/7/2019 Curs BD-SQL pentru FABBV an 2
http://slidepdf.com/reader/full/curs-bd-sql-pentru-fabbv-an-2 50/50
SGBD Access 2000: SQL: Manipularea datelor:Interogri cu aciune de MODIFICARE a valorilor
UPDATEUPDATE nume_tabelSETSET nume_câmp=valoare_1
[,nume_câmp=valoare_2].....[WHER EWHER E criteriu de actualizare a valorilor tuplurilor];
UPDATEUPDATE CartiSETSET [Pret baza] = [Pret baza]*1.15WHER E (([Denumire Carte])="Baze de date")AND ((Year([Data Aparitiei]))=2005);