Sunteți pe pagina 1din 9

BD Cursul 10&11&12 NP 1 / 9

C Cu ur rs su ul l 1 10 0& &1 11 1& &1 12 2


L Li im mb ba aj ju ul l S SQ QL L( ( S St tr ru uc ct tu ur re ed d Q Qu ue er ry y L La an ng gu ua ag ge e ) )
C Ca ar ra ac ct te er ri is st ti ic ci i g ge en ne er ra al le e
Limbajul SQL este un limbaj declarativ; utilizatorul descrie informaiile pe care vrea s le obin n urma
interogrii, fr a preciza algoritmii necesari pentru obinerea rezultatelor dorite. n 1986 SQL a devenit
standard ANSI (SQL-86). n ultimii ani, comitetele ANSI i ISO pentru standardizarea limbajului SQL au
adugat noi faciliti pentru gestiunea bazelor de date orientate pe obiecte i obiect-relaional. S-a ajuns astfel
la o versiune SQL3, pe cale de a deveni un standard n domeniu. Aceste faciliti se pot structura:
faciliti orientate obiect ce propun definirea la nivel de utilizator a tipurilor de date abstracte;
structuri de control specifice: IF, FOR, WHILE ce permit transformarea SQL-ului ntr-un limbaj de sine
stttor;
faciliti de comunicare n reea;
faciliti de prelucrare distribuit;
faciliti multi-media, nglobate n modulul Multi - Media SQL.

Tipuri de instruciuni
n funcie de rolul lor n manipularea datelor i tranzaciilor, instruciunile SQL, pot fi grupate astfel:
a) instruciuni de definire a datelor care permit descrierea structurii bazei de date;
b) instruciuni de manipulare a datelor n sensul adugrii, modificrii i tergerii nregistrrilor;
c) instruciuni de selecie a datelor care permit consultarea bazei de date;
d) instruciuni de procesare a tranzaciilor care privesc unitile logice de prelucrare i constituie n fapt,
operaii multiple de manipulare a datelor;
e) instruciuni de control al cursorului;
f) instruciuni privind controlul accesului la date.

Instruciuni pentru selectarea datelor- formatul frazei SELECT
S SE EL LE EC CT T [ [A AL LL L/ /D DI IS ST TI IN NC CT T/ /D DI IS ST TI IN NC CT TR RO OW W] ] l li is st t a at tr ri ib bu ut te e
F FR RO OM M l li is st t - -t ta ab be el le e
[ [W WH HE ER RE E c cr ri it te er ri iu u- -d de e- -c c u ut ta ar re e] ]
[ [G GR RO OU UP P B BY Y c cr ri it te er ri iu u- -d de e- -g gr ru up pa ar re e] ]
[ [H HA AV VI IN NG G c cr ri it te er ri iu u- -d de e- -g gr ru up pa ar re e] ]
[ [O OR RD DE ER R B BY Y c cr ri it te er ri iu u- -d de e- -o or rd do on na ar re e [ [A AS SC C| |D DE ES SC C] ]] ]; ;
Unde:
lista-atribute specific atributele ale cror valori vor fi returnate;
FROM list-tabele specific tabelele din care se vor extrage datele;
WHERE permite prin precizarea unei expresii exprimarea criteriului de
selecie;
ORDER BY precizeaz atributul dup care se va face ordonarea;
GROUP BY folosit pentru a partiiona o tabel n grupuri acordnd acestora
valori pe un atribut sau list de atribute;
HAVING specific criterii de selecie pe grupuri de tupluri.
Toate rindurile tabelei Produse:
SELECTDISTINCTROW* FROMPRODUSE;
Mumele i preul produselor avnd preul mai mare de 10000:
SELECTDISTINCTROW[DEN PROD], PRE FROMPRODUSE WHEREPRE>10000;


