Sunteți pe pagina 1din 24

SGBD Access 2010: LIMBAJUL SQL

SQL ( Structured
Query Language )

Limbajul SQL (Structured Query Language):


Este un limbaj declarativ (neprocedural) care permite o
comunicare complex i rapid a utilizatorului cu bazele de
date, n funcie de cerinele i restriciile informaionale ale
acestuia.
Prin acest limbaj utilizatorul descrie informaiile pe care
vrea s le obin n urma interogrii, fr a preciza
algoritmii necesari pentru obinerea rezultatelor dorite.
SQL - face parte din categoria limbajelor de aplicaii
(orientate pe mulimi) pentru baze de date relaionale.
Este un limbaj standard - ca urmare principalele sale
instruciuni sunt recunoscute de ctre mai multe SGBD-uri
(Oracle, Access, Dbase, INFORMIX, DB2, Visual FoxPro.)

Faciliti
Faciliti orientate obiect ce propun definirea la
nivel de utilizator a tipurilor de date abstracte;
Structuri de control specifice: IF, FOR, WHILE
Comunicare n reea;
Prelucrare distribuit;
Faciliti multi-media, nglobate n modulul
Multi - Media SQL.
Pe lng manipularea i regsirea datelor, SQL
efectueaz i operaii complexe privind actualizarea
i administrarea bazei de date.

SGBD Access 2010: SQL

n funcie de rolul lor n manipularea datelor i tranzaciilor,


instruciunile SQL, pot fi grupate n:
1.

2.
3.

4.

5.
6.

instruciuni de definire a datelor care permit


descrierea structurii bazei de date;
instruciuni de manipulare a datelor n sensul
adugrii, modificrii i tergerii nregistrrilor;
instruciuni de selecie a datelor care permit
consultarea bazei de date;
instruciuni de procesare a tranzaciilor care privesc
unitile logice de prelucrare i constituie n fapt,
operaii multiple de manipulare a datelor;
instruciuni de control al cursorului;
instruciuni privind controlul accesului la date.

SGBD Access 2010: SQL


Cuvintele cheie ale vocabularului SQL (fraza SQL) sunt:
instruciunile, clauzele, funciile i operatorii.
Instruciunile: au cel mai important rol, deoarece determin
executarea unei aciuni (SELECT; CREATE; INSERT; DELETE;
UPDATE; TRANSFORM; ALTER; DROP).
Clauzele restricioneaz aria valoric a entitilor ce particip la
interogare (WHERE; ORDER BY; GROUP BY; HAVING).
Funciile mbuntesc capacitile SQL de a manipula datele
(Sum; Max; Min; Avg; Count; Iif).
Operatorii efectueaz o comparare a valorilor seleciei:

= ; > ; >= ; < ; <= ; <>; And; Or; Not; Between;


Like; In

SGBD Access 2010: SQL


Reguli de sintax ale unei fraze SQL:

Orice fraz SQL se va termina cu semnul ;


Se utilizeaz punctul (.) ca separator ntre numele tabelului
i numele cmpului, atunci cnd o interogare are ca surse de
date mai multe tabele (SELECT Carti.Cod_ISBN);
Se utilizeaz parantezele drepte ([ ]) pentru a ncadra nume
de cmpuri interspaiate sau purttoare de caractere neaceptate
de SQL (SELECT Materiale.[Denumire Material])
Se utilizeaz virgula (,) pentru a delimita elementele
(parametrii) 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 *

CREAREA UNEI INTEROGARI SQL

1.
2.
3.
4.

CREATE
QUERY DESIGN
CLOSE (SHOW TABLE)
UNION / PASS TROUGTH / DATA
DEFINITION
5. INTRODUCERE COMENZI SQL
Ex. SELECT ALL a1 FROM A;
6. RUN
7. SAVE ( SAVE AS..)

SGBD Access 2010: SQL SELECT


LMD: I.a. Interogri (simple) de selecie

SELECT [domeniu ALL / DISTINCT


/ TOP n ]
<list selecie cmpuri>
FROM <nume tabel(e)>
[WHERE <criteriu de selecie>]
[ORDER BY <list cmpuri criterii
de ordonare> {ASC/DESC}];

Domeniul - determin modalitile de manipulare


a nregistrrilor din BD asupra creia opereaz
selecia.
Domeniul poate fi:
ALL (implicit) include toate nregistrrile care
ndeplinesc condiiile impuse;
DISTINCT elimin nregistrrile care au valori
duplicate n cmpurile selectate (se va afia doar o
apariie a datei multiple)
TOP n primele n

SGBD Access 2010: SQL SELECT


SELECT [domeniu: ALL / DISTINCT / TOP n] <list selecie
cmpuri>
FROM <nume tabel(e)>
[WHERE <criteriu de selecie>]
[ORDER BY <list cmpuri criterii de ordonare> {ASC/DESC}];
List selecie cmpuri - reprezint proiecia BD, cuprinznd toate
cmpurile care vor aprea n tabelul cu rezultatele interogrii

