You are on page 1of 53

SQL

Structured Query Language

Interogări de selecţie

SGBD Access 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.
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 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, Visual FoxPro.)

SGBD Access: SQL
Pe lângă 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;

• instrucţiuni privind controlul accesului la date.

SGBD Access: 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).
• 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; Iif).

•Operatorii efectuează o comparare a valorilor selecţiei (=; >; >=;
< ; <= ; And; Or; Not; Between; Like; In; .

SGBD Access : 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 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 ce au spatii sau caractere neaceptate de SQL (SELECT
Materiale.[Denumire Material])

) • Elementele de tip şir de caractere se vor încadra între ghilimele (“text”). iar valorile de tip dată/timp se vor încadra între #.”) pentru a delimita elementele (parametrii) unei liste (SELECT Cod_Mat. • Caracterele de înlocuire generice . etc. Reguli de sintaxă ale unei fraze SQL: • Se utilizează virgula (“. Den_Mat.

Domeniul poate fi: • ALL (implicit) include toate înregistrările care îndeplinesc condiţiile impuse. Domeniul determină modalităţile de manipulare a înregistrărilor din BD asupra căreia operează selecţia. LMD: Interogări (simple) de selecţie SELECT [domeniu: ALL / DISTINCT / DISTINCTROW] listă selecţie câmpuri FROM nume tabelă(e) [WHERE criteriu de selecţie] [ORDER BY listă câmpuri criterii de ordonare {ASC / DESC}]. SGBD Access : SQL  SELECT I. • DISTINCT elimină înregistrările care au valori duplicate în câmpurile 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 câmpuri duplicate) .

Fiecare câmp precizat în Clauza ORDER BY constituie o cheie de sortare (sensul sortării se precizează prin ASC (implicit) sau DESC) .) 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. Listă selecţie câmpuri reprezintă proiecţia BD. cuprinzând toate câmpurile 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 câmpurile ce fac obiectul proiecţiei BD (. SGBD Access : SQL  SELECT SELECT [domeniu: ALL/DISTINCT/DISTINCTROW] listă selecţie câmpuri FROM nume tabelă(e) [WHERE criteriu de selecţie] [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}].

QUERY DESIGN 3. TABELE b) PASS-THROUGH – CATRE SERVER SQL c) DATABASE DEFINITION – C.M. SELECTARE unei variante din: a) UNION – COMBINARE CAMPURI DIN M. CLOSE in casta SHOW TABLE si apoi DESIGN 4. SGBD ACCESS 2007 .S TABELE SAU INDECSI .M.CREAREA UNEI INTEROGARI SQL PASI: 1 CREATE 2.

5. SELECT DISTINCTROW a1. RUN 8. IN FEREASTRA SQL SE INTRODUC COMENZILE SQL EXP. Design si UNION (PASS-THROUGH sau DATABASE DEFINITION) 7. SAVE . 6.a2 FROM A.

FROM A WHERE a6 LIKE ‘*text’. .a2 FROM A.a5 FROM A Selectarea câmpurilor a1 şi a2 din A WHERE a5>1000. a6 WHERE a5>1000 AND a6=”text”. SGBD Access : SQL  SELECT : Exemple Tabela A Selectarea (fără dubluri) a lui a1 şi a5 a1 a2 a3 a4 a5 a6 pentru care a5> 1000 SELECT DISTINCT a1. Selectarea (fără dubluri a) lui a5 > 1000 şi a6=şir Selectarea lui a5 pt care a6 are o SELECT DISTINCT a5 rădăcină precizată FROM A SELECT DISTINCT a5. SELECT DISTINCTROW a1.