BD Cursul 10&11&12 NP 2 / 9
n cazul n care dorii s cunoatei denumirea produselor cu preuri ntre 19000 i 110000 lei putei fie s
introducei o expresie compus n clauza WHERE, fie s utilizai operatorul between:
SELECT[DEN PROD] FROMPRODUSE WHEREPRE >=19000 AND PRE=<110000;
sau:
SELECT[DEN PROD] FROM PRODUSE WHEREPRE BETWEEN 19000 AND 110000;
n cazul n care dorii s cunoatei produsele ale cror preuri sunt fie 110000, fie 150000, n clauza
WHERE se va folosi operatorul IN:
SELECT[DEN PROD] FROMPRODUSE WHEREPRE IN (110000,150000);
Poate fi util solicitarea ordonrii rindurilor dup calitate i pre, pornind de la preul cel mai mare din grupa
de calitate respectiv:
SELECTDISTINCTROW* FROMPRODUSE ORDERBYCALITATE, PRE DESC;
n cazul n care se dorete aflarea preului maxim, minim i mediu al produselor, blocul de cereri va utiliza
funciile corespunztoare:
SELECTDISTINCTROWMAX(PRE) AS [PRE MAX], MIN(PRE) AS [PRE MIN],
AVG(PRE) AS [PRE MEDIU]
FROMPRODUSE;
Prin clauza AS, n exemplul de mai sus, am putut modifica eticheta coloanelor ce returneaz valoarea
funciilor specificate.
Dac dorii s stabilii preul maxim al produselor grupndu-le pe caliti utilizai n blocul de cerere clauza
GROUP BY:
SELECTDISTINCTROWMAX(PRE) AS [PRE MAXIM], CALITATE
FROMPRODUSE
GROUPBYCALITATE;

De cele mai multe ori, ns, este necesar s extragem date stocate n mai multe tabele. S presupunem c
dorim s cunoatem n ce cantiti am livrat produse clienilor i care este valoarea facturat a fiecrui
produs:
SELECTDISTINCTROWPRODFACT.[NR FACT], PRODUSE.[DEN PROD], PRODFACT.[CANT FACT], PRODUSE.PRE,
PRODUSE.PRE*PRODFACT.[CANT FACT] AS VALOARE
FROMPRODUSE, PRODFACT
WHEREPRODUSE.[COD PRODUS]=PRODFACT.[COD PRODUS];
Observai n acest bloc de cerere utilizarea calificrii atributelor (precedarea numelui lor de numele tabelei
creia i aparin) i precizarea n clauza FROM a numelor celor dou tabele surs. Criteriul de compunere al
celor dou tabele este precizat n clauza WHERE.

Interogri cu subinterogri
Realizarea unor cutri mai complexe n baza de date presupune construirea unor subcereri n cadrul cererii
iniiale. S presupunem c dorim s cunoatem care sunt produsele cu preul mai mare dect al merelor:
SELECTDISTINCTROW[DEN PROD], PRE
FROMPRODUSE
WHEREPRE > (SELECTPRE FROMPRODUSE WHERE[DEN PROD]=MERE);
Utilizarea predicatelor ALL, ANY, EXIST
Domeniul de obinere a rezultatelor unei subinterogri poate fi influenat prin precizarea unuia din cuvintele
cheie: ALL, ANY i respectiv EXIST.
ALL
Se preiau rezultatele subinterogrii i, dac acestea ndeplinesc condiia cerut, se returneaz valoarea logic
True.
Exemplu :
Dac dorim s cunoatem numele produselor de calitatea nti cu preul mai mic dect al tuturor produselor
de calitatea a 2-a cererea va avea urmtoarea form:
SELECT[DEN PROD] FROMPRODUSE