Clauza FROM nume tabel precizeaz tabelul sau tabelele (sau


interogri deja create) din care fac parte cmpurile ce se utilizeaz
pentru proiecia BD
Clauza WHERE precizeaz criteriul de selecie sub forma unei
expresii. Clauza este opional i nu opereaz cu funcii totalizatoare
Clauza ORDER BY - criteriul de ordonare a nregistrrilor selectate.
Fiecare cmp precizat n Clauza ORDER BY constituie o cheie de
sortare (sensul sortrii se precizeaz prin ASC (implicit) sau DESC)

SGBD Access 2010: SQL SELECT : Exemple


Tabelul A
a1

a2

a3

a4

a5

a6

Selectarea cmpurilor a1 i a2 din A

SELECT ALL a1,a2


FROM A;

Selectarea (fr dubluri) a lui a1 i a5


pentru care a5> 1000

SELECT DISTINCT a1,a5


FROM A
WHERE a5>1000;

Selectarea (fr dubluri a) lui a5 > 1000 i a3=ir

SELECT DISTINCT a5
FROM A
WHERE a5>1000 AND a3=text;

Selectarea lui a5 pt care a3 are o


rdcin precizat

SELECT DISTINCT a5
FROM A
WHERE a3 LIKE *text;

SGBD Access 2010: SQL SELECT : Exemple


Selectarea (fr dubluri a lui a5 <> (100,1000)

SELECT DISTINCT a5
FROM A
WHERE a5
(NOT) BETWEEN 100 AND 1000

Selectarea cmpurilor a2, a4 i a5 din A pt.


care a2 s ia valorile 1500, 13000 i 14000,
cu ordonare cresctoare a lui a2 i
descresctoare a lui a5

SELECT a2,a4,a5
FROM A
WHERE a2 IN(1500, 13000, 14000)
ORDER BY a2 ASC, a5 DESC;

Tabelul A
a1

a2

a3

a4

a5

a6

Selectarea lui a1 i a rezultatului a2*a5


produs dintre nregistrrile tabelei A

SELECT a1, a2*a5 AS Valoare


FROM A

Access 2010: SQL I.b

INTEROGARI SIMPLE CU FUNCII AGREGAT

SELECT funcie_agregat1, funcie_agregat2...


AS [Alias 1], [Alias 2], ...n,...
FROM <nume tabel(e)>
WHERE <criteriu de selecie>
Funcii agregat:
Count (<>Null);
Sum(nume atribut) ;
Min(nume atribut) ;
Max (nume atribut)
Avg (nume atribut);
Iif(([Valoare]<5000000,0,[Valoare]*0.15) AS
Reducere

Access 2010: SQL

I.b. INTEROGARI SIMPLE CU FUNCII AGREGAT

Obs. n lipsa opiunii GRUP BY, la utilizarea


funciilor agregat, rezultatul va conine o singur linie

Tabela A
a1

a2

a3

a4

a5

a6

SELECT funcie_agregat1 AS [Alias1], ...2,...


FROM <nume tabel(e)>
WHERE <criteriu de selecie>
Selectarea celei mai mari / mai mici / i
medii valori a lui a5 din tabela A
Numrarea nregistrrilor din tabela A
Selectarea rezultatului evalurii
unei condiii, pentru care a2 este
diferit de zero

Count (<>Null);
Sum ;
Min ; Avg;
Max Iif

SELECT DISTINCT Max(a5) AS


[a5_Maxim], Min(a5) AS
[a5_Minim], Avg(a5) AS [a5_Medie]
FROM A;

SELECT COUNT(*) AS [Numr de tupluri]


FROM A;

SELECT a1, a5, a6, IIF(a5>=a6;a5-a6;a6-a5) AS [Rezultat evaluare]


FROM A
WHERE a2 IS NOT NULL;

Exemple:

Se da structura tabelelor de date:


Facturi(NrFact,Datafact, Datascad, Codfiscal)
Continut Factura(Codisbn, NrFact,Cantitate, PretF)
1. Sa se afiseze numarul si data facturilor emise pentru toti
clientii:
SELECT FACTURI.NrFact, FACTURI.datafact
FROM FACTURI;
2. Sa se afiseze cantitatea maxima si minima facturata clientilor:
SELECT MAX(CANTITATE) AS CANTITATE_MAXIMA,
MIN(CANTITATE) AS CANTITATE_MINIMA FROM
[CONTINUT FACTURA];

SGBD Access 2010: SQL SELECT

LMD: II Interogri (complexe) de selecie i grupare


Funciile de grup (agregat) permit construirea unor interogri SQL
prin care utilizatorul poate s efectueze diverse calcule pentru
grupuri de nregistrri care au cmpuri de aceeai valoare.
SELECT [domeniu] [ list selecie funcie
FROM nume tabel(e)
WHERE criteriu de selecie

agregat(nume cmp) AS alias]

[GROUP BY cmp(uri) de grupare]


[HAVING criteriul cmpului de grupare]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];

List selecie se refer la una sau mai multe funcii agregate care au
ca argumente nume de cmpuri ale tabelei(lor) bazei de date. Aceste
cmpuri trebuie s fie n mod obligatoriu numerice.

AS ALIAS asociaz un pseudonim aferent rezultatului unui calcul


simplu sau unei funcii agregat.

SGBD Access 2010: SQL SELECT


LMD: II. Interogri (complexe) de selecie i grupare
SELECT [domeniu] [funcie
FROM nume tabel(e)

agregat (nume cmp) AS alias] [, list selecie]

WHERE criteriu de selecie


[GROUP BY cmp(uri) de grupare]
[HAVING criteriul cmpului de grupare]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];

