Sunteți pe pagina 1din 21

SQL

(Structured Query Language Structured Language)

Interog ri de selec ie

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 func ie de cerin ele i restric ile informa ionale ale acestuia. Printr-un limbaj declarativ (neprocedural) 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 nu este un limbaj de programare sau de sistem, ci mai curnd face parte din categoria limbajelor de aplica ii (orientate pe mul imi) pentru baze de date rela ionale. Faptul c este un limbaj standard a condus la recunoa terea principalelor sale instruc iuni de c tre mai multe SGBD-uri (Oracle, Access, Dbase, INFORMIX, DB2.)

SGBD Access 2000: SQL


Pe lng manipularea i reg sirea datelor, SQL efectueaz i opera ii complexe privind actualizarea i administrarea bazei de date. n func ie de rolul lor n manipularea datelor i tranzac iilor, instruc iunile SQL, pot fi grupate n: instruc iuni de definire a datelor care permit descrierea structurii bazei de date; instruc iuni de manipulare a datelor n sensul ad ug rii, modific rii i tergerii nregistr rilor; instruc iuni de selec ie a datelor care permit consultarea bazei de date; 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; instruc iuni de control al cursorului cursorului; instruc iuni privind controlul accesului la date date.

SGBD Access 2000: SQL


Cuvintele cheie ale vocabularului SQL (fraza SQL) sunt: instruc iunile clauzele func iile i operatorii. iunile, clauzele, operatorii. Instruc iunile au cel mai important rol, deoarece determin iunile: executarea unei ac iuni (SELECT; CREATE; INSERT; DELETE; UPDATE). 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; Avg; Count). Operatorii efectueaz o comparare a valorilor selec iei.

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 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, 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: Interog ri (simple) de selec ie (simple) SELECT [domeniu: ALL/DISTINCT/DISTINCTROW] list selec ie cmpuri FROM nume tabel (e) [WHERE criteriu de selec ie] [ORDER BY list cmpuri 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 cmpurile selectate (se va afi a doar o apari ie a datei multiple) DISTINCTROW elimin nregistr rile duplicate n ansamblul lor (nu numai pe acelea care au cmpuri duplicate)

SGBD Access 2000: SQL


SELECT [domeniu: ALL/DISTINCT/DISTINCTROW] list

SELECT

Limbajul de manipulare a datelor: Interog ri (simple) de selec ie (simple)


selec ie cmpuri FROM nume tabel (e) [WHERE criteriu de selec ie] [ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];

List selec ie cmpuri reprezint proiec ia BD, cuprinznd toate cmpurile care vor ap rea n tabela cu rezultatele interog rii (,) Clauza FROM nume tabel precizeaz tabela sau tabelele (sau interog ri deja create) din care fac parte cmpurile ce fac obiectul proiec iei BD (,) 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 precizeaz criteriul de ordonare a nregistr rilor selectate. Fiecare cmp precizat n Clauza ORDER BY constituie o cheie de sortare (sensul sort rii se precizeaz prin ASC (implicit) sau DESC)

SGBD Access 2000: SQL


Tabela A a1 a2 a3 a4 a5 a6

SELECT : Exemple
Selectarea (f r dubluri a) lui a5 > 1000

Selectarea cmpurilor a1 i a2 din A

SELECT DISTINCTROW a1,a2 FROM A


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

SELECT DISTINCT a5 FROM A WHERE a5>1000;


Selectarea lui a5 pt care a3 are o r d cin precizat

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


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

SELECT DISTINCT a5 FROM A WHERE a3 LIKE *text;


Selectarea lui a5 i a rezultatului unui produs dintre nregistr rile tabelei A

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

SELECT DISTINCT a1, a2*a5 alias Valoare FROM A

SGBD Access 2000: SQL


Tabela A a1 a2 a3 a4 a5 a6

SELECT : Exemple

Selectarea cmpurilor a2, a4 i a2 din A pt. care a2 s ia valorile 1500, 13000 i 14000, cu ordonare cresc toare a lui a1 i descresc toare a lui a5 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 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 [Num r de tupluri] FROM A

SELECT a1, a5, a6, IIF(a5>=a6;a5-a6;a6-a5) AS [func ie condi ional ] FROM A WHERE a2 IS NOT NULL;

SGBD Access 2000: SQL

SELECT

LMD: Interog ri (complexe) de selec ie i grupare 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 cmpuri de aceea i valoare valoare.
SELECT [domeniu] [func FROM nume tabel (e) WHERE criteriu de selec ie

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

selec ie]

[GROUP BY cmp(uri) de grupare] [HAVING criteriul cmpului de grupare]


[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];

List selec ie se refer la una sau mai multe func ii 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 finc ii agregat.

SGBD Access 2000: SQL

SELECT

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


SELECT [domeniu] [func FROM nume tabel (e) WHERE criteriu de selec ie

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

selec ie]

[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 c rora se va efectua gruparea nregistr rilor. Astfel, se pot executa func iile agregate descrise n lista de selec ie pentru fiecare dintre grupurile de nregistr ri ( cu Total n QBE) HAVING se refer la restric ia aplicat cmpului de grupare. Clauza WHARE ac ioneaz nainte de gruparea nregistr rilor, n timp ce HAVING activeaz restric ia dup gruparea acestora.

SGBD Access 2000: SQL


Tabela B b1 b2 b3 b4 b5 a1

SELECT

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


Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5

SELECT: SELECT: JOIN


Tabela C a1 c1 c2 c3 c4 C5 a1

LMD: Interog ri de asociere (jonc iune / compunere) intern

Compunerile echivalente (EchiCompunerile) -> utilizeaz clauza WHERE (pt selec ia nregistr rilor) asociat cu o egalitate a valorilor n cmpurile de leg tur .

SELECT [domeniu] list selec ie cmpuri din tabele diferite FROM nume tabele [WHERE criteriu de compunere [ i de selec ie]
[ORDER BY list cmpuri criterii de ordonare {ASC/DESC}];

SELECT A.a1, Sum(B.b2* SELECT A.a1, A.a2, B.b1, C.c1, C.c3 B.b3) AS Total FROM A, B FROM A, B, C WHERE A.a1=B.a1 AND A.a1=C.a1 WHERE A.a1=B.a1 AND A.a5>=10000; ORDER BY C.c3;
A compus cu B i A compus cu cu C

SGBD Access 2000: SQL


Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3

SELECT
b4 b5 a1

O compunere intern (INNER sau echivalent (echicompunere) INNER) este aceea n care liniile unui tabel sunt combinate cu liniile altui tabel, rezultnd un num r total de linii egal cu produsul num rului de linii din fiecare tabel (cazul 1 din Join Properties). LEFT OUTER JOIN (1 n) include toate nregistr rile din tabela A 1 (cardinalitate 1) i numai acele nregistr ri din tabela B 1 (cardinalitate n) pentru care valorile atributelor cheie (a1 sunt n a1) egale (cazul 2 din Join Properties). RIGHT OUTER JOIN (1 n) include toate nregistr rile din tabela 1 B (cardinalitate n) i numai acele nregistr ri din tabela A B n A (cardinalitate 1) pentru care valorile atributelor cheie (a1 sunt 1 a1) egale (cazul 3 din Join Properties).

SGBD Access 2000: SQL


Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5

SELECT : JOIN
Tabela C a1 c1 c2 c3 c4 C5 b1

SELECT [domeniu] list selec ie cmpuri din tabele diferite FROM nume tabel _1 {INNER/LEFT OUTER/RIGHT OUTER } JOIN nume tabel _2 ON criteriu asociere
[WHERE criteriu de selec ie [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;

A compus cu rezultatul compunerii dintre B i C

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 B (A.a1=B. a1 ) AND (B.b1=C.b1);

SQL

SubInterog ri SELECT n SELECT n .....


Tabela A a1 a2 a3 a4 a5 a6

O subinterogare sau o interogare imbricat presupune ca setul de rezultate ob inut de la o interogare s constituie argument pentru o alta (interogare n interogare). Subinterog ri construite pe o singur tabel SELECT [domeniu] list selec ie cmpuri FROM nume tabel [WHERE cmp > / < / >= / <= / <> / = (SELECT cmp FROM nume tabel [WHERE criteriu de selec ie]); SELECT DISTINCTROW a1 a1,a3,a5 FROM A WHERE a5 > (SELECT a5 FROM A WHERE a4=text);

SQL

SubInterog ri SELECT n SELECT n .....


Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5 a1

Subinterog ri construite pe mai multe tabele SELECT [domeniu] list selec ie cmpuri FROM nume tabel _1 [WHERE tabel _1.cmp leg tur =(SELECT cmp leg tur FROM nume tabel _2 [WHERE criteriu de selec ie pentru subinterogare]) SELECT a1 a1,a2,a5 FROM A WHERE A.a1 a1=(SELECT a1 FROM B WHERE b3>25000);

SQL

SubInterog ri SELECT n SELECT n .....


Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5 a1

Subinterog ri pentru care a fost construit o compunere SELECT [domeniu] list selec ie cmpuri FROM nume tabel _1,nume tabel _2 [WHERE tabel _1.cmp leg tur =tabel _2.cmp de leg tur AND tabel _1.cmp leg tur =(SELECT cmp de leg tur FROM nume tabel _2 [WHERE criteriu de selec ie pentru subinterogare]) SELECT a1 a1,a2,a5 FROM A,B A,B WHERE A.a1 B.a1 a1=B a1 AND A.a1 a1=(SELECT a1 FROM B WHERE b3>25000);

SQL
Tabela A a1 a2

SubInterog ri SELECT n SELECT n .....


a3 a4 a5 a6

Restric ionarea subinterog rilor

Domeniul de ob inere a rezultatelor unei subinterog ri poate fi influen at prin precizarea unuia din cuvintele cheie: ALL ANY i ALL, respectiv EXIST . Fiecare predicat (ANY, ALL, EXISTS) poate s fie utilizat i n forma cu nega ie NOT ALL: ALL se preiau rezultatele subinterog rii i, dac acestea ndeplinesc condi ia cerut , se returneaz valoarea logic True EXEMPLU: se afi eaz a2 (numele produselor) pentru care a4=1 (de calitatea nti) i a5 (pre ul) este mai mic dect pre ul a5 al tuturor a2 (produselor) pentru care A4=2 (de calitatea a 2-a) SELECT a2 FROM A WHERE a4=1 AND a5< ALL (SELECT a5 FROM A WHERE a4=2);

SQL
Tabela B b1 b2

SubInterog ri SELECT n SELECT n .....


b3 b4 b5 a1

Restric ionarea subinterog rilor

ANY/SOME: ANY/SOME are n vedere compararea valorii de ie ire a subinterog rii cu fiecare nregistrare din interogarea extern . Dac pentru fiecare nregistrare din interogare exist un rezultat al subinterog rii, se va returna valoarea logic True. Cuvntul cheie SOME are acela i rol i caracteristici ca ANY EXEMPLU: se returneaz lista unor elemente (b1, b2, b3, b4) care apar in domeniului precizat de b3 pentru restric iile b5=ABC i b4=2000 SELECT b1,b2,b3,b4 FROM B WHERE b3= ANY (SELECT b3 FROM B WHERE b5=ABC AND b4=2000);

SQL
Tabela B b1 b2

SubInterog ri SELECT n SELECT n .....


b3 b4 b5 a1

Restric ionarea subinterog rilor

EXISTS: EXISTS folose te subinterogarea ca pe o condi ie, analiznd setul de rezultate al acesteia i returnnd valoarea False dac nu exist nici o ie ire. Se poate astfel verifica existen a anumitor nregistr ri i controla ansamblul r spunsurilor date de interogare. EXEMPLU: S se verifice dac n cadrul tabelei B exist nregistr ri pentru care b4 < 2002 SELECT b2,b4 FROM B WHERE EXISTS (SELECT * FROM B WHERE b4 < 2002);

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