BD Cursul 10&11&12 NP 3 / 9
WHERECALITATEA=1AND PRE< ALL(SELECTPRE FROMPRODUSE WHERECALITATEA=2);
ANY
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. Spre deosebire de clauza IN poate fi folosit cu diveri operatori relaionali. Cuvntul cheie
SOME are acelai rol i caracteristici ca ANY.
Exemplu:
S se returneze lista crilor din bibliotec care aparin unuia din domeniile abordate de editura ABC n anul
2000:
SELECTTITLUL_CARTII, DOMENIUL, ANUL_APARITIEI, PRET
FROMCRI
WHEREDOMENIUL= ANY (SELECTDOMENIUL FROMCRI WHEREEDITURA=ABC AND [ANUL APARIIEI]=2000);
nlocuirea lui ANY cu SOME produce un rezultat identic:
SELECTTITLUL_CARTII, DOMENIUL, ANUL_APARITIEI, PRE
FROMCARTI
WHEREDOMENIUL= SOME(SELECTDOMENIUL FROMCARTI WHEREDOMENIUL ="INFORMATICA");
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 bibliotecii exist i cri aprute nainte de anul 2001:
SELECTTITLUL_CRII, ANUL_APARIIEI
FROMCRI
WHEREEXISTS(SELECT* FROMCRI WHEREANUL_APARIIEI < 2001);
Fiecare dintre cuvintele cheie ANY, ALL i EXISTS poate s fie utilizat pentru restricionarea interogrilor i n
forma cu negaie adic prin folosirea operatorului logic NOT.
Interogri folosind operatorul UNION
Cnd utilizatorul dorete s vad rezultatele mai multor interogri SELECT n acelai timp, prin combinarea
ieirilor lor, poate utiliza UNION:
S SE EL LE EC CT T l li is st ta a_ _c ca am mp pu ur ri i F FR RO OM M t ta ab be el la a1 1
U UN NI IO ON N S SE EL LE EC CT T l li is st t _ _c ca am mp pu ur ri i F FR RO OM M t ta ab be el la a2 2
[ [G GR RO OU UP P B BY Y c ca am mp p_ _d de e_ _g gr ru up pa ar re e] ]
[ [H HA AV VI IN NG G c cr ri it te er ri iu ul l_ _d de e_ _a ag gr re eg ga ar re e] ]
[ [U UN NI IO ON N S SE EL LE EC CT T l li is st t _ _c ca am mp pu ur ri i F FR RO OM M t ta ab be el la a3 3
[ [G GR RO OU UP P B BY Y c ca am mp p_ _d de e_ _g gr ru up pa ar re e ] ]
[ [H HA AV VI IN NG G c cr ri it te er ri iu ul l_ _d de e_ _g gr ru up pa ar re e] ]] ]
[ [U UN NI IO ON N. .. .. .] ]
[ [O OR RD DE ER R B BY Y c ca am mp p_ _c cr ri it te er ri iu u_ _d de e_ _s so or rt ta ar re e] ]; ;
Exist mai multe restricii pentru instruciunile care genereaz interogri UNION i anume: numrul de
cmpuri din lista de cmpuri asociat fiecrei instruciuni SELECT i UNION SELECT trebuie s fie
acelai; este permis doar o dat utilizarea clauzei ORDER BY, dup ultima instruciune UNION SELECT;
secvena de nume din fiecare list de cmpuri trebuie s corespund unor intrri identice. Cnd se folosete
UNION, automat se vor elimina duplicatele ce apar n urma combinrii. In cazul folosirii domeniului ALL se
vor lua n considerare i valorile duplicate.
Exemple:
a) Care a fost media salariilor colaboratorilor studeni i ingineri ?
SELECTCATEGORIE, AVG(SALARIU) AS MEDIE FROMCOLABORATORI
GROUPBYCATEGORIE
HAVINGCATEGORIE = "STUDENT"
UNIONSELECTCATEGORIE, AVG(SALARIU) AS MEDIE FROMCOLABORATORI
GROUPBY CATEGORIE
HAVINGCATEGORIE = "ING";


BD Cursul 10&11&12 NP 4 / 9
b) Fie tabelele Clieni (cod, nume, localitate) i Furnizori (cod, nume, localitate). Prin utilizarea operatorului
UNION putem obine lista comun a clienilor i furnizorilor:
SELECT* FROMCLIENI
UNION
SELECT* FROMFURNIZORI
ORDERBYNUME;