13000 şi 14000. .SGBD Access : SQL  SELECT : Exemple Selectarea (fără dubluri a) lui a5 <> (100. SELECT a2. 13000. a4 şi a5 din A pt.a5 FROM A WHERE a2 IN(1500.a4.1000) Tabela A SELECT DISTINCT a5 FROM A a1 a2 a3 a4 a5 a6 WHERE a5 (NOT) BETWEEN 100 AND 1000. Selectarea lui a1 şi a rezultatului unui Selectarea câmpurilor a2. SELECT DISTINCT a1. a5 DESC. produs dintre înregistrările tabelei A care a2 să ia valorile 1500. a2*a5 cu ordonare crescătoare a lui a1 şi descrescătoare a lui a5 AS Valoare FROM A. 14000) ORDER BY a2 ASC.

. WHERE criteriu de selecţie Max  Iif Selectarea celei mai mari / mai mici / şi medii valori a lui a5 din tabela A SELECT DISTINCTROW Max(a5) AS [a5_Maxim].... rezultatul va conţine o singură linie SELECT funcţie_agregat1 AS [Alias]. pentru care a2 este SELECT COUNT(*) AS [Număr de tupluri] diferit de zero FROM A. Sum Σ.a6-a5) AS [Rezultat evaluare] FROM A WHERE a2 IS NOT NULL.. la utilizarea a1 a2 a3 a4 a5 a6 funcţiilor agregat. Avg. FROM nume tabelă(e) Min . SGBD Access : SQL  SELECT : Exemple Tabela A Obs. IIF(a5>=a6. În lipsa opţiunii GRUP BY. a5. a6.. Min(a5) AS [a5_Minim]. SELECT a1.2. Count (<>Null). Avg(a5) AS [a5_Medie] Numărarea înregistrărilor din tabela A FROM A. . Selectarea rezultatului evaluării unei condiţii.a5-a6.

AS ALIAS asociază un pseudonim aferent rezultatului unui calcul simplu sau unei funcţii agregat. . 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 câmpuri de aceeaşi valoare. SGBD Access : SQL  SELECT LMD: II. Aceste câmpuri trebuie să fie în mod obligatoriu numerice. 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}]. 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.

SGBD Access : SQL  SELECT LMD: 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) [GROUP BY câmp(uri) de grupare] [HAVING criteriul câmpului de grupare] [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}]. Astfel. Clauza GROUP BY precizează câmpul (câmpurile) pe baza căruia se va efectua gruparea înregistrărilor. Rezultatul unei fraze SELECT ce conţine clauza GROUP BY se obţine prin regruparea tuturor liniilor din tabelele enumerate în FROM. pe baza valorilor comune luate de un atribut. extrăgându-se câte o singură apariţie pentru fiecare valoare distinctă a coloanei sau a grupului de coloane . 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.

600. SUM(a3*a4) AS a5 FROM A a1 a2 a3 a4 GROUP BY a1. 101 208 8 200000 4.125.000 .750. 85 30 100000 3.000 103 7.Se ordonează liniile tabelei A după a1. al cărui număr de linii coincide cu valorile distincte ale lui a1 101 74 10 300000 Tabela R 103 90 5 50000 a1 a5=SUM(a3*a4) 103 74 25 300000 100 8. Se obţine rezultatul. 100 305 25 125000 1. Se constituie un grup pentru fiecare 100 valoare distinctă aferentă atributului a1. Se aplică funcţia agregată SUM asupra grupurilor.000 101 4. SGBD Access : SQL  SELECT LMD: Interogări (complexe) de selecţie şi grupare Tabela A (Conţinut Factură) SELECT a1. 100 208 10 200000 2.

