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 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.)
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.
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.
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
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 “*”
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..)
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}];
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
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)
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”;
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;
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
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
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 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.
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
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
Exp. Interogări (complexe) de selecţie şi grupare
SELECT NRFACT, SUM(CANTITATE*PRETF) AS
VALOARE
FROM [CONTINUT FACTURA]
GROUP BY NRFACT;
Exp: Interogări (complexe) de selecţie şi grupare
SELECT NRFACT, SUM(CANTITATE*PRETF) AS VALOARE
GROUP BY NRFACT
HAVING SUM(CANTITATE*PRETF)>490;
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;
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}];
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
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;
Top Related