Instruciuni pentru actualizarea bazei de date
Pentru inserarea unui tuplu ntr-o tabel se utilizeaz comanda INSERT:
I IN NS SE ER RT T I IN NT TO O n nu um me e- -t ta ab be el la a [ [( (n nu um me e- -a at tr ri ib bu ut t, , ) )] ] { {V VA AL LU UE ES S( (v va al lo oa ar re e, , ) )| |c ce er re er re e} }
Lista de atribute se specific n cazul n care realizrile din clauza VALUES nu corespund ordinii tuplurilor
din tabel. Dac tuplul/tuplurile inserate sunt preluate dintr-o alt tabel se va specifica comanda Select.
Exemple: Se introduce un nou tuplu n tabela Produse (avnd n structura sa atributele: cod produs,
denumire, unit. msur, pre, calitate) :
INSERTINTOPRODUSE VALUES(345,PERE,KG,12000,1);
sau:
Se introduc tupluri n tabela Produse sursa de date constituind-o tabela Nouti (care prezint aceeai
structur cu tabela Produse):
INSERTINTOPRODUSE
SELECT* FROMNOUTTI;
Actualizarea datelor dintr-o tabel se realizeaz prin comanda UPDATE care prezint urmtoarea sintax:
UPDATEnume-tabela
SET{nume-atribut=expresie,| (nume-atribut=subcerere),}
[WHEREcondiie];
Noua realizare a atributului actualizat se precizeaz prin expresie sau este returnat de subcererea precizat.
Clauza WHERE permite selectarea tuplurilor afectate de actualizare.
Exemplu:
Se majoreaz cu 1000 preul produselor de categoria a doua :
UPDATEPRODUSE
SETPRE=PRE+500
WHERECALITATE=2;
G Ge es st ti iu un ne ea a v vi ie ew w- -u ur ri il lo or r
Un view este o tabel virtual, care nu conine date, dar i confer utilizatorului posibilitatea de vizualizare a
datelor din baza de date dintr-o anumit perspectiv. Pentru definirea unui view se folosete o cerere SQL.
View-urile pot fi folosite n urmtoarele scopuri:
limiteaz accesul unor categorii de utilizatori la anumite date, mai mult sau mai puin confideniale;
permite simplificarea viziunii utilizatorilor asupra bazei de date;
asigur securitatea i confidenialitatea datelor. Fiecrui utilizator al bazei de date i sunt asignate anumite
drepturi (GRANT/REVOKE) ceea ce determin o limitare a accesului la baza de date, la obiectele bazei
de date i la efectuarea unor operaii asupra obiectelor bazei de date.
Asupra unui view se pot efectua ulterior aceleai operaii ca i asupra unei tabele, dar cu deosebirea c view-
ul nu conine date, ci este o reflectare dinamic a unei tabele. Astfel, o modificare a datelor dintr-o tabel este
automat reflectat n view-urile definite pe acea tabel. Un view se recreeaz de fiecare dat cnd este apelat,
pe baza definiiei sale stocate n dicionarul bazei de date.
Operaiile aplicate asupra view-urilor sunt:
crearea unui view cu comanda CREATE VIEW;
interogarea view-urilor - prin folosirea unei fraze SELECT;
actualizarea datelor dintr-un view folosind comanda UPDATE;
adugarea de noi date folosind comanda INSERT;


