sql structured query language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a;...

24
SGBD Access 2010: LIMBAJUL SQL SQL ( Structured Query Language )

Upload: lyliem

Post on 10-Apr-2018

274 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: LIMBAJUL SQL

SQL ( Structured

Query Language )

Page 2: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Limbajul SQL (Structured Query Language):

Este un limbaj declarativ (neprocedural) care permite o

comunicare complexă şi rapidă a utilizatorului cu bazele de

date, în funcţie de cerinţele şi restricţiile informaţionale ale

acestuia.

Prin acest limbaj utilizatorul descrie informaţiile pe care

vrea să le obţină în urma interogării, fără a preciza

algoritmii necesari pentru obţinerea rezultatelor dorite.

SQL - face parte din categoria limbajelor de aplicaţii

(orientate pe mulţimi) pentru baze de date relaţionale.

Este un limbaj standard - ca urmare principalele sale

instrucţiuni sunt recunoscute de către mai multe SGBD-uri

(Oracle, Access, Dbase, INFORMIX, DB2, Visual FoxPro.)

Page 3: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Facilităţi

Facilităţi orientate obiect ce propun definirea la

nivel de utilizator a tipurilor de date abstracte;

Structuri de control specifice: IF, FOR, WHILE

Comunicare în reţea;

Prelucrare distribuită;

Facilităţi multi-media, înglobate în modulul

Multi - Media SQL.

Pe lângă manipularea şi regăsirea datelor, SQL

efectuează şi operaţii complexe privind actualizarea

şi administrarea bazei de date.

Page 4: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL

În funcţie de rolul lor în manipularea datelor şi tranzacţiilor,

instrucţiunile SQL, pot fi grupate în:

1. instrucţiuni de definire a datelor care permit

descrierea structurii bazei de date;

2. instrucţiuni de manipulare a datelor în sensul

adăugării, modificării şi ştergerii înregistrărilor;

3. instrucţiuni de selecţie a datelor care permit

consultarea bazei de date;

4. instrucţiuni de procesare a tranzacţiilor care privesc

unităţile logice de prelucrare şi constituie în fapt,

operaţii multiple de manipulare a datelor;

5. instrucţiuni de control al cursorului;

6. instrucţiuni privind controlul accesului la date.

Page 5: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL

Cuvintele cheie ale “vocabularului” SQL (fraza SQL) sunt:

instrucţiunile, clauzele, funcţiile şi operatorii.

• Instrucţiunile: au cel mai important rol, deoarece determină

executarea unei acţiuni (SELECT; CREATE; INSERT; DELETE;

UPDATE; TRANSFORM; ALTER; DROP).

• Clauzele restricţionează aria valorică a entităţilor ce participă la

interogare (WHERE; ORDER BY; GROUP BY; HAVING).

• Funcţiile îmbunătăţesc capacităţile SQL de a manipula datele

(Sum; Max; Min; Avg; Count; Iif).

• Operatorii efectuează o comparare a valorilor selecţiei:

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

Like; In

Page 6: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

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 câmpului, atunci când o interogare are ca surse de

date mai multe tabele (SELECT Carti.Cod_ISBN);

• Se utilizează parantezele drepte (“[ ]”) pentru a încadra nume

de câmpuri interspaţiate sau purtătoare 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 “*”

Page 7: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

CREAREA UNEI INTEROGARI SQL

1. CREATE

2. QUERY DESIGN

3. CLOSE (SHOW TABLE)

4. UNION / PASS TROUGTH / DATA

DEFINITION

5. INTRODUCERE COMENZI SQL

Ex. SELECT ALL a1 FROM A;

6. RUN

7. SAVE ( SAVE AS..)

Page 8: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT

LMD: I.a. Interogări (simple) de selecţie

SELECT [domeniu ALL / DISTINCT

/ TOP n ]

<listă selecţie câmpuri>

FROM <nume tabel(e)>

[WHERE <criteriu de selecţie>]

[ORDER BY <listă câmpuri criterii

de ordonare> {ASC/DESC}];

Page 9: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Domeniul - determină modalităţile de manipulare

a înregistrărilor din BD asupra căreia operează

selecţia.

Domeniul poate fi:

