Sunteți pe pagina 1din 17

Universitatea Babe-Bolyai din Cluj-Napoca

Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator


Departamentul de Informatica Economic Baze de date i programe

Lucrarea de laborator 6. Manipularea datelor n SQL

Problema 1. S se extrag din tabelele bazei de date toate informaiile aferente unei singure
facturi, introdus de la tastatur de ctre utilizator. De exemplu, se extrag toate datele care
urmeaz a fi listate pe factura emis ctre un client (figura de mai jos reprezint exemplul de
factur folosit pentru introducerea datelor n laboratorul 2).
Ce format v ateptai s aib datele estrase din baza de date?

Rezolvare: n esen, este necesar unirea tuturor datelor aflate n acest moment stocate n cele 5
tabele ale bazei de date. Pentru a ajunge la rezultatul final se poate proceda n dou feluri: fie
crend o singur interogare complex, fie crend mai multe interogri intermediare. Vom
compara cele dou abordri, pentru a evalua avantajele si dezavantajele.
1. Se agreg datele din toate tabelele printr-o singur nregistrare. Se unesc datele din tabelele
Parteneri, Facturi, Coninut_Fact, Produse i Istoric_Pret. Se filtreaz datele dup numrul
facturii, printr-un parametru. Se salveaz interogarea cu numele ListareFactura_1.

1
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

Se ruleaz interogarea pentru numrul facturii 1000

Se ruleaz interogarea pentru numrul facturii 6000

2. Se adopt abordarea pailor mruni, verificabili.


2.1. Se unesc datele din tabelele Parteneri, Facturi i Continut_Fact. Se salveaz interogarea cu
numele ListareFactura_21.

Se ruleaz interogarea pentru facturile cu numrul 1000 respectiv 6000.

2
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

2.2. Se unesc datele din tabelele Produse i Istoric_Pret. Se salveaz interogarea cu numele
ListareFactura_22.

Se ruleaz interogarea.

2.3. Se unesc datele din interogrile ListareFactura_21 i ListareFactura_22. Atentie: trebuie


creata o relaie ntre cmpurile CodProd din interogarea ListareFactura_21 i Prod din
interogarea ListareFactura_22.

3
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

Se ruleaz interogarea pentru factura cu numrul 1000.

Se ruleaz interogarea pentru factura cu numrul 6000.

Sunt diferene ntre rezultatele generate de ListareFactura_1 i ListareFactura_23?

Problema 2. S se extrag informaii legate de ultima tranzacie pentru fiecare produs i


stocul curent al produsului respectiv, iar datele rezultate s se stocheze permanent in baza de
date. Datele care trebuie stocate se refer la Codul produsului, Denumirea produsului i Stocul
curent dup ultima factur emis sau primit.
Observaii: o interogare de tip Select Query (cum au fost toate interogrile create pn acum),
stocheaz datele n memoria RAM a calculatorului. Ca urmare, pentru a stoca permanent datele,
rezultatul interogrii trebuie plasat ntr-un tabel care este stocat pe harddisk. Acest lucru este
posibil prin utilizarea unei interogri de aciune de tip Make Table.

Rezolvare:
1. Se creeaz o integrare care extrage ultima tranzacie pentru fiecare produs. Aceast interogare
este una de tip Select Query. Se salveaz interogarea sub numele MakeTableStoc_1.

2. Se creeaz o interogare care stocheaz n tabelul Stoc valorile stocului curent, mpreun cu
data ultimei facturi cu care s-au tranzacionat produse. Pentru a crea o interogare de tip Make
Table, se urmeaz paii:

4
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

2.1. Se creeaz, n Design View, o interogare Select Query care extrage datele necesare. n acest
caz, sursa de date este o interogare (MakeTableStoc_1) i un tabel (Produse). Se traseaz relaia
ntre cmpul CodProd al interogrii MakeTableStoc_1 i cmpul Cod al tabelului Produse,
pentru a evita extragerea unui produs cartezian.

2.2. Se convertete interogarea Select Query ntr-una Make Table prin selectarea filei Query
Tools Design, opiunea Make Table. Rezultatul este apariia ferestrei din figura urmtoare, n
care se poate introduce sau selecta tabelul de destinaie. n acest caz, deoarece tabelul Stoc nu
exist, se introduce de la tastatur denumirea lui.