BD Cursul 10&11&12 NP 5 / 9
tergerea datelor dintr-un view cu comanda DELETE.
Crearea unui view - permite definirea unei "ferestre" prin care se pot consulta datele stocate n tabele.
C CR RE EA AT TE E V VI IE EW W n nu um me e- -v vi ie ew w [ [< <l li is st ta a a at tr ri ib bu ut te e> >] ]
A AS S S SE EL LE EC CT T s se ec cv ve en n a a- -s se el le ec ct t
[ [W WI IT TH H C CH HE EC CK K O OP PT TI IO ON N] ]
Se poate observa n sintaxa comenzii c utilizatorului i se permite:
specificarea denumirii view-ului i opional a denumirii atributelor din view, n cazul n care se dorete
redenumirea atributelor specificate n instruciunea SELECT;
specificarea interogrii (fraza SELECT);
specificarea opional a unei condiii suplimentare impuse view-ului, astfel nct s poat fi realizat
actualizarea sau inserarea datelor n view (prin utilizarea clauzei WITH CHECK OPTION).
Definirea unui view este stocat n dicionarul de date al sistemului. Odat definit view-ul, drepturile de
acces ale utilizatorilor decurg pe de o parte, din privilegiile acordate utilizatorilor asupra relaiilor pentru care
este definit view-ul i, pe de alt parte, din posibilitatea de actualizare a view-ului.
Crearea unui view simplu, care va permite selectarea unei mulimi de tupluri dintr-o tabel, se realizeaz prin
comanda:
CREATEVIEW FZ1 AS
SELECTCODFZ, DENFZ, ADRESA FROMFURNIZOR WHEREADRESA="BUCURESTI";
V Vi ie ew w c cr re ea at te ed d. .
Sursa de date o reprezint tabela Furnizor iar rezultatul returnat const n afiarea codului, denumirii i
adresei furnizorilor bucureteni. Cnd un view este creat, e afiat un mesaj "View Created". Ulterior, view-ul
poate fi vizualizat ca orice tabel:
SELECT* FROMFZ1;
unde FZ1 reprezint view-ul creat prin comanda anterioar.
Crearea unui view complex presupune utilizarea unor funcii agregat n fraza Select:
CREATEVIEWSTOC_3
(DEPOZIT, STOC_MEDIU, STOC_MAX, STOC_MIN) AS
SELECTCOD_DEP, AVG(CANTITATE), MAX(CANTITATE), MIN(CANTITATE) FROMSTOCURI
GROUPBYCOD_DEP;
n acest caz coloanele view-ului au primit nume distincte de numele atributelor existente n tabela Stocuri,
atribuirea valorilor fcndu-se n ordinea definirii atributelor n view.
n urmtorul exemplu se exemplific folosirea mai multor fraze SELECT imbricate, rezultatul returnat
reprezentnd clienii care au solicitat comenzi depozitelor alimentare:
CREATEVIEWCLIENT_A
AS SELECT* FROMCLIENT
WHERECODCLI IN(SELECTCODCLI FROMCOMANDA
WHERECODDEP IN(SELECTCODDEP FROMDEPOZIT
WHEREDENDEP LIKE "*ALIM*"));
Utilizarea opiunii WITH CHECK OPTION
Aceast opiune asigur faptul c n cazul unei operaii INSERT sau UPDATE - nu va fi adugat sau
actualizat nici un tuplu care nu se ncadreaz n condiiile specificate la definirea view-ului.
Exemplu:
CREATEVIEWSAL1
AS SELECTMARCA, NUME, SAL FROMSALARIAT
WHERESAL BETWEEN 1500000 AND 3000000
WITHCHECKOPTION;
Asupra view-urilor pot fi efectuate aceleai operaii ca asupra tabelelor pe baza crora au fost definite, cu
unele restricii:
Interogarea view-urilor
Restricii pentru interogarea view-rilor:
a) Clauza WHERE nu poate conine un atribut rezultat din aplicarea unei funcii agregat.


BD Cursul 10&11&12 NP 6 / 9
CREATEVIEWDEP1(DEPOZIT, TOTAL)
AS SELECTCOD_DEP, SUM(CANTITATE) FROMSTOCURI GROUPBYCOD_DEP;
Nu se poate specifica atributul TOTAL al vizualizrii DEP1 n clauza WHERE a unei interogri de tipul:
SELECT* FROMDEP1 WHERETOTAL>300;
Atributul TOTAL poate fi apelat numai n clauza ORDER BY.
SELECTDEPOZIT, TOTAL FROMDEP1 ORDERBYTOTAL;
b) Un atribut al view-ului rezultat n urma aplicrii unei funcii agregat, nu poate fi utilizat ulterior ca
argument al unei alte funcii agregat. Nu va putea fi executat o cerere de forma :
SELECTAVG(TOTAL) FROMDEP1;

