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