în timp ce HAVING activează restricţia după gruparea acestora. prin asocierea clauzei HAVING la GROUP BY este posibilă selectarea anumitor grupuri de tupluri ce îndeplinesc un criteriu numai la nivel de grup. Clauza WHERE acţionează înainte de gruparea înregistrărilor. listă selecţie] FROM nume tabelă(e) [GROUP BY câmp(uri) de grupare] [HAVING criteriul câmpului de grupare] [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}]. . Deci. HAVING se referă la restricţia aplicată câmpului de grupare. SGBD Access : SQL  SELECT LMD: Interogări (complexe) de selecţie şi grupare SELECT [domeniu] [funcţie agregată(nume câmp) AS alias] [.

750.000 100 103 7. SUM(a3*a4) AS a5 103 FROM A 74 25 300000 WHERE a3>5 GROUP BY a1 HAVING SUM(a3*a4) >7500000.000 101 74 10 300000 100 8. .000 103 90 5 50000 SELECT a1.600. SUM(a3*a4) AS a5 FROM A Tabela A (Conţinut Factură) GROUP BY a1 a1 a2 a3 a4 HAVING SUM(a3*a4) >5000000. 100 305 25 125000 Tabela R a1 a5=SUM(a3*a4) 100 208 10 200000 100 8. SGBD Access : SQL  SELECT SELECT a1.125.125.000 85 30 100000 Tabela R1 101 208 8 200000 a1 a5=SUM(a3*a4) 4.

Count(*) AS [Total] FROM B GROUP BY b3. SELECT b1. . Avg(b3) AS [medie b3]. SGBD Access : SQL  SELECT Tabela B b1 b2 b3 b4 b5 a1 SELECT b1. b3*b4 AS [produs b3 şi b4] FROM B WHERE b2=”criteriu text” GROUP BY b5 HAVING Sum(b3*b4)>300000. b5. b4. b2. HAVING Avg(b3)>250000 AND Count (*)>5. b2.

a1.c1. .c3 AS Total FROM A.. A. C.a1. WHERE LMD:III.a2. .a1 AND ORDER BY C.a1=B... C. T2. SELECT [domeniu] listă selecţie câmpuri din tabele diferite T1. B.b2* B. [ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}]....b1.. B.. [WHERE criteriu de compunere [şi de selecţie] T2....a1=B.a1. A. Interogări de asociere (joncţiune / compunere) Tabela A internă –cu WHERETabela B Tabela C a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 a1 c1 c2 c3 c4 C5 a1 Compunerile echivalente (EchiCompunerile) -> utilizează clauza WHERE (pt selecţia înregistrărilor) asociată cu o egalitate a valorilor în câmpurile de legătură.a1 WHERE A. • SELECT A. C FROM A.a5>=10000..c3.a1.a1=C.. B.b3 A compus cu B şi A compus cu cu C SELECT A. B WHERE A.a1 AND A. FROM nume tabele T1.

[Continut Factura]. [Continut Factura]. [Cantitate]*[Pret f] AS Valoare FROM Facturi. Facturi.[Continut Factura] WHERE Facturi. Exemple: Compunerea a 2 tabele (WHERE) SELECT Facturi.[Numar Factura] = [Continut Factura].[Numar Factura]. [Cod Fiscal].[Continut Factura].Cantitate.[Pret f].[Data Facturii]. . Facturi.[Cod ISBN].[Numar Factura].

[Continut Factura].[Numar Factura]=[Continut Factura]. [Cantitate]*[Pret f] AS Valoare.[Data Facturii].[Numar Factura] AND Clienti. Clienti.[Cod Fiscal]. FROM Facturi. [Continut Factura]. Exemple: Compunerea a 3 tabele (WHERE) Click to edit Master text styles Second level ● Third level ● Fourth level ● Fifth level SELECT Facturi.[Cod Fiscal].[Pret f]. [Continut Factura].[Numar Factura].[Cod Fiscal] = Facturi. Clienti.Clienti WHERE Facturi.[Denumire Client]. Facturi.Cantitate. .

SELECT : JOIN O compunere internă (INNER) sau echivalentă Click to edit Master text (echicompunere) este aceea în care liniile unui tabel sunt combinate cu liniile altui tabel. Fourth level ● Fifth level LEFT OUTER JOIN (1n) include toate înregistrările din tabela A (cardinalitate “1”) şi numai acele înregistrări din tabela B (cardinalitate “n”) pentru care valorile atributelor cheie (a1) sunt egale (cazul 2 din Join Properties). rezultând unSecond level ● Third level număr total de linii egal cu produsul numărului de ● linii din fiecare tabel (cazul 1 din Join Properties).SQL  III. RIGHT OUTER JOIN (1n) include toate înregistrările din tabela “B” (cardinalitate “n”) şi numai acele înregistrări din tabela “A” (cardinalitate “1”) pentru care valorile atributelor cheie (a1) sunt egale (cazul 3 din Join Properties). Tabela A Tabela B a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 a1 .

c1 FROM A INNER JOIN B (INNER JOIN C ON B. A. SELECT A.a2. .b1) ON (A.b3) AS [Produs] •A compus cu FROM A rezultatul compunerii dintre B şi C INNER JOIN B ON A.a1. SELECT A.a5. a1 ).a1=B.a1. B.a1=B.b1.a5.a5*B.b3. B. C. (A.b1=C. SQL  SELECT : JOIN Tabela A Tabela B Tabela C a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 a1 c1 c2 c3 c4 c5 b1 SELECT [domeniu] listă selecţie câmpuri 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ă câmpuri criterii de ordonare {ASC/DESC}]. A.