2.3. Se salveaz interogarea sub denumirea MakeTableStoc_2. La execuia interogrii se va afia


un mesaj care avertizeaz c un nou tabel va fi creat i c n acesta vor fi copiate un numr de
rnduri.
Rezultatele obinute pentru aceast problem vor fi cele din figura urmtoare: structura tabelului
nou creat Stoc n care sunt stocate datele, datele extrase, respectiv codul SQL al interogrii care
n acelai timp creeaz tabelul i extrage datele care sunt stocate n acesta.

5
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

Problema 3. Se modific toate preurile curente ale produselor din tabelul Istoric_Pre cu zece
puncte procentuale (10%). Se consider c data curent este 20.10.2014.

Rezolvare:
1. Se creeaz o interogare Select Query care va extrage toate nregistrrile din tabelul
Istoric_Pret cu preul n perioada de valabilitate (data curent se afl ntre data de nceput i data
de sfrit a preului).
2. Se convertete interogarea Select Query ntr-una Update prin selectarea filei Query Tools
Design, opiunea Update. Rezultatul este apariia n cadrul zonei de output a rndului Update
To. Se introduce n linia Update To a cmpului PU expresia care calculeaz noua valoare (se
poate folosi Expression Builder), conform figurii urmtoare:

3. Se salveaz interogarea sub numele UpdateIstoricPret. Se ruleaz interogarea. O fereastr de


dialog va avertiza asupra modificrii nregistrrilor din tabel:

6
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

4. Rezultatul interogrii de tip update va fi cel din fereastra de mai jos. Pentru comparaie se
poate vedea varianta iniial a tabelului Istoric_Pre.

Problema 4. Se introduce n baza de date o nou factur primit de la Carti Online SA cu


numrul 6500 din data de 23.11.2014 cu care se achiziioneaz 100 de Carti Access 2013. S se
actualizeze valorile stocurilor din tabelul Stoc (construit la Problema 2). La modul general,
aceast problem este formulat: S se actualizeze stocul dup fiecare nou factur introdus.
Rezolvare:
1. Se introduc noile date n tabelele Facturi i Coninut_Fact.
2. Se creeaz o interogare Select Query care extrage ultima tranzacie (cea mai recenta data de
factura) pentru un cod de produs (vom folosi un parametru pentru a selecta produsul). Se
salveaz interogarea cu numele UpdateStocCumparari_1.

7
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

3. Se creeaz o a doua interogare Select Query, care extrage cantitatea aferent ultimei tranzacii.
Dat fiind c una din sursele de date este interogarea UpdateStocCumparari_1, pentru a evita
produsul cartezian, se vor crea 2 relaii: intre CodProd i Continut_Fact.CodProd respectiv ntre
MaxofData i Facturi.Data. n acest fel ne asigurm c se extrag, pe de o parte doar facturile care
au data egala cu ultima factura, iar pe de alta parte dintre facturile nregistrate cu data respectiv
doar produsul cu codul care prezint interes (introdus ca parametru). Se convertete interogarea
ntr-una de tip Make Table, iar numele tabelului creat va fi Actualizare_Stoc. Se salveaz
interogarea cu numele UpdateStocCumparari_2.

4. Se creeaz o interogare Update care adun la stocul anterior din tabelul Stoc, cantitatea de pe
aceast ultim factur. Atenie, pentru a evita produsul cartezian, se creeaz o relaie ntre
Stoc.Cod i Actualizare_Stoc.CodProd. Se salveaz interogarea cu numele
UpdateStocCumparari_3.

8
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

5. La rulare se va afia mesajul de avertizare You are about to update 1 row(s). Rezultatele
comparative (nainte de rulare i dup rulare) sunt afiate n figura urmtoare, diferenele fiind
subliniate:

Atenie: Ce se ntmpla dac se ruleaz de mai multe ori interogrile UpdateStocCumparari_2


respectiv UpdateStocCumparari_3?

Problema 5. Pentru a putea face descrcarea de gestiune (folosind metode ca FIFO sau LIFO)
e nevoie ca intrrile i ieirile s fie afiate mpreun (ntr-o interogare sau tabel). S se separe pe
o coloan toate cumprrile de produse, iar pe alt coloan toate vnzrile de produse.
Vom rezolva aceast problem astfel nct rezultatele s se stocheze ntr-un tabel denumit
Fi_Magazie care va conine cmpurile: Data Factur, Numr Factur, Cod Produs, Cantitate
Cumprat, Cantitate Vndut.