Clauza GROUP BY precizeaz cmpul sau cmpurile pe baza crora


se va efectua gruparea nregistrrilor. Se pot executa funciile agregate
descrise n lista de selecie pentru fiecare dintre grupurile de
nregistrri ( cu linia de Total n QBE)
Clauza GROUP BY formeaz grupuri de tupluri ale unei relaii, pe
baza valorilor comune luate de un atribut.
Rezultatul unei fraze SELECT ce conine clauza GROUP BY se
obine prin regruparea tuturor liniilor din tabelele enumerate n
FROM, extrgndu-se cte o singur apariie pentru fiecare valoare
distinct a coloanei sau a grupului de coloane

SGBD Access 2010: SQL SELECT

LMD: Interogri (complexe) de selecie i grupare


Tabela A (Coninut Factur)
a1

a2

a3

a4

100

305

25

125000

100

208

10

200000

85

30

100000

101

208

200000

101

74

10

300000

103

90

50000

100

SELECT a1, SUM(a3*a4) AS a5


FROM A
GROUP BY a1;
1.Se ordoneaz liniile tabelei A dup a1;
2. Se constituie un grup pentru fiecare
valoare distinct aferent atributului a1;
3. Se aplic funcia agregat SUM asupra
grupurilor;
4. Se obine rezultatul, al crui numr de
linii coincide cu valorile distincte ale lui a1
Tabela R
a1

103

74

25

300000

a5=SUM(a3*a4)

100

812500

101

460000

103

775000

Exp. Interogri (complexe) de selecie i grupare


SELECT NRFACT, SUM(CANTITATE*PRETF) AS
VALOARE
FROM [CONTINUT FACTURA]
GROUP BY NRFACT;

Exp: Interogri (complexe) de selecie i grupare


SELECT NRFACT, SUM(CANTITATE*PRETF) AS VALOARE
GROUP BY NRFACT
HAVING SUM(CANTITATE*PRETF)>490;

Exp. Interogri (complexe) de selecie i grupare

SELECT NRFACT, SUM(CANTITATE*PRETF) AS


VALOARE
FROM [CONTINUT FACTURA]
WHERE CANTITATE>7
GROUP BY NRFACT
HAVING SUM(CANTITATE*PRETF)>1400;

SGBD Access 2010: SQL SELECT

LMD: Interogri (complexe) de selecie i grupare


SELECT [domeniu] [funcie
FROM nume tabel(e)

agregat(nume cmp) AS alias] [, list selecie]

WHERE criteriu de selecie


[GROUP BY cmp(uri) de grupare]
[HAVING criteriul cmpului de grupare]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];

HAVING se refer la restricia aplicat cmpului de grupare.


Clauza WHERE acioneaz nainte de gruparea nregistrrilor, n
timp ce HAVING activeaz restricia dup gruparea acestora.
Deci, prin asocierea clauzei HAVING la GROUP BY este posibil
selectarea anumitor grupuri de tupluri ce ndeplinesc un criteriu
numai la nivel de grup.

SGBD Access 2010: SQL SELECT

Tabelul A
a1

a2

a3

a4

100

305

25

125000

SELECT a1, SUM(a3*a4) AS a5


FROM A
GROUP BY a1
HAVING SUM(a3*a4) >500000;
Tabela R
a1

100
100

a5=SUM(a3*a4)

208

10

200000

100

812500

85

30

100000

103

775000

Tabela R1
101

208

200000

101

74

10

300000

103

90

50000

103

74

25

300000

460000

a1
100

a5=SUM(a3*a4)
812500

SELECT a1, SUM(a3*a4) AS a5


FROM A
WHERE a3>5
GROUP BY a1
HAVING SUM(a3*a4) >750000;

SGBD Access 2010: SQL SELECT


Tabela B
b1

b2

b3

b4

b5

a1

SELECT b1, b2, b4, b5, b3*b4 AS [produs b3 i b4]


FROM B
WHERE b2=criteriu text
GROUP BY b4
HAVING Sum(b3*b4)>300000;

SELECT b1, b2, Avg(b3) AS [medie b3], Count(*) AS [Total]


FROM B
GROUP BY b3,
HAVING Avg(b3) > 250000 AND Count (*)>5;

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