• ALL (implicit) include toate înregistrările care

îndeplinesc condiţiile impuse;

• DISTINCT elimină înregistrările care au valori

duplicate în câmpurile selectate (se va afişa doar o

apariţie a datei multiple)

•TOP n – primele n

Page 10: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT

SELECT [domeniu: ALL / DISTINCT / TOP n] <listă selecţie

câmpuri>

FROM <nume tabel(e)>

[WHERE <criteriu de selecţie>]

[ORDER BY <listă câmpuri criterii de ordonare> {ASC/DESC}];

Clauza FROM nume tabel precizează tabelul sau tabelele (sau

interogări deja create) din care fac parte câmpurile ce se utilizează

pentru proiecţia BD

Listă selecţie câmpuri - reprezintă proiecţia BD, cuprinzând toate

câmpurile care vor apărea în tabelul cu rezultatele interogării

Clauza WHERE precizează criteriul de selecţie sub forma unei

expresii. Clauza este opţională şi nu operează cu funcţii totalizatoare

Clauza ORDER BY - criteriul de ordonare a înregistrărilor selectate.

Fiecare câmp precizat în Clauza ORDER BY constituie o cheie de

sortare (sensul sortării se precizează prin ASC (implicit) sau DESC)

Page 11: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT : Exemple

Tabelul A

a1 a2 a3 a4 a5 a6

Selectarea câmpurilor a1 şi a2 din A

SELECT ALL a1,a2

FROM A;

Selectarea (fără dubluri) a lui a1 şi a5

pentru care a5> 1000

SELECT DISTINCT a1,a5

FROM A

WHERE a5>1000;