Rezolvare:
1. Se creeaz tabelul Fi_Magazie care conine coloanele indicate.

2. Se construiesc dou interogri de tip Select Query, care extrag toate cumprrile respectiv
toate vnzrile de produse. Se salveaz cu numele Fisa_Magazie_C respectiv Fisa_Magazie_V.

9
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

3. Se modific cele dou interogri din Select Query n Append Query. Modificarea se face prin
selectarea filei Query Tools Design i a opiunii Append. Rezultatul este apariia unei ferestre
n care trebuie introdus tabelul n care se face adugarea nregistrrilor (n cazul acesta tabelul
Fisa_Magazie vezi figura urmtoare)

4. n zona de output a nregistrrii apare un nou rnd n care se poate specifica n ce cmp vor fi
adugate datele. Se vor alege cmpurile de destinaie conform figurii urmtoare.

5. Se ruleaz interogrile Fisa_Magazie_C i Fisa_Magazie_V construite anterior i se constat


apariia unor ferestre de avertizare care informeaz utilizatorul c datele din tabelul
Fisa_Magazie urmeaz s fie modificate. Se accept modificrile. Se deschide tabelul
Fisa_Magazie pentru a vizualiza datele adugate prin intermediul interogrilor Append.

10
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

Atenie: Ce se ntmpla dac se ruleaz de mai multe ori interogrile UpdateStocCumparari_2


respectiv UpdateStocCumparari_3?

Problema 6. S se ofere posibilitatea tergerii din Fisa de Magazie a unor rnduri de pe


facturi. n particular, s-a constatat c s-a introdus n mod eronat pe factura 2000 produsul cu cod
20. Se vor terge toate nregistrrile din tabelul Fisa_Magazie care se refer la factura 200 i
produsul cu cod 20.
Rezolvare: Se va folosi o interogare de tip Delete Query, n care selectarea rndurilor care se
terg se face cu ajutorul a doi parametri.
1. se creeaz o interogare Select Query care extrage date din tabelul Fisa_Magazie pe baza a doi
parametri pentru cmpurile Nr_Factura i CodProd. Se salveaz sub numele DeleteFisaMagazie.
Se testeaz dac selecia cmpului de ters se face corect.
2. se transform interogarea Select Query ntr-o interogare Delete prin selectarea filei Query
Tools Design, opiunea Delete. n zona de output a nregistrrii apare un nou rnd Delete, n
care se selecteaz clauza Where. Astfel, parametrul care era criteriul de filtrare de la Select
Query devine criteriu de tergere.

11
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

3. Se salveaz interogarea i se ruleaz. Un mesaj de avertizare va afia numrul de rnduri care


urmeaz s fie terse. nregistrrile din tabelul Fisa_Magazie (comparativ nainte i dup rularea
interogrii Delete) sunt prezentate n figura urmtoare:

Atenie: Ce se ntmpl dac se ruleaz interogarea DeleteFisaMagazie cu aceeai parametri (nr


factura 2000 i cod produs 20)?

Problema 7. S se gseasc o metod alternativ de a ajunge la Fia de Magazie (creat la


Problema 5), fr dezavantajele folosirii interogrilor de tip Append Query (care sunt acestea?).
Rezolvare: La datele stocate in tabelul Fisa_Magazie se paote ajunge printr-o singur interogare
de tip Union. Metoda vizual de a crea o interogare Union. Pai:
1. Se construiesc separat interogri de tip Select Query care extrag datele necesare. n acest caz,
se construiesc cele dou interogri din figura de mai jos. Se salveaz cu numele
UnionFisaMagazie_C i UnionFisaMagazie_V. Se testeaz dac cele dou interogri produc
rezultatele ateptate.

2. Se vizualizeaz codul SQL al interogrilor Select Query (clic-dreapta pe interogare, opiunea


SQL View)

12
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

3. Se creeaz o nou interogare i se vizualizeaz n SQL View (fereastra va conine doar clauza
SELECT, care se terge).
4. Se copiaz codul SQL din prima interogare Select, se scrie de la tastatur clauza UNION,
dup care se copiaz codul SQL al celei de-a doua interogri. Atenie: interogrile Union
funcioneaz doar dac interogrile Select din care sunt compuse extrag acelai numr de
cmpuri. Se salveaz sub numele UnionFisaMagazie.