[Cod Fiscal]. Exemple: Compunerea a 2 tabele (INNER) SELECT Facturi. [Continut Factura]. Facturi. [Continut Factura].[Numar Factura] = [Continut Factura]. [Continut Factura]. Facturi.[Numar Factura].[Numar Factura].Cantitate.[Data Facturii].[Cod ISBN].[Pret f]. . [Cantitate]*[Pret f] AS Valoare FROM Facturi INNER JOIN [Continut Factura] ON Facturi.

.[Cod Fiscal] = Facturi. Clienti. [Continut Factura].[Cod Fiscal].[Numar Factura].[Denumire Client] FROM Clienti INNER JOIN Facturi (INNER JOIN [Continut Factura] ON Facturi.[Pret f].[Cod Fiscal].Cantitate.[Numar Factura] = [Continut Factura]. [Continut Factura]. Facturi.[Data Facturii].[Numar Factura]) ON Clienti. [Cantitate]*[Pret f] AS Valoare. Clienti. Exemple: Compunerea a 3 tabele (INNER) SELECT Facturi.

[Numar Factura] = [Continut Factura]. [Cantitate]*[Pret f] AS Valoare.15) AS Reducere FROM Facturi INNER JOIN [Continut Factura] ON Facturi. [Valoare]*0.[Numar Factura]. . [Continut Factura]. IIf([Valoare]<5000000.[Numar Factura].0. [Pret f]. Exemple: DISCOUNT ÎN LINIE PE FACTURĂ SELECT Facturi. [Continut Factura].Cantitate.

Exemple: FACTURILE PE LUNA Mai 2001 SELECT Facturi.[Numar Factura]. [Continut Factura]. Year([Data Facturii]) AS Anul.[Numar Factura] = [Continut Factura]. .[Numar Factura] WHERE Month([Data Facturii])=5 AND Year([Data Facturii])=2001. [Cantitate]*[Pret f] AS Valoare FROM Facturi INNER JOIN [Continut Factura] ON Facturi. Month([Data Facturii]) AS Luna.[Cod ISBN].

a6 FROM A WHERE a5 > (SELECT a5 FROM A WHERE a6=“text”)..SQL  IV. SELECT DISTINCTROW a1.. A) Subinterogări construite pe o singură tabelă SELECT [domeniu] listă selecţie câmpuri FROM nume tabelă [WHERE câmp > / < / >= / <= / <> / = / IN (SELECT câmp FROM nume tabelă [WHERE criteriu de selecţie]). . SubInterogări SELECT în SELECT în ...a5. Tabela a1 A 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).

