Sunteți pe pagina 1din 21

SQL

(Structured Query Language)



Interogri de selecie
SGBD Access 2000: 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 funcie de
cerinele i restricile 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 curnd
face 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.)
SGBD Access 2000: SQL
Pe lng manipularea i regsirea datelor, SQL efectueaz i operaii
complexe 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 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 2000: 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).
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; Avg; Count).
Operatorii efectueaz o comparare a valorilor seleciei.
SGBD Access 2000: SQL
Reguli de sintax ale unei fraze SQL:
Orice fraz SQL se va termina cu semnul ;
Se utilizeaz punctul . ca separator ntre numele tabelei i
numele cmpului, atunci cnd o interogare are ca surse de date mai
multe tabele (SELECT Materiale.Cod_ISBN);
Se utilizeaz parantezele drepte [] pentru a ncadra nume de
cpuri 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, iar
valorile de tip dat/timp se vor marca ntre #.
Caracterele de nlocuire generice sunt ? sau *
SGBD Access 2000: SQL SELECT
Limbajul de manipulare a datelor: Interogri (simple) de selecie
SELECT [domeniu: ALL/DI STI NCT/DI STI NCTROW] 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)
DISTINCTROW elimin nregistrrile duplicate n ansamblul lor
(nu numai pe acelea care au cmpuri duplicate)
SGBD Access 2000: SQL SELECT
Limbajul de manipulare a datelor: Interogri (simple) de selecie
SELECT [domeniu: ALL/DI STI NCT/DI STI NCTROW] list selecie cmpuri
FROM nume tabel(e)
[WHERE criteriu de selecie]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];
Clauza FROM nume tabel precizeaz tabela sau tabelele (sau
interogri deja create) din care fac parte cmpurile ce fac obiectul
proieciei BD (,)
List selecie cmpuri reprezint proiecia BD, cuprinznd toate
cmpurile care vor aprea n tabela cu rezultatele interogrii (,)
Clauza WHERE precizeaz criteriul de selecie sub forma unei
expresii. Clauza este opional i nu opereaz cu funcii totalizatoare
Clauza ORDER BY precizeaz 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 2000: SQL SELECT : Exemple
Tabela A
a1 a2 a3 a4 a5 a6
Selectarea cmpurilor a1 i a2 din A
SELECT DISTINCTROW a1,a2
FROM A
Selectarea (fr dubluri a) lui a5 > 1000
SELECT DISTINCT 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 (fr dubluri a) lui a5 <> (100,1000)
SELECT DISTINCT a5
FROM A
WHERE a5
(NOT) BETWEEN 100 AND 1000
Selectarea lui a5 pt care a3 are o
rdcin precizat
SELECT DISTINCT a5
FROM A
WHERE a3 LIKE *text;
Selectarea lui a5 i a rezultatului unui produs
dintre nregistrrile tabelei A
SELECT DISTINCT a1, a2*a5
alias Valoare
FROM A
SGBD Access 2000: SQL SELECT : Exemple
Tabela A
a1 a2 a3 a4 a5 a6
SELECT a2,a4,a5
FROM A
WHERE a2 IN(1500, 13000, 14000)
ORDER BY a2 ASC, a5 DESC;
SELECT DISTINCTROW 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 [funcie condiional]
FROM A
WHERE a2 IS NOT NULL;
Selectarea cmpurilor a2, a4 i a2 din A pt.
care a2 s ia valorile 1500, 13000 i 14000,
cu ordonare cresctoare a lui a1 i
descresctoare a lui a5
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
SGBD Access 2000: SQL SELECT
LMD: Interogri (complexe) de selecie i grupare
SELECT [domeniu] [funcie agregat(nume cmp) AS alias] [, list selecie]
FROM nume tabel(e)
WHERE criteriu de selecie
[GROUP BY cmp(uri) de grupare]
[HAVI NG criteriul cmpului de grupare]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];
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.
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 ALAS asociaz un pseudonim rezultatului unui calcul simplu
sau unei fincii agregat.
SGBD Access 2000: SQL SELECT
LMD: Interogri (complexe) de selecie i grupare
SELECT [domeniu] [funcie agregat(nume cmp) AS alias] [, list selecie]
FROM nume tabel(e)
WHERE criteriu de selecie
[GROUP BY cmp(uri) de grupare]
[HAVI NG 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. Astfel, se pot executa funciile
agregate descrise n lista de selecie pentru fiecare dintre grupurile de
nregistrri ( cu Total n QBE)
HAVING se refer la restricia aplicat cmpului de grupare. Clauza
WHARE acioneaz nainte de gruparea nregistrrilor, n timp ce
HAVING activeaz restricia dup gruparea acestora.
SGBD Access 2000: 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=ctiteriu text
GROUP BY b4
HAVING Sum(b3)>300000;
SELECT b1, b2, Avg(b3) AS [medie b3], Count(*) AS [Total]
FROM B
GROUP BY b3,b4
HAVING Sum(b3)>3000000 AND
Avg(b3)>250000 AND
Count (b4)>50
SGBD Access 2000: SQL SELECT: JOIN
Tabela A
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 cmpuri din tabele diferite
FROM nume tabele
[WHERE criteriu de compunere [i de selecie]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];
LMD: Interogri de asociere (jonciune / compunere) intern
Compunerile echivalente (EchiCompunerile) -> utilizeaz clauza WHERE (pt
selecia nregistrrilor) asociat cu o egalitate a valorilor n cmpurile 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, Sum(B.b2*
B.b3) AS Total
FROM A, B
WHERE A.a1=B.a1 AND
A.a5>=10000;
SGBD Access 2000: SQL SELECT
Tabela A
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
O compunere intern (INNER) sau echivalent (echicompunere)
este aceea n care liniile unui tabel sunt combinate cu liniile altui
tabel, rezultnd un numr total de linii egal cu produsul numrului
de linii din fiecare tabel (cazul 1 din Join Properties).
LEFT OUTER JOIN (1n) include toate nregistrrile din tabela
A (cardinalitate 1) i numai acele nregistrri din tabela B
(cardinalitate n) pentru care valorile atributelor cheie (a1) sunt
egale (cazul 2 din Join Properties).
RIGHT OUTER JOIN (1n) include toate nregistrrile din
tabela B (cardinalitate n) i numai acele nregistrri din tabela
A (cardinalitate 1) pentru care valorile atributelor cheie (a1)
sunt egale (cazul 3 din Join Properties).
SGBD Access 2000: SQL SELECT : JOIN
Tabela A
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
Tabela C
c1 c2 c3 c4 C5 b1
SELECT [domeniu] list selecie cmpuri din tabele diferite
FROM nume tabel_1
{I NNER/LEFT OUTER/RI GHT OUTER }J OI N nume tabel_2
ON criteriu asociere
[WHERE criteriu de selecie
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];
SELECT A.a5, B.b3, (A.a5*B.b3) AS [Produs]
FROM A
INNER JOIN B ON A.a1=B.a1
ORDER BY A.a5;
SELECT A.a1, A.a2, A.a5, B.b1, C.c1
FROM A
INNER JOIN (B INNER JOIN C ON B.b1=C.b1) ON
(A.a1=B. a1 ) AND (B.b1=C.b1);
A compus cu
rezultatul compunerii
dintre B i C
SQL SubInterogri SELECT n SELECT n .....
Tabela A
a1 a2 a3 a4 a5 a6
O subinterogare sau o interogare imbricat presupune ca setul de
rezultate obinut de la o interogare s constituie argument pentru o
alta (interogare n interogare).
SELECT [domeniu] list selecie cmpuri
FROM nume tabel
[WHERE cmp >/ </ >=/ <=/ <>/ =(SELECT cmp
FROM nume tabel
[WHERE criteriu de selecie]);
SELECT DISTINCTROW a1,a3,a5
FROM A
WHERE a5 > (SELECT a5 FROM A WHERE a4=text);
Subinterogri construite pe o singur tabel
SQL SubInterogri SELECT n SELECT n .....
Tabela A
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
SELECT [domeniu] list selecie cmpuri
FROM nume tabel_1
[WHERE tabel_1.cmp legtur=(SELECT cmp legtur
FROM nume tabel_2
[WHERE criteriu de selecie pentru subinterogare])
SELECT a1,a2,a5
FROM A
WHERE A.a1=(SELECT a1 FROM B WHERE b3>25000);
Subinterogri construite pe mai multe tabele
SQL SubInterogri SELECT n SELECT n .....
Tabela A
a1 a2 a3 a4 a5 a6
Tabela B
b1 b2 b3 b4 b5 a1
SELECT [domeniu] list selecie cmpuri
FROM nume tabel_1,nume tabel_2
[WHERE tabel_1.cmp legtur=tabel_2.cmp de legtur
AND
tabel_1.cmp legtur=(SELECT cmp de legtur
FROM nume tabel_2
[WHERE criteriu de selecie pentru subinterogare])
SELECT a1,a2,a5
FROM A,B
WHERE A.a1=B.a1
AND
A.a1=(SELECT a1 FROM B WHERE b3>25000);
Subinterogri pentru care a fost construit o compunere
SQL SubInterogri SELECT n SELECT n .....
Tabela A
a1 a2 a3 a4 a5 a6
SELECT a2 FROM A
WHERE a4=1 AND a5< ALL (SELECT a5 FROM A
WHERE a4=2);
Restricionarea subinterogrilor
Domeniul de obinere a rezultatelor unei subinterogri poate fi
influenat prin precizarea unuia din cuvintele cheie: ALL, ANY i
respectiv EXIST . Fiecare predicat (ANY, ALL, EXISTS) poate s
fie utilizat i n forma cu negaie NOT
ALL: se preiau 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 nti) i a5 (preul) este mai mic dect preul a5 al
tuturor a2 (produselor) pentru care A4=2 (de calitatea a 2-a)
SQL SubInterogri SELECT n SELECT n .....
Tabela B
b1 b2 b3 b4 b5 a1
SELECT b1,b2,b3,b4
FROM B
WHERE b3= ANY
(SELECT b3 FROM B
WHERE b5=ABC AND b4=2000);
Restricionarea subinterogrilor
ANY/SOME: are n vedere compararea valorii de ieire a
subinterogrii cu fiecare nregistrare din interogarea extern. Dac
pentru fiecare nregistrare din interogare exist un rezultat al
subinterogrii, se va returna valoarea logic True. Cuvntul cheie
SOME are acelai rol i caracteristici ca ANY
EXEMPLU: se returneaz lista unor elemente (b1, b2, b3, b4) care
aparin domeniului precizat de b3 pentru restriciile b5=ABC i
b4=2000
SQL SubInterogri SELECT n SELECT n .....
Tabela B
b1 b2 b3 b4 b5 a1
SELECT b2,b4
FROM B
WHERE EXISTS
(SELECT * FROM B
WHERE b4 < 2002);
Restricionarea subinterogrilor
EXISTS: folosete subinterogarea ca pe o condiie, analiznd setul
de rezultate al acesteia i returnnd valoarea False dac nu exist
nici o ieire. Se poate astfel verifica existena anumitor nregistrri i
controla ansamblul rspunsurilor date de interogare.
EXEMPLU: S se verifice dac n cadrul tabelei B exist nregistrri
pentru care b4 < 2002

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