5. Se testeaz rezultatul, care va fi cel din figura urmtoare. Este cel ateptat?

6. Deoarece nu s-a realizat separarea pe coloane diferite, se modific interogrile


UnionFisaMagazie_C i UnionFisaMagazie_V conform figurii urmtoare. n esen, se introduce
artificial o coloan Cant_Vanduta care conine valoarea 0 n interogarea UnionFisaMagazie_C i
vice-versa. Atentie: trebuie pstrat aceeai ordine a cmpurilor ca i n figura urmtoare. Se
testeaza dac cele dou interogri produc rezultatele dorite.

13
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

7. Se repet punctul 4.

8. Se salveaza i se ruleaz interogarea Union. Rezultatul va fi cel din figura urmtoare.

Atenie: Care este rezultatul unei interogri de tip Join creat pe baza interogrilor
UnionFisaMagazie_C i UnionFisaMagazie_V? Cum i de ce difer fa de interogarea Union?

Problema 8. Care este ponderea fiecrui produs n totalul veniturilor din vnzri? Se salveaz
interogarea final sub numele PondereVanzariProdus.
Rezolvare:

14
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

1. Se extrage pretul de vanzare aferent fiecrei facturi de vanzare. Se va realiza o interogare de


tip Join i filtrri (asemntoare cu cele realizare n interogarea Cheltuiala totala). Rezultatul
interogrii va fi cel din figura urmtoare:

2. Se grupeaz pe produse i se calculeaz valoarea fiecrei vnzri folosind formula


PretUnitar*Cantitate*(1-Discount). Rezultatul interogrii va fi cel din figura urmtoare:

3. Se calculeaz totalul valorilor ca sum a valorilor produselor din precedenta interogare.


Rezultatul interogrii va fi cel din figura urmtoare:

4. Se unesc interogrile (ntr-un produs cartezian!) i se calculeaz procentul aferent fiecrui


produs folosind formula ValoareProdus/ValoareTotala i se rotunjete. Rezultatul interogrii va
fi cel din figura urmtoare:

Problema 9 Sa se afieze evoluia preturilor i procentele de modificare a preturilor unui


produs de la o perioada la alta. Se salveaz interogarea final sub numele EvolutiePretProdus.

Problema 10 Sa se calculeze veniturile aduse de un produs introdus de utilizator, grupate dup


preturile de vnzare (mai general formulat - S se evalueze impactul discount-urilor pentru un

15
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

produs n veniturile aduse de produsul respectiv). Se salveaz interogarea final sub numele
VenitProdus.
Problema 11 Care este profitul adus de un vnzrile unui produs ntr-o perioad aleas de
utilizator/manager (de ex. laptopuri)? Profitul se calculeaz ca sum a profiturilor aduse de
fiecare vnzare (Cantitate Vndut * (Pre Vnzare Pret Cumprare)). Se salveaz interogarea
final sub numele ProfitProdus. Care sunt cele mai profitabile produse?
Problema 12 Care sunt regiunile (localitile) care aduc cele mai mari vnzri. Dar cele din
care se fac cele mai mari aprovizionri?
Probleme Propuse
Problema 1. S se extrag numrul de abonamente valabile de fiecare tip, pentru liniile de
troleibuz. Se presupune c data curent este 15.12.2014.
Problema 2. S se extrag capacitatea total de transport a mijloacelor de transport aferente
fiecrei linii. Rezultatul s conin numrul liniei i capacitatea aferent i s fie stocat n tabelul
CapacitatiTransport.
Problema 3. Se creeaz o nou staie Fabrica de bere. S se creeze o interogare care s
introduc o staie preluat de la tastatur pe traseul liniei selectate de utilizator, avnd poziia
introdus de utilizator. La rularea interogrii se introduce staia Fabrica de Bere pe traseul liniei
25 pe poziia 2.
Sugestie: se vor utiliza un Append Query i dou Update Query.
Soluii
Problema 1

Problema 2

16
Universitatea Babe-Bolyai din Cluj-Napoca
Facultatea de tiine Economice i Gestiunea Afacerilor Lucrri de laborator
Departamentul de Informatica Economic Baze de date i programe

Problema 3

17

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