1119 06. a1 Tabela A executarea 1119 a1 a2 a3 a4 a5 A6 cererii principale. Care sunt elementele a1 (facturile) emise în aceeaşi zi cu elementul a1 = (factura) 1120? SELECT a1 FROM A WHERE a2 IN (SELECT a2 FROM A WHERE a1=1120).2003 rrr ttt 36 58 06.11.2003 ddd eee 45 74 pentru care există a2 condiţia 1120 06.2003 aaa bbb 30 50 a1 din tabela A.2003 . 1120 adică selecţia lui 1121 1118 05.2003 1121 06.11. Execuţia interogării se va derula în doi timpi:  executarea subcererii (SELECT a2 FROM A WHERE a1=1120) se materializează într-o singură tabelă intermediară cu o singură linie.11.11.11.

Count(*) AS NUMAR FROM (SELECT * FROM CONTRACTE WHERE [DATA]>#1/1/2006#) GROUP BY [codFZ]. .NUMĂRUL DE CONTRACTELOR INCHEIATE DUPĂ 01/05/2006 SELECT [CODFZ].

[COD-CL]=3). LOCALITATE FROM CLIENTI WHERE CLIENTI. . Care este localiatea pentru clientul cu codul=3.[COD-CL] IN (SELECT FACTURI.[COD-CL] FROM FACTURI WHERE FACTURI.[COD-CL]. care are facturi SELECT CLIENTI.

a2. SubInterogări SELECT în SELECT Tabela A în . .SQL  IV.a1=(SELECT a1 FROM B WHERE b4>25000).a5 Selectarea unor valori din A... Tabela B a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 a1 B) Subinterogări construite pe mai multe tabele Legătura dintre tabele Legătura dintre tabele se realizează prin se realizează printr-o subinterogare (fără o compunere explicită compunere explicită) (JOIN) SELECT [domeniu] listă selecţie câmpuri FROM nume tabelă_1 [WHERE tabelă_1.câmp legătură=(SELECT câmp legătură FROM nume tabelă_2 [WHERE criteriu de selecţie pentru subinterogare]) SELECT a1.. pentru FROM A o valoare restricţionată din B WHERE A..

B WHERE A..câmp de legătură AND tabelă_1.a5 FROM A.SELECT în .a2..nume tabelă_2 [WHERE tabelă_1.a1 AND A.câmp legătură=tabelă_2.câmp legătură=(SELECT câmp de legătură FROM nume tabelă_2 [WHERE criteriu de subinterogare]) SELECT a1.a1=(SELECT a1 FROM B WHERE b4>25000). Tabela B Tabela A a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 a1 C) Subinterogări pentru care a fost construită o compunere SELECT [domeniu] listă selecţie câmpuri FROM nume tabelă_1..a1=B.. .

Fiecare predicat (ANY. Restricţionarea subinterogărilor Domeniul de obţinere a rezultatelor unei subinterogări poate fi influenţat prin precizarea unuia din cuvintele cheie: ALL... EXISTS) poate să fie utilizat şi în forma cu negaţie – NOT Prin ALL. ANY şi respectiv EXIST . ANY şi EXIST permit compararea valorilor atributului/expresiei cu un set de tupluri ce tocmai a fost extras printr-o subinterogare ...în . operatorii ALL. ALL. ANY şi EXIST se utilizează un predicat de comparaţie care se aplică rezultatului unei subinterogări Dacă în cele mai multe cazuri se compara un atribut (sau rezultatul unei expresii) cu o constantă.

se returnează valoarea logică True EXEMPLU: se afişează a2 (numele produselor) pentru care a4=1 (de calitatea întâi) şi a5 (preţul) este mai mic decât preţul a5 al tuturor a2 (produselor) pentru care A4=2 (de calitatea a 2-a) SELECT a2 FROM A Numele produselor de calitatea I WHERE a4=1 AND a5< ALL pentru care preţul este mai mic decât (SELECT a5 FROM A WHERE a4=2)...... Tabela A a1 a2 a3 a4 a5 a6 Restricţionarea subinterogărilor prin operatorul ALL Prin ALL se preiau toate rezultatele subinterogării şi. preţurile produselor de calitatea a II-a . dacă acestea îndeplinesc condiţia cerută.

b4) care aparţin domeniului precizat de b3 pentru restricţiile b5=“ABC” şi b4=2000 SELECT b1. b2..b2.. . Cuvântul cheie SOME are acelaşi rol şi caracteristici ca ANY EXEMPLU: se verifica lista unor elemente (b1. b3. Dacă pentru fiecare înregistrare din interogare există un rezultat al subinterogării....b4 FROM B WHERE b3= ANY (SELECT b3 FROM B WHERE b5=”ABC” AND b4=2000). se va returna valoarea logică True. Tabela B Restricţionarea subinterogărilor b1 b2 b3 b4 b5 a1 prin operatorul ANY ANY/SOME: are în vedere compararea valorii de ieşire a subinterogării cu fiecare înregistrare din interogarea externă.b3.

Tabela B Restricţionarea subinterogărilor b1 b2 b3 b4 b5 a1 prin operatorul EXISTS EXISTS: foloseşte subinterogarea ca pe o condiţie.. .b4 FROM B WHERE EXISTS (SELECT * FROM B WHERE b4 < 2007)... EXEMPLU: Să se verifice dacă în cadrul tabelei B există înregistrări pentru care b4 < 2007 SELECT b2. analizând setul de rezultate al acesteia şi returnând valoarea False dacă nu există nicio ieşire. Se poate astfel verifica existenţa anumitor înregistrări şi controla ansamblul răspunsurilor date de interogare...

..GROUP BY acelaşi câmp de grupare )..... comparau o expresie cu o constantă. se vor include în clauza HAVING chiar subinterogări. În cazul de faţă.. FROM. predicatele incluse în clauza HAVING. Tabela B Restricţionarea subinterogărilor b1 b2 b3 b4 b5 a1 agregate prin clauza HAVING În exemplele clasice.... SELECT [domeniu] listă selecţie câmpuri şi/sau funcţii agregate FROM nume tabelă GROUP BY câmp de grupare HAVING criteriu câmp de grupare > / < / >= / <= / <> / = / (SELECT .

Predicatul ALL SELECT b2... FROM. b2 (data facturii).. Tabela B (Facturi) Restricţionarea subinterogărilor b1 NrFact b2 DataFact b3 b4 b5 a1 CodClient agregate prin clauza HAVING Care este ziua in care au fost emise cele mai multe facturi ? SELECT [domeniu] listă selecţie câmpuri şi/sau funcţii agregate FROM nume tabelă GROUP BY câmp de grupare HAVING criteriu câmp de grupare > / < / >= / <= / <> / = / (SELECT .. numărul de facturi HAVING Count(b1) >=ALL pentru fiecare dată (b2) aferent fiecărei zile cu valorile extrase (SELECT Count(b1) Selectează numărul de de subinterogare FROM B elemente distincte de tip GROUP BY b2.GROUP BY acelaşi câmp de grupare )... Count(b1) AS [Număr de facturi] aferent clauzei FROM B Se numără elementele de HAVING compară GROUP BY b2 tip b1 (număr factură).. adică numărul de facturi ce corespund fiecarei zile .. .

b2 (data facturii).GROUP BY acelaşi câmp de grupare ).... Predicatul ALL aferent clauzei SELECT b2. Tabela B Restricţionarea subinterogărilor b1 NrFact b2 DataFact b3 b4 b5 a1 CodClient agregate prin clauza HAVING Care sunt zilele in care au fost emise mai multe facturi decât pe 12/03/2006 ? SELECT [domeniu] listă selecţie câmpuri şi/sau funcţii agregate FROM nume tabelă GROUP BY câmp de grupare HAVING criteriu câmp de grupare > / < / >= / <= / <> / = / (SELECT .. aferente datei 12/03/2006 . FROM..... . al fiecărei zile cu HAVING Count(b1) >= pentru fiecare dată (b2) valorile extrase de subinterogare (SELECT Count(b1) Selectează numărul de FROM B elemente distincte de tip WHERE b2=#12/03/2006#. Count(b1) AS [Număr de facturi] HAVING compară FROM B Se numără elementele de numărul de facturi GROUP BY b2 tip b1 (număr factură).

.. COUNT(*) AS NUMARPRODUSE FROM [Continut Factura] GROUP BY [Număr Factura]). COUNT(*) AS NUMARPRODUSE FROM [Continut Factura] SELECT [domeniu] listă selecţie câmpuri şi/sau funcţii agregate FROM nume tabelă GROUP BY [Număr Factura]) GROUPHAVING BY câmp de grupare criteriu câmp de grupare > / < / >= / <= / <> / = / (SELECT . DE PRODUSE > MEDIA SELECT [Numar Factura].GROUP BY). FROM.. . HAVING COUNT(*)> X NUMĂRUL MEDIU DE PRODUSE DE PE O FACTURĂ SELECT AVG(NUMARPRODUSE) AS MEDIE FROM X (SELECT [Numar Factura]. Exemplu: FACTURILE AL CĂROR NR..

FROM... client cu valorile pentru fiecare client (a1) extrase de (SELECT Count(b1) subinterogare FROM B Selectează numărul de GROUP BY a1.... Count(b1) AS [Număr de facturi] HAVING compară FROM A INNER join B ON A.a1 numărul de facturi GROUP BY a1 aferent fiecărui Se numără elementele de HAVING Count(b1) >=ALL tip b1 (număr factură). Tabela A Tabela B a1 a2 a3 a4 a5 a6 b1 b2 b3 b4 b5 a1 CodClient NrFact CodClient Care este clientul care a primit cele mai multe facturi ? SELECT [domeniu] listă selecţie câmpuri şi/sau funcţii agregate FROM nume tabelă GROUP BY câmp de grupare HAVING criteriu câmp de grupare > / < / >= / <= / <> / = / (SELECT . elemente distincte de tip a1 (CodClient) .... Predicatul ALL aferent clauzei SELECT a1..a1=B.GROUP BY acelaşi câmp de grupare ).

b1=C. B. C numărul de WHERE A.b1 produse aferent GROUP BY a1 Se numără elementele de tip fiecărui client cu HAVING Count(c1) >=ALL c1 (număr produse). Tabela B (Facturi) b1 b2 b3 b4 b5 a1 NrFact CodClient Tabela C (LiniiProduse) Tabela A (Clienti) c1 c2 c3 c4 b1 a1 a2 a3 a4 CodProdus Nrfact CodClient Care este clientul care a cumparat cele mai multe produse ? Predicatul ALL aferent clauzei SELECT a1..a1 AND B. produsele facturate . Count(c1) AS [Număr de produse] HAVING compară FROM A..b1=C.a1=B...b1 ce apar in combinatie cu GROUP BY a1. pentru valorile extrase de fiecare client (a1) subinterogare (SELECT Count(c1) FROM B..C Selectează numărul de elemente distincte de tip a1 (CodClient) WHERE B.

CNP II. Numărul maxim de cărţi scrise HAVING ((Count(*)=(SELECT MAX(NR) AS MAXIM FROM (SELECT CNP. Câte cărţi a GROUP BY CNP)))). de cărţi SELECT AUTORI. Selectarea elementelor de afişat: numele autorului. scris fiecare autor . COUNT(*) AS NR FROM [Autori-Carti] I. Count(*) AS NR FROM AUTORI INNER JOIN [AUTORI-CARTI] ON AUTORI. CNP şi nr.CNP GROUP BY AUTORI. AUTORUL CARE A SCRIS CELE MAI MULTE CĂRŢI III.[Nume Prenume].CNP. AUTORI.CNP=[AUTORI- CARTI].

SGBD Access : SQL: UNION Dacă se doreşte să se vizualizeze rezultatele mai multor interogări SELECT în acelaşi timp. . prin combinarea ieşirilor lor. poate fi utilizată facilitatea UNION a limbajului de interogare SQL... VI. SELECT lista_campuri FROM tabela1 [GROUP BY camp_de_grupare] [HAVING criteriul_de_agregare] UNION SELECT listă_campuri FROM tabela2 [GROUP BY camp_de_grupare] [HAVING criteriul_de_agregare] [UNION SELECT listă_campuri FROM tabela3 [GROUP BY camp_de_grupare ] [HAVING criteriul_de_grupare]] [UNION.] [ORDER BY camp_criteriu_de_sortare]. Tabelele reunite trebuie să aibă aceeaşi structură.

Telefon FROM Clienti UNION SELECT [Cod Fiscal].[Denumire Client]. SGBD Access : SQL: UNION SELECT [Cod Fiscal].[Denumire Client].Telefon FROM [Clienti Arad] ORDER BY Localitate.Localitate.[Denumire Client].Localitate. .

NOT NULL [Data Apariţiei] Date NOT NULL.. [Denumire Carte] Text(50). [Pret baza] Currency NOT NULL). [Stocul tiparit] Number. LDD-LIMBAJUL DE DEFINIRE A DATELOR CREATE TABLE nume_tabelă ( nume-atribut1 tip_dată(mărime) [NOT NULL] [.nume-atribut2 tip_dată(mărime) [NOT NULL]. CONSTRAINT [Stocul tiparit] CHECK ([Stocul tiparit] BETWEEN 1000 AND 3000). . SQL: VII.] [CONSTRAINT nume-atribut CHECK (nume-atribut <condiţie>…)] [CONSTRAINT nume_index] {PRIMARY KEY|UNIQUE|NOT NULL }]). CREATE TABLE Carti ([Cod ISBN] Text(15) CONSTRAINT [Cod ISBN] Primary Key.

ALTER TABLE Carti ADD [Nume coordonator lucrare] Text(25) NOT NULL. SGBD Access : SQL: Ştergerea unei tabele DROP TABLE nume_tabelă . SGBD Access : SQL: Modificarea structurii ALTER TABLE nume_tabelă ADD nume-atribut tip_dată(mărime) [NOT NULL] [CONSTRAINT nume-atribut CHECK (nume-atribut <condiţie>…)]. . DROP TABLE [Clienti Buzau].

Adresa. Localitate INTO [Clienti din Bucuresti] FROM Clienti WHERE (Localitate="Bucuresti"). [Denumire Client]..) INTO nume tabelă nouă FROM nume tabelă sursă [WHERE criteriu de adăugare a înregistrărilor în tabela nouă]. . SGBD Access : SQL: Manipularea datelor: Interogări cu acţiune de CREARE de tabele SELECT [domeniu] (câmp1.. SELECT [Cod Fiscal].. câmp2..

câmp2.). INSERT INTO [Clienti Arad] ( [Cod Fiscal]. Narciselor nr..."Arad")...5"."Str.. SGBD Access : SQL: Manipularea datelor Interogări cu acţiune de ADĂUGARE de tupluri INSERT INTO nume_tabelă (câmp1. Localitate ) VALUES ("r732469". valoare_2.... . [Denumire Client]."SoftInfo SA".) VALUES (valoare_1.. Adresa.

SGBD Access : SQL: Manipularea datelor: Interogări cu acţiune de ŞTERGERE de tupluri DELETE * FROM nume_tabelă [WHERE criteriu de ştergere a înregistrărilor]. . DELETE * FROM [Clienti Arad] WHERE Telefon IS NULL.

nume_câmp=valoare_2].15 WHERE (([Denumire Carte])="Baze de date") AND ((Year([Data Aparitiei]))=2005).. SGBD Access : SQL: Manipularea datelor: Interogări cu acţiune de MODIFICARE a valorilor UPDATE nume_tabelă SET nume_câmp=valoare_1 [... UPDATE Carti SET [Pret baza] = [Pret baza]*1. .. [WHERE criteriu de actualizare a valorilor tuplurilor].