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

Selectarea (fr dubluri) a lui a1 i a5 pentru care a5> 1000

SELECT ALL a1,a2 FROM A;


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

SELECT DISTINCT a1,a5 FROM A WHERE a5>1000;

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

Tabelul A a1 a2 a3 a4 a5 a6

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

Selectarea lui a1 i a rezultatului a2*a5 produs dintre nregistrrile tabelei A

SELECT a1, a2*a5 AS Valoare FROM A

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

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


Tabela A a1 a2 a3 a4 a5

I.b. INTEROGARI SIMPLE CU FUNCII AGREGAT


a6

Obs. n lipsa opiunii GRUP BY, la utilizarea funciilor agregat, rezultatul va conine o singur linie

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 100 100 100 101 101 a2 305 208 85 208 74 a3 25 10 30 8 10 a4 125000 200000 100000 200000 300000

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 a5=SUM(a3*a4) 812500 460000 775000 100 101 103

103
103

90
74

5
25

50000
300000

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 SELECT a1, SUM(a3*a4) AS a5 FROM A GROUP BY a1 HAVING SUM(a3*a4) >500000;
Tabela R a1
100 100 101 101 103 208 85 208 74 90 74 10 30 8 10 5 25 200000 100000 200000 300000 50000 300000

Tabelul A a1 100 a2 305 a3 25 a4 125000

a5=SUM(a3*a4)

100
103

812500
775000

Tabela R1

460000

a1
100

a5=SUM(a3*a4)
812500

103

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