R Re ea al li iz za ar re ea a o op pe er ra at to or ri il lo or r r re el la a i io on na al li i f fo ol lo os si in nd d l li im mb ba aj ju ul l S SQ QL L
REUNIUNEA a dou tabele R i S (RUS) prezentnd aceeai structur, unde R este format din n tupluri i
S este format din m tupluri, are ca rezultat o a treia tabel, T avnd aceeai structur cu a tabelelor surs i
coninnd m+n tupluri.
Fie cele dou tabele Clienti i ClientiNoi (tabela ClientiNoi cuprinde noii clieni creai n cursul zilei curente)
definite cu aceeai structur. Operatorul reuniune se realizeaz n Access prin dou cereri de aciune: o
cerere de tip make-table prin care se creeaz noua tabel (numit T n cadrul definiiei reuniunii) TotiClientii,
pe baza tabelei Clienti, i o cerere de aciune de tip append-query pe baza tabelei ClientiNoi.
Comenzile SQL corespunztoare celor dou cereri de aciune sunt:
SELECTCLIENTI.* INTOTOTICLIENTII FROMCLIENTI;
INSERTINTOTOTICLIENTII
SELECTCLIENTINOI.* FROMCLIENTINOI;
O a doua soluie ar consta n utilizarea operatorului union care va returna toate tuplurile din cele dou tabele
surs, Clieni i ClientiNoi, i apoi generarea tabelei TotiClientii care s stocheze toate tuplurile returnate de
operatorul union. Frazele SELECT corespunztoare sunt:
SELECT* FROMCLIENTI
UNION
SELECT* FROMCLIENTINOI;

SELECTUNION.* INTOTOTICLIENTII FROM[UNION];
INTERSECIA a dou tabele R i S (RS) prezentnd aceeai structur, genereaz o a treia tabel, T (cu
aceeai structur), coninnd tuplurile identice aparinnd att lui R ct i lui S.
Pentru exemplificare vom utiliza tabelele Clienti i ClientiDebitori care prezint aceeai structur.
Implementarea operatorului intersecie se face printr-o fraz SELECT n care se realizeaz un inner join
ntre cele dou tabele surs, Clienti i ClientiDebitori:
SELECTClient.*
FROMClienti INNERJOINClientiDebitori ONClienti.CodClient=ClientiDebitori.CodClient;
Pentru crearea tabelei T se poate executa apoi o cerere de aciune de tip make table avnd drept surs de date
cererea construit prin fraza select prezentat mai sus (cerere salvat cu numele Query1):
SELECTQuery1.* INTO T FROMQuery1;
DIFERENA dintre dou tabele R i S avnd aceeai structur (R-S), este reprezentat de tabela T
cuprinznd mulimea tuplurilor aparinnd lui R dar neaparinnd lui S.
Implementarea operatorului diferen se realizeaz construind o cerere de cutare a tuplurilor din tabela
Clienti fr corespondent n tabela ClientiDebitori. Fraza SQL corespunztoare este:
SELECTDISTINCTROW[CLIENTI].[CodClient], [CLIENTI].[NumeClient], [CLIENTI].[Localitate], [CLIENTI].[Adresa],
[CLIENTI].[Telefon]
FROMCLIENTI LEFTJOINClientiDebitori ON[CLIENTI].[CodClient] = [ClientiDebitori].[CodClient]
WHERE[ClientiDebitori].[CodClient] Is Null;
Pentru crearea tabelei T se poate construi apoi o cerere de aciune de tip make table avnd ca surs de date
cererea prezentat mai sus.