Selectarea (fără 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

rădăcină precizată

SELECT DISTINCT a5

FROM A

WHERE a3 LIKE ”*text”;

Page 12: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT : Exemple

Tabelul A

a1 a2 a3 a4 a5 a6

Selectarea (fără dubluri a lui a5 <> (100,1000)

SELECT DISTINCT a5

FROM A

WHERE a5

(NOT) BETWEEN 100 AND 1000

Selectarea lui a1 şi a rezultatului a2*a5

produs dintre înregistrările tabelei A

SELECT 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 crescătoare a lui a2 şi

descrescătoare a lui a5

SELECT a2,a4,a5

FROM A

WHERE a2 IN(1500, 13000, 14000)

ORDER BY a2 ASC, a5 DESC;

Page 13: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Access 2010: SQL I.b. INTEROGARI SIMPLE CU FUNCȚII AGREGAT

SELECT funcţie_agregat1, funcţie_agregat2...

AS [Alias 1], [Alias 2], ...n,...

FROM <nume tabel(e)>

WHERE <criteriu de selecţie>

Funcții agregat:

•Count (<>Null); •Sum(nume atribut) Σ; •Min(nume atribut) ; •Max (nume atribut) •Avg (nume atribut); •Iif(([Valoare]<5000000,0,[Valoare]*0.15) AS Reducere

Page 14: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Access 2010: SQL I.b. INTEROGARI SIMPLE CU FUNCȚII AGREGAT

Tabela A

a1 a2 a3 a4 a5 a6

SELECT DISTINCT Max(a5) AS

[a5_Maxim], Min(a5) AS

[a5_Minim], Avg(a5) AS [a5_Medie]

FROM A;

SELECT COUNT(*) AS [Număr 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;

Selectarea celei mai mari / mai mici / şi

medii valori a lui a5 din tabela A

Numărarea înregistrărilor din tabela A

Selectarea rezultatului evaluării

unei condiţii, pentru care a2 este

diferit de zero

SELECT funcţie_agregat1 AS [Alias1], ...2,...

FROM <nume tabel(e)>

WHERE <criteriu de selecţie>

Obs. În lipsa opţiunii GRUP BY, la utilizarea

funcţiilor agregat, rezultatul va conţine o singură linie

Count (<>Null); Sum Σ; Min ; Max

Avg; Iif

Page 15: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

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

Page 16: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT

LMD: II Interogări (complexe) de selecţie şi grupare

SELECT [domeniu] [ listă selecţie funcţie agregat(nume câmp) AS alias] FROM nume tabel(e)

WHERE criteriu de selecţie

[GROUP BY câmp(uri) de grupare]

[HAVING criteriul câmpului de grupare] [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}];

Funcţiile de grup (agregat) permit construirea unor interogări SQL

prin care utilizatorul poate să efectueze diverse calcule pentru

grupuri de înregistrări care au câmpuri de aceeaşi valoare.

Listă selecţie se referă la una sau mai multe funcţii agregate care au

ca argumente nume de câmpuri ale tabelei(lor) bazei de date. Aceste

câmpuri trebuie să fie în mod obligatoriu numerice.

AS ALIAS asociază un pseudonim aferent rezultatului unui calcul

simplu sau unei funcţii agregat.

Page 17: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT LMD: II. Interogări (complexe) de selecţie şi grupare

SELECT [domeniu] [funcţie agregată (nume câmp) AS alias] [, listă selecţie]

FROM nume tabel(e)

WHERE criteriu de selecţie

[GROUP BY câmp(uri) de grupare]

[HAVING criteriul câmpului de grupare] [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}];

Clauza GROUP BY precizează câmpul sau câmpurile pe baza cărora

se va efectua gruparea înregistrărilor. Se pot executa funcţiile agregate

descrise în lista de selecţie pentru fiecare dintre grupurile de

înregistrări ( cu linia de Total în QBE)

Clauza GROUP BY formează grupuri de tupluri ale unei relaţii, pe

baza valorilor comune luate de un atribut.

Rezultatul unei fraze SELECT ce conţine clauza GROUP BY se

obţine prin regruparea tuturor liniilor din tabelele enumerate în

FROM, extrăgându-se câte o singură apariţie pentru fiecare valoare

distinctă a coloanei sau a grupului de coloane

Page 18: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT –

LMD: Interogări (complexe) de selecţie şi grupare

Tabela A (Conţinut 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

a1 a5=SUM(a3*a4)

100 812500

101 460000

103 775000

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ă funcţia agregată SUM asupra grupurilor;

4. Se obţine rezultatul, al cărui număr de linii coincide cu valorile distincte ale lui a1

Page 19: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Exp. Interogări (complexe) de selecţie şi grupare

SELECT NRFACT, SUM(CANTITATE*PRETF) AS

VALOARE

FROM [CONTINUT FACTURA]

GROUP BY NRFACT;

Page 20: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Exp: Interogări (complexe) de selecţie şi grupare

SELECT NRFACT, SUM(CANTITATE*PRETF) AS VALOARE

GROUP BY NRFACT

HAVING SUM(CANTITATE*PRETF)>490;

Page 21: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

Exp. Interogări (complexe) de selecţie şi grupare

SELECT NRFACT, SUM(CANTITATE*PRETF) AS

VALOARE

FROM [CONTINUT FACTURA]

WHERE CANTITATE>7

GROUP BY NRFACT

HAVING SUM(CANTITATE*PRETF)>1400;

Page 22: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT

LMD: Interogări (complexe) de selecţie şi grupare

HAVING se referă la restricţia aplicată câmpului de grupare.

Clauza WHERE acţionează înainte de gruparea înregistrărilor, în

timp ce HAVING activează restricţia 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.

SELECT [domeniu] [funcţie agregată(nume câmp) AS alias] [, listă selecţie]

FROM nume tabelă(e)

WHERE criteriu de selecţie

[GROUP BY câmp(uri) de grupare]

[HAVING criteriul câmpului de grupare] [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}];

Page 23: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

SGBD Access 2010: SQL SELECT

Tabelul A

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

a1 a5=SUM(a3*a4)

100 812500

103 775000

SELECT a1, SUM(a3*a4) AS a5

FROM A

GROUP BY a1

HAVING SUM(a3*a4) >500000;

460000

SELECT a1, SUM(a3*a4) AS a5

FROM A

WHERE a3>5

GROUP BY a1

HAVING SUM(a3*a4) >750000;

Tabela R1

a1 a5=SUM(a3*a4)

100 812500

Page 24: SQL Structured Query Language ) - cig.ase.ro · introducere comenzi sql ex. select all a1 from a; 6. run 7. save ( save as..) sgbd access 2010: sql

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;