BD Cursul 10&11&12 NP 7 / 9
PRODUSUL CARTEZIAN a dou tabele R i S (RxS) este reprezentat de tabela T stocnd mulimea
perechilor obinute prin concatenarea nregistrrilor aparinnd lui R cu cele aparinnd lui S.
Pentru exemplificare vom folosi tabela Clienti i tabela Produse. Vom construi o cerere de selecie avnd
drept surs de date cele dou tabele (nelegate ntre ele) i vom cobor n grila de proiectare n rndul FIELD
atributele NumeClient din tabela Client i Denumire din tabela Produse. Fraza SELECT corespunztoare
acestei cereri de selecie este:
SELECTCLIENTI.NUMECLIENT, PRODUSE.DENUMIRE FROMCLIENTI, PRODUSE;
Tabela T se poate crea apoi printr-o cerere de aciune de tip make table.
SELECIA aplicat asupra unei tabele R stocnd n tupluri genereaz o nou tabel R1, prezentnd aceeai
structur, dar stocnd m tupluri (m<=n).
Acest operator se implementeaz prin construirea unei cereri de selecie coninnd pe rndul criteria din
grila de proiectare criteriul de selecie dorit. S presupunem c dorim s extragem din tabela Clienti toate
informaiile privind clienii bucureteni. Fraza select corespunztoare acestei cereri de selecie este:
SELECTCLIENTI.*
FROMCLIENTI
WHERECLIENTI.Localitate="Bucureti";
PROIECIA aplicat asupra unei tabele R prezentnd gradul n va genera o nou tabel R1 prezentnd
gradul m (m<=n) i stocnd acelai numr de tupluri ca i R.
i de aceast dat implementarea operatorului se va realiza prin construirea unei cereri de selecie dar n
rndul fields al grilei de proiectare se vor cobor doar o parte din atributele aparinnd structurii tabelei surs
de date.
Exemplu: Dac dorim s cunoatem numele i adresa clienilor, se va construi o cerere de selecie pe tabela
Clienti prezentnd urmtorul coninut:
SELECTCLIENTI.NumeClient, CLIENTI.Adresa FROMCLIENTI;
Considerm necesar s subliniem faptul c frazele select permit utilizarea mai multor tabele drept surs de
date (n definiia operatorilor algebrei relaionale sursa de date este reprezentat de o singur tabel) i
combinarea operatorilor de selecie i proiecie. Proiecia se realizeaz prin precizarea listei atributelor pentru
care se ntorc valori, iar selecia prin utilizarea clauzei WHERE care specific criteriul de selecie.
COMPUNEREA (JOIN) se aplic asupra a dou tabele R i S care prezint n structura lor un atribut
comun (numit atribut de jonciune) i genereaz o nou tabel T cu o structur complex format implicit din
mulimea atributelor tabelelor surs.
Operatorul de compunere se implementeaz prin fraza SELECT atunci cnd sursa de date este reprezentat
de mai multe tabele. Cel mai utilizat operator de compunere este inner join care presupune ca valorile
atributelor de compunere din cele dou tabele surs s prezinte realizri comune (egale).
SELECTCLIENTI.NumeClient, COMENZI.NrComanda, COMENZI.DataComanda
FROMCLIENTI INNERJOINCOMENZI ONCLIENTI.CodClient = COMENZI.CodClient;
n exemplul prezentat mai sus cererea de selecie returneaz numele clienilor (din tabela Clienti), numrul i
data comenzilor din tabela Comenzi, operatorul de compunere fiind un inner join. Pe lng inner join
frazele SELECT pot cuprinde i operatori de compunere de tip: left join, right join, self join, theta non-
equal.


Tema de casa
Se considera urmatorul model relational al unei BD:

MATERIALE (CodM, Denumire, Categorie, UM, StocInitial, Clasa de Calitate)
APROV(NrAprov, DataAprov, Cantitate, PretUnitar, CodM, CodF)
FURNIZORI (CodF, NumeFz, Tara, Oras, Adresa, Telefon, SoldDatorii)



BD Cursul 10&11&12 NP 8 / 9
Sa se exprime in limbajul SQL urmatoarele comenzi:

Comenzi SQL pentru descrierea datelor.
1. Creati Tabela CLIENTI cu urmatoarele campuri: CodCL, Nume, Adresa, DataInregistrare, SoldDatorii).
2. Creati Tabelul Angajati cu urmtoarele cmpuri CodAngajat, NumeAngajat, DataAngajare, SalariuBaza,
CNP. Observatii: se va limita nume angajat la 20 de caractere iar CNP la 13 caractere. Campul nume nu
trebuie sa permita valoarea NULL iar CNP trebuie sa ia valori unice.
3. In tabela Angajati se va mai adauga campurile Functia si adresa de tip text
4. In tabela Angajati se va modifica coloana Nume pentru a memora pina la 55 de caractere
5. Se va terge din tabela Clienti cmpul DataInregistrare
6. Se va elimina din baza de date tabela Clienti (nu se va executa interogarea pt a mai folosim tabela ulterior)

Comenzi SQL pentru manipularea datelor
7. Sa se adauge in tabelul angajati salariatul Ionescu Ion cu cod 101, salariu 6000000 (INSERT)
8. Sa se creeze tabelul FurnizoriBrasov cu codurile, numele i datoriile furnizorilor la care soldul datoriilor
depete 10.000.000 lei (SELECT INTO).
9. Angajatul avind codul 101 s se completeze data Angajare cu valoarea 4 aprile 2005 si sa se mareasca
salariul cu 1.000.000 lei (UPDATE).
10. Presupunnd c numele de furnizori nu au fost scrise corect s se transforme toate realizrile din cmpul
nume n majuscule (UPDATE):
11. S se terag din tabela Comenzi toate comenzile mai vechi de 400 de zile i cele provenite de la clientul
cu codul 102 (DELETE)

Instruciuni de selecie a datelor
Exemple de interogri de selectie simple:
12. Afisati toate informaiile despre materialele din categoria Consumabile
13. Afisati lista ordonata alfabetic a localitatilor din care se parovizioneaz firma de la parteneri organizai ca
societi pe aciuni:
14. Afisati lista cu numele, adresele si sumele datorate ale primilor 5 furnizori la care firma are cele mai mari
datorii.
15. Calculai pentru fiecare aprovizionare Valoarea si Valoarea in lei grei si ordonai lista descrescator dupa
Valoare iar pentru aprovizionarile cu aceeasi valoare, ordonati cronologic dupa DataAprov.
16. Afiai lista cu denumirile i StocurileInitiale ale materialelor dintr-o anumit categorile precizat ca
parametru.In cazul materialelor fara stoc initial se va preciza intr-o coloana numita Necesar textul De
aprovizionat
Exemple de interogri de selecie ce presupun gruparea datelor

17. Calculati ci furnizori are firma in fiecare localitate si afisati lista ordonata descrescator pentru
localitatile in care exista mai mult de 2 furnizori.

18. Calculai Valoarea totala a aprovizionarilor pentru fiecare luna de dup data de 01-01-2000 si afisati
rezultateledoar pentru lunile in care au existat mai mult de 3 aprovizionari.

Exemple de interogri de selectie avnd ca surs mai multe tabele



BD Cursul 10&11&12 NP 9 / 9
19. Afisati numele si adresele furnizorilor de la care s-au receptioat materiale in ultimele 100 zile
20. Caz particular : Jonctiuni externe (LEFT/RIGHT JOIN) :
De la ce furnizori nu s-a realizat nici o aprovizionare ?
21. Afisati lista cu numele materialelor achiziionate de furnizorul ABC SRL n anull 2005.

Interogari DE TIP UNION
22. Se dorete afiarea unei liste cu 3 coloane ce va conine numele i adresele clienilor i furnizorilor iar n
cea de-a treia coloan (numit Categorie) se va afia C pentru Clienti i F pentru Furnizori. (In prealabil
adaugati un client in tabela Clienti ca sa existe inregistrari)

Observaii pentru interogri UNION
- toate sursele de date trebuie s conin acelai numr de cmpuri
- cmpurile din sursele de date s fie de acelai tip
- ordinea cmpurilor trebuie s fie aceeai
Interogri Crosstab
Sintaxa:

TRANSFORM expresie
Instruciune de selecie
PIVOT campul ce urmeaza a fi afisat pe coloanele tabelului

23. Sa se realizeze o interogare de tip analiza incrucisata pentru a determina cantitatea totala comandata din
fiecare produs in fiecare an. Se vor ordona anii pe coloane si materialele pe linii.
24. Sa se determine cate aprovizionari s-au realizat din fiecare tara din fiecare material. Se vor odona
materialele pe coloane si denumirile tarilor din care provin furnizorii pe coloane

INTEROGARI CU SUBINTEROGARI
Un exemplu particular l reprezint interogrile de tip INSERT INTO ce permit adugarea de date dintr-o
tabel n alt tabel

25. Sa se adauge in tabela CLIENTI toi furnizorii din afara rii.
26. S se afieze lista cu cele mai ieftine materiale (se utilizeaz ALL)
27. S se afieze Numele furnizorilor din aceeai ar cu firma BEST SA. (se utilizeaz ANY)
28. Care sunt furnizorii a cror nume se regsesc i n tabela Clieni
29. S se diminueze cu 10% Preturile unitare din aprovizionrile provenite de la furnizori din Brasov in
ultimele 90 de zile (se utilizeaz IN)
30. S se terag din tabela matteriale toate materialele din clasa de calitate 1 care au fost aprovizionate de
mai puin de 5 ori (se utilizeaz IN) .

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