Sunteți pe pagina 1din 85

BAZE DE DATE

SUPORT PENTRU LABORATOR









For Evaluation Only.
Copyright (c) by Foxit Software Company, 2004
Edited by Foxit PDF Editor
For Evaluation Only.
Copyright (c) by Foxit Software Company, 2004
Edited by Foxit PDF Editor
Limbaje de programare i baze de date 1






SISTEMUL DE GESTIUNE A
BAZELOR DE DATE





Principalele obiective ale capitolului sunt:

Concepte principale din teoria relaional
Cheia primar
Cheia extern
Sisteme de gestiune a bazelor de date




Sistemul de gestiune a bazelor de date (SGBD) este
componenta unui sistem de baz de date care are rolul de a permite
descrierea i manipularea conform unui model de date.
n momentul actual, cea mai mare parte a SGBD-urilor care se
utilizeaz sunt bazate pe modelul relaional.
VFP este un SGBD relaional cu limbaj propriu, care suport
un nucleu extins din limbajul relaional SQL (Structured Query
Language).







Suport pentru laborator


2

PRINCIPALELE CONCEPTE DIN TEORIA RELAIONAL

Domeniul - reprezint un ansamblu de valori, caracterizat
printr-un nume. Domeniul se poate defini explicit, prin enumerarea
tuturor valorilor care aparin acestuia (exemplu D1:{rou, galben,
albastru}), sau implicit prin precizarea proprietilor pe care le au
valorile domeniului respectiv (exemplu: D2:{e/e N }
Relaia - (tabela) reprezint un subansamblu al produsului
cartezian dintre mai multe domenii (D1xD2x) caracterizat printr-un
nume. Reprezentarea folosit pentru o relaie (R) este tabloul
bidimensional (tabela de date) de forma:



Atributul este coloana unei relaii caracterizate printr-un
nume. Fiecare atribut i ia valorile dintr-un domeniu. Mai multe
atribute pot lua valori din acelai domeniu.
Tuplul este linia dintr-o relaie i nu are nume. Valorile dintr-un
tuplu aparin produsului cartezian dintre domeniile relaiei (exemplu
tuplul v1, v2, ...,vn, unde v1D1, v2D2,...,vnDm, cu nm numere
ntregi).
Schema relaiei este un ansamblu format din numele relaiei
(R) urmat ntre parantaze rotunde de lista atributelor (Ai), pentru
fiecare atribut precizndu-se domeniul asociat (Dj):
R(A1:D1, A2:D2,...,An:Dm):
unde nm numere ntregi.
Cheia este un atribut sau un ansamblu de atribute cu ajutorul
cruia se poate identifica un tuplu dintr-o relaie.
Cheia este primar dac identificarea este unic, adic exist
un singur tuplu cu o anumit valoare pentru cheie.
Limbaje de programare i baze de date 3


Cheia este simpl, dac este format dintr-un singur atribut.
Cheia este compus dac este format dintr-un ansamblu de
atribute.
Cheia este extern ntr-o relaie R1, dac ansamblul de
atribute care o definete ia valori din aceleai domenii ca i cheia
primar a unei relaii R2 si dac are rolul de a stabili o legtura
(asociere) ntre cele dou relaii.

Prezentare comparativ a noiunilor privind organizarea
datelor n memoria extern n fiiere, baze de date relaionale (BDR)
i cele utilizate n VFP.



Intrebri:

1. Pentru tabelele FURNIZORI i FACTURI
(ANEXA 1) care sunt cheile?
2. Dai exemplu de un atribut i de un tuplu
pentru relaia FACTURI (ANEXA 1)

















Mem
extern
FISIER CMP - CHEIE - -
BDR RELAIE ATRIBUT ASOCIERE CHEIE
PRIMAR
CHEIE
EXTERN
DOMENIU
VFP TABEL CMP ASOCIERE
(LEGATURA)
CHEIE
PRIMAR
CHEIE -

Suport pentru laborator


4




GENERALITI DESPRE
APLICAIA VISUAL FOX PRO





Principalele obiective ale capitolului sunt:


Prezentarea i utilizare aplicaia Visual Fox Pro
Baze de date
Crearea, consultarea i actualizarea tabelelor




Visual Fox Pro (VFP) este un limbaj specializat n prelucrarea
datelor, grupate n baze de date, permind ntregistrarea,
pstrarea, regsirea i analiza cu uurin a acestora. O baz de
date reprezint o colecie de informaii - de exemplu nume, adrese,
produse, facturi care pot fi gestionate cu ajutorul unor aplicaii
specifice, printre care i Visual Fox Pro. Pentru o mai bun
organizare a bazelor de date sau a celorlalte obiecte, acestea sunt
grupate ntr-un proiect, care reprezint de asemenea i baza
realizrii formatului distribuibil (executabil).





Limbaje de programare i baze de date 5


UTILIZAREA APLICAIEI VISUAL FOX PRO

1. Clic pe Start
2. Activai opiunea Programs
3. Clic pe pictograma aplicaiei Visual Fox Pro

VFP dispune de o fereastr principal care cuprinde:


Elementele ferestrei VFP

Proiectele sunt formate din mai multe obiecte:
Obiect Descriere

Tabelele sunt formate din cmpuri (coloane) care
formeaz structura tabelei i nregistrri (rnduri)
reprezentnd coninutul tabelei. n cadrul fiecrui cmp
exist mai multe valori.

O baz de date trebuie s conin cel puin o tabel.

Interogri ale tabelelor sau bazelor de date, respectiv
decuparea i prezentarea datelor n funcie de anumite
condiii.

Formularele reprezint ferestre personalizate care ofer un
acces i o vizualizare facil a datelor dintr-o tabel sau o
interogare.

Rapoartele prezint datele dintr-o tabel sau o interogare
ntr-un format imprimabil.

bar de
instrumente
bar de meniu
fereastr de comenzi

Suport pentru laborator


6
CREAREA UNUI PROIECT

Pentru realizarea unui proiect, se procedeaz astfel:
1. Clic pe meniul File
2. Se activeaz opiunea New
3. Se bifeaz opiunea Project
4. Clic pe butonul New File
5. Se atribuie un nume proiectului i se salveaz n locaia dorit.



Crearea unui nou proiect

VFP pune la dispoziia utilizatorilor un coordonator al ntregii
activiti denumit Project Manager, care dispune de o fereastr cu
6 pagini ce grupeaz pe categorii elementele componente ale unui
proiect i o bar cu opiuni dependent de context.

Limbaje de programare i baze de date 7



Fereastra Project Manager fr tabele sau baze de date

n cazul n care fereastra Project Manager se nchide,
redeschiderea acesteia se realizeaz prin alegerea din meniul File a
opiunii Open i apoi prin cutarea proiectului dorit n locaia n care
a fost salvat.



CREAREA I CONSULTAREA UNEI TABELE

Crearea tabelelor se realizeaz n dou etape:
I. Crearea structurii tabelelor (creare cmpuri);
II. Crearea coninutului tabelei (ncrcarea informiilor).

Pentru crearea structurii unei tabele se procedeaz astfel:
1. Se deschide/creaz un proiect.
2. Din fereastra Project Manager se execut clic pe pagina Data.
3. Se execut clic pe opiunea Free Tables, apoi pe butonul New i
New Table.
4. Se atribuie o denumire tabelei i se allege locai n care va fi
salvat. n urma acestei aciuni rezult o fereastr denumit
Table Designer.

n fereastra Table Designer exist 3 pagini:


Suport pentru laborator


8

Fereastra Table Designer

Fields
(pagina de
cmpuri);
Indexes (pagina de
indeci);

Table (tabele),
cu informaii
despre tabel.

Pagina Fields cuprinde:

denumire cmp (name);
tip date (valori) aferente
cmpului (type);
mrimea maxim a
valorilor (width);
opiunea specific tipului de
date numeric (decimal);
indeci (index);
indicatorul Null (dac nu
exist momentan date).

Datele sunt de mai multe tipuri: numeric (numeric, real, integer,
currency, double); iruri de caractere; logic; dat calendaristic;
moment de timp; memo i general.

La acionarea butonului OK utilizatorul este interoga dac dorete
s introduc date n tabel, iar la alegerea opiunii YES se pot
introduce informaii.


Fereastra de confirmare
Limbaje de programare i baze de date 9



La revenirea n Project Manager (PM) se observ la rubrica
Free tables semnul + care arat faptul c au fost create tabele
libere (neaparinnd unei baz de date).


Feareastra Project Manager cu o tabel

n partea din dreapta a ferestrei PM, n pagina Data se
observ, exist mai multe butoane pentru diverse opiuni, astfel:

new creare tabel nou;
add adugare tabel
creat anterior;
modify modificare
structur tabel;
browse vizualizare
nregistrri tabel;
remove
eliminare/tergere tabel
din proiectul curent;
build.

Consultarea coninutului unei tabele se realizeaz astfel:
1. n Project Manager, n pagina Data se selecteaz tabela
dorit.
2. Se execut clic pe butonul Browse.


ACTUALIZAREA STRUCTURII UNEI TABELE

Actualizarea structurii unei tabele, similar cu actualizarea
coninutului, este marcat de trei operaii: adugare, modificare i
tergere a nregistrrilor, toate implicnd vizualizarea iniial a
structurii tabelei cu ajutorul butonului/comenzii Modify/Modify
structure.

Buton pentru
acces la
structura
tabelei/bazei
de date
Buton
pentru
acces la
coninutul
tabelei

Suport pentru laborator


10
A. Adugarea i modificarea cmpurilor se realizeaz astfel:

1. Din fereastra Project Manager se execut clic pe pagina Data i
se alege denumirea tabelei care trebuie actualizat.
2. Se execut clic pe butonul Modify.
3. Se realizeaz direct aciunea dorit.

B. tergerea cmpurilor se realizeaz astfel:
1. Din fereastra Project Manager se execut clic pe pagina Data i
se alege denumirea tabelei care trebuie actualizat.
2. Se execut clic pe butonul Modify.
3. Se execut clic pe denumirea cmpului care se dorete a fi ters
i apoi pe butonul Delete.


ACTUALIZAREA CONINUTULUI UNEI TABELE

Actualizarea coninutului unei tabele este marcat de trei operaii:
adugare, modificare i tergere a nregistrrilor, toate implicnd
vizualizarea iniial a coninutului tabelei cu ajutorul
butonului/comenzii Browse.

A. Adugarea nregistrrilor se realizeaz astfel:

Pentru a aduga o singur nregistrare:
1. Din fereastra Project Manager se execut clic pe pagina Data i
se alege tabele care trebuie actualizat.
2. Se execut clic pe butonul Browse.
3. Din meniul Table se activeaz opiunea Append New Record i
se adaug o nregistrare.

Pentru a aduga mai multe nregistrri:
1. Din fereastra Project Manager se execut clic pe pagina Data i
se alege tabele care trebuie actualizat.
2. Se execut clic pe butonul Browse.
3. Din meniul View se activeaz opiunea Append Mode i se
adug, rnd pe rnd mai multe nregistrri.

B. Modificarea nregistrrilor se realizeaz dup cum urmeaz:

Pentru a modifica independent nregistrrile:
Limbaje de programare i baze de date 11


1. Din fereastra Project Manager se execut clic pe pagina Data i
apoi pe butonul Browse efectundu-se apoi modificasrea pentru
nregistrarea dorit.

Pentru a modifica nregistrrile n funcie de anumite criterii
1. Din fereastra Project Manager se execut clic pe pagina Data
i apoi pe butonul Browse.
2. Din meniul Table se activeaz opiunea Replace Field.
3. Rezult o fereastr n care la opiunea Field... With... (se alege
cmpul n care va fi modificat cu informaia) completnd
Replacement Criteria (domeniul nregistrrilor = totalitatea
nregistrrilor afectate de execuia unei comenzi).


Vizualizarea coninutului tabelei i modificarea nregistrrilor

Stabilirea domeniului nregistrrilor se face :
b. static (independent de informaiile coninute n nregistrri),
utiliznd clauzele:
All se refer la toate nregistrrile;
Next de exemplu urmtoarele 4 nregistrri ncepnd
cu nregistrarea curent;
Rest se refer la nregistrarea curenta i la toate
celelalte nregistrri pn la sfritul tabelei;
Record nregistrarea a patra, de exemplu.
c. dinamic (n funcie de informaiile coninute n nregistrri)
utiliznd:

Suport pentru laborator


12
for <condiie> se refer la toate nregistrrile din tabel
pentru care condiia este adevarat;
while <condiie> se refer la nregistrrile cuprinse ntre
nregistrarea curent i prima nregistrare pentru care
condiia este fals.


C. tergerea nregistrrilor se realizeaz n dou moduri

a) tergere logic, acest tip de tergere permind recuperarea
nregistrrilor.
1. Se vizulizeaz coninutul tabelei.
2. Se acioneaz cu mouse-ul spaiul de tergere aflat n stnga
nregistrrii care se dorete a fi tears logic, moment n care
nregistrarea va fi marcat. nregistrarea poate fi recuperat
executnd un clic pe celai spaiu.


tergerea logic a nregistrrilor

Pentru tergerea unor nregistrri care ndeplinesc o anumit
condiie se utilizeaz din meniul Table opiunea Delete Records. n
fereastra rezultat se stabilete domeniul nregistrrilor.

b) tergere fizic, acest tip de tergere nepermind recuperarea
nregistrrilor.
1. Se vizualizeaz coninutul tabelei.
2. Se terg logic nregistrrile dorite.
3. Din meniul Table se alege opiunea Remove Deleted Records
apoi se execut clic pe butonul Yes.

Limbaje de programare i baze de date 13



Confirmarea tergerii fizice a unei nregistrri


Intrebri:

Care sunt componentele unei tabele?
Cum se construiete o tabel n Visual Fox Pro?
Ce nseamn actualizarea coninutului unei
tabele? Cum se actualizeaz coninutul unei
tabele?
Prezentati modul de vizualizare a coninututlui
unei tabele.
Prezentai modul de actualizare a structurii unei
tabele.


Studiu individual

Aplicaia 1: Creare i actualizare tabel.


APLICAIA 1

Creai o tabel urmtoarea structur:

Nume C 30
Prenume C 30
Cod N 3
Oras C 20
Medie N 6 ; 2
Admis L




Suport pentru laborator


14
i cu urmtorul coninut :
Nume Prenume Cod Oras Medie Admis
Ionescu Maria 1 Iasi 9.27
Vlad Mirela 8 Deva 9.50
Georgecu Ana 5 Cluj 8.85
Popescu Denisa 4 Arad 9.33
Rauta Andreea 6 Deva 9.50
Stanciu Roxana 2 Deva 9.10
Radulescu Ruxandra 3 Cluj 9.29
Matei Iuliana 7 Ploiesti 9.60

a) S se adauge un nou cmp, denumit Admis.

b) Se presupune c doar candidatele cu medii peste 9.25 au fost
admise. S se completeze valorile corespunztoare pentru
cmpul Admis.

c) Candidatele din Deva sunt de fapt din Bucureti. S se modifice
valorile corespunztoare din cmpul ora, stabilind domeniul
nregistrrilor cu for.

d) S se adauge nregistrarea:

Cretulescu Alexandra 9 Orastie 8.00 F

e) S se tearg logic nregistrrile aferente candidatelor care au
obinut medie mai mic dect 9.10, utiliznd opiunea Delete
Record i stabilind domeniul nregistrrilor cu for.

f) S se tearg fizic nregistrrile terse logic la punctul anterior.












Limbaje de programare i baze de date 15






Baze de date. Sortare. Indexare





Principalele obiective ale capitolului sunt:


Crearea unei baze de date
nelegerea conceptelor de sortare i indexare
nelegerea noiunii de index. Tipuri de indeci
Validare la nivel de cmp i nregistrare



CREAREA UNEI BAZE DE DATE

O baz de date este format din una sau mai multe tabele cu
legturi ntre ele i eventual secvene de cod. Pentru crearea unei
baze de date se parcurge urmtoarea succesiune de pai:
1. Se creaz un nou proiect, rezultnd pagina Project Manager.
2. Din pagina Data se selecteaz opiunea Databases, se execut
clic pe butonul New i se creaz o baza de date, rezultnd o
fereastr denumit Database Designer.
3. n fereastra Project Manager se execut click pe semnul +
aprut n faa denumirii bazei de date. Se selecteaz opiunea
Tables i se execut clic pe butonul New.


Suport pentru laborator


16

Fereastra Database Designer

Fereastra Project Manager cu o
tabel i o baz de date


SORTAREA I INDEXAREA UNEI TABELE

Sortarea reprezint ordonarea fizic a nregistrrilor unei tabele. n
urma sortrii rezult o noua tabel n care nregistrrile sunt
aranjate ntr-o anumita ordine.
Ordonarea fizic a nregistrrilor tabelei se realizeaz utiliznd
instruciunea:
sort on <denumire cmp> to <denumire fisier nou>
Aceasta va fi aadar scris n fereastra de comenzi, urmat de
apsarea butonului Enter de la tastatur.
Pentru a vizualiza coninutul noii tabele, mai nti aceasta se
deschide, utiliznd comanda use <denumire fiier nou>. Se
execut comanda browse.

Indexarea reprezint ordonarea logic a nregistrrilor unei tabele.
n urma indexrii nregistrrile tabelei sunt vizualizate ntr-o
anumit ordine, dat de index.
Se pot stabili mai muli indeci dar numai unul este activ la un
moment dat.
Indexul poate fi :
Regular (normal)
Unique (unic), adic ntr-un cmp pot fi introduse valori egale,
dar prin alegerea acestui tip de index doar prima n ordinea
apariiei va fi accesibil
Limbaje de programare i baze de date 17


Primary (primar), adic cel care asigur identificarea unic a
nregistrrilor unei tabele. Acest tip de index poate fi stabilit
doar dac tabela face parte dintr-o baz de date. Pentru o
tabel se poate stabili un singur index primar. Indexul primar
oblig ca toate valorile din cmpul ales s fie distincte.
Candidate (candidat), utilizat n cazul n care ntr-o tabela este
nevoie de mai multe cmpuri cu valori distincte. Deoarece se
poate stabili doar un singur index primar, pentru celelalte
cmpuri n care sunt necesare valori distincte, se aleg indeci
de tip candidat.


MODUL DE STABILIRE A INDECILOR

a) Din fereastra Project Manager se selecteaz denumirea tabelei
care face parte din baza de date.
b) Se execut un clic pe butonul Modify.
c) n fereastra care rezult, denumit Table designer, n pagina
Fields se execut un clic pe cmpul care va fi stabilit ca index.
d) Din opiunea Index se alege Ascending (cresctor) sau
Descending (descresctor), adc valorile din cmpul respectiv vor fi
ordonate cresctor/descresctor.


Fereastra Table Designer opiunile Ascending/Descending

g) Din fereastra Table designer , pagina Indexes , optiunea Type
se alege tipul de index dorit.


Suport pentru laborator


18

Fereastra Table Designer tipuri de indeci


MODUL DE ACTIVARE A INDECILOR

a) Se vizualizeaza coninutul tabelei.
b) Din meniul Table se selecteaz optiunea Properties. Din pagina
Index order se alege denumirea cmpului care se dorete a fi
activat.
c) Se execut clic pe butonul OK.


Fereastra de activare unui index
Limbaje de programare i baze de date 19



Alte opiuni aferente unei tabele dintr-o baz de date


1. Se selecteaza denumirea tabelei din fereastra Project Manager,
se executa Modify.
2. n pafina Fields , n josul paginii exist anumite opiuni care vor fi
utlizate dup cum urmeaz:

Format: stabilete un format de editare pentru valorile unui
cmp, de exemplu formatul a permite introducerea numai a
literelor i a cifrelor.
Cum se procedeaz ?
Se executa clic pe cmpul dorit i n opiunea Format se scrie litera
a.

Input mask : permite stabilirea unei mti de intrare, de
exemplu, stabilirea faptului c prima litera va fi majuscul
Cum se procedeaza ?
Se executa clic pe campul dorit i n opiunea Input mask se
scrie : !aaaaaaaaaa.

Caption : permite stabilirea unei denumiri mai lungi pentru
cmpuri
Cum se procedeaz ?
Se execut clic pe cmpul cruia se dorete a se modifica
denumirea i n opiunea Caption se scrie denumirea dorit, avnd
un numr mai mare de caractere dect cel permis n mod uzual.

Field Validation : permite validarea la nivel de cmp, adic
interzice ieirea din acel cmp dac informaia introdus nu a
corespuns unei cerine.

Suport pentru laborator


20
Cum se procedeaz ?
Se executa clic pe cmpul ales i n opiunea Rule se scrie condiia,
n opiune Message existnd posibilitatea scrierii unui measaj.
Observaie : mesajul va fi afiat cnd condiia de validare la nivelul
cmpului nu este respectat.

n pagina Table exist urmtoarele opiuni :



Record Validation : se poate realiza validarea la nivel de
nregistrare
Cum se procedeaz ?
n opiunea Rule se scrie condiia, n opiune Message se va scrie
un mesaj corespunztor, aferent nclcrii condiiei.
Obs : mesajul va fi afiat cnd condiia de validare la nivelul
nregistrrilor nu este respectat.

Insert trigger : limiteaz introducerea de noi nregistrri
Cum se procedeaz ?
n opiunea Insert trigger se scrie condiia utiliznd, de exemplu,
RECNO()< sau > o valoare.

Update trigger : restricioneaz modificarea denumirii oricrui
cmp din tabel.
Limbaje de programare i baze de date 21


Cum se procedeaz ?
n opiunea Update trigger se scrie .F.

Delete trigger : interzice tergerea oricrei nregistrri din
tabel, de exemplu se interzice tergerea unei nregistrri.
Cum se procedeaz ?
n opiunea Delete trigger se scrie RECNO()#<numr nregistrare>

Table comment: permite adugarea unui comentariu referitor
la nregistrrile, structura sau utilitatea tabelei.
Tot n cadrul acestei pagini se regsesc i informaii despre locaia
pe hard disk unde se afl tabela, precum i numrul de nregistrri i
de cmpuri.

Observaie:
pentru a vizualiza data n ordine azi/luna/an, n fereastra de
comenzi se execut comanda set date to dmy
pentru a vizualiza anul de forma 1998 in loc de 98 se execut
comanda set century on


Intrebri:

Care este diferena dintre o tabel i o baz de
date?
Ce nseamn sortarea? Dar indexarea?
Care sunt diferenele dintre cele dou
concepte?
Ce semnific noiunile de validare la nivel de
cmp i validare la nivel de nregistrare?




Studiu individual

APLICAIA 2: Creare baz de date, creare
tabel, stabilire i activare indeci, utilizarea
opiunilor suplimentare privind tabelele (validare
la nivel de cmp i la nivel de nregistrare).





Suport pentru laborator


22
APLICAIA 2

S se creeze baza de date denumit STUDENT n care se
afl o tabel cu urmtoarea structur:

Marca N 4
Nume C 30
Prenume C 30
Oras C 20
Data_ang D 8
Salariu N 10

i cu urmtorul coninut :

Marca Nume Prenume Oras Data_ang Salariu
1 Ionescu Maria Iasi 11.01.00 500
13 Vlad Mirela Deva 04.04.99 600
134 Radu Andrei Cluj 12.07.03 350
140 Stan Denisa Arad 03.11.01 380
7 Rauta Andreea Deva 07.30.00 650
18 Stanciu Alex Brasov 08.15.98 400
39 Radulescu Ruxandra Cluj 09.16.00 260
57 Matei Iuliana Ploiesti 10.10.02 390
241 Cretulescu Alexandra Orastie 02.11.03 100
114 Filip Carmen Oradea 03.01.02 850

1. S se sorteze tabela. S se vizualizeze coninutul tebelei
rezultate.
2. S se stabileasc urmtorii indeci: marca index de tip primar
i ora index de tip normal.
3. S se activeze pe rnd indecii stabilii la puncul anterior.
4. S se stabileasc pentru cmpul ora formatul a.
5. s se stabileasc faptul c pentru cmpul ora prima liter va fi
majuscul.
6. S se stabileasc pentru cmpul ora o denimre mai lung,
respectiv: Locul nasterii angajatului
7. Regula de validare la nivelul cmpului marca nu permite valori
mai mici dect 250. S se stabileasc acest regul i, n cazul
n care aceasta este nclcat s se afieze mesajul: Marca
trebuie sa fie mai mica decat 250.
8. Introducei o nou nregistrare n care valoarea din cmpul
marca s ncalce regula. Ce se ntmpl?
Limbaje de programare i baze de date 23


9. Regula de validare la nivelul nregistrrilor stabilete ca salariul
s nu fie mai mic dect 300. S se stabileasc acest regul i,
n cazul n care aceasta este nclcat s se afieze mesajul:
Salariul trebuie sa fie mai mare decat 300.
10. Introducei o nou nregistrare n care valoarea din cmpul
salariu s ncalce regula. Ce se ntmpl?
11. Limitai introducerea de noi nregistrri la 14 i apoi introducei o
nou nregistrare. Ce se ntmpl?
12. Restricionai modificarea denumirii oricrui cmp din tabel.
Verificai.
13. Interzicei tergerea primei nregistrri. Verificai.
14. Adugai urmtorul comentariu referitor la tabel: Aceasta tabela
este utilizata pentru evidenta salaratilor firmei ALFA SRL, de la
infiintare pana in prezent.

























Suport pentru laborator


24




BAZE DE DATE. LEGTURI NTRE TABELE





Principalele obiective ale capitolului sunt:


Prezentarea tipurilor de legturi ntre tabelele
aparinnd unei baze de date




ntre doua sau mai multe tabele aparinnd unei baze de date se
pot stabili dou tipuri de legturi (relaii):
1. legturi temporare : valabile n cadrul sesiunii de lucru curente
2. legturi permanente : valabile ori de cte ori se deschide baza
de date, se construiesc o singur dat i fac parte integrant din
baza de date
La stabilirea unei relaii ntre dou tabele una dintre tabele are rol
conductor, fiind denumit tabela-printe i cealalt tabel este
condus, fiind denumit tabela-fiu.

Legturile se stabilesc pe baza unui cmp comun celor dou tabele,
pentru valori egale aflate n acele cmpuri. Pentru tabela-printe
acest cmp se numete cheie primar, iar pentru tabela-fiu cmpul
se numete cheie extern.
Limbaje de programare i baze de date 25


De asemenea se impune o precizare: cheia primar reprezint un
cmp ale crui valori au rol unic de identificare a fiecrei
nregistrri. De exemplu, CNP este cheie primar ntr-o tabel cu
informaii despre populaia unui ora, deoarece fiecare cetean are
un singur CNP, deci fiecere nregistrare va fi unic, nu pot exista
dou nregistrri cu aceeai valoare CNP.

Stabilirea legturilor temporare i a legturilor permanente
presupune realizarea simultan a trei condiii:
a) existena unei baze de date cu cel puin dou tabele ;
b) n tabela-printe cmpul comun este index primar
c) n tabela-fiu cmpul comun este stabilit ca fiind index de
obicei normal.


LEGTURI TEMPORARE

1. Se creaz un nou proiect sau se deschide un proiect existent,
coninnd o baz de date.
2. Se verific existena indecilor sau se stabilesc indecii n cazul
n care nu sunt stabilii.
3. Din meniul Window se alege opiunea Data Session. Se
execut clic pe butonul Open, pentru a deschide tabelele.
4. Din fereastra obinut astfel, denumit Open, se execut clic pe
tabela care se dorete a fi deschis, bifnd de semenea
opiunea Exclusive, apoi se execut clic pe butonul OK.


Fereastra Data Session

5. Se procedeaz similar pentru toate tabelele pentru care se
dorete stabilirea unor legturi temporare.

Suport pentru laborator


26
6. Se execut clic pe denumirea tabelei-printe. Se execut clic pe
butonul Relations.
7. n fereastra rezultant, denumit denumit Set Index Order se
execut OK, apoi n fereastra Expression Builder, n dreptul
opiunii SET RELATION se scrie denumirea cmpului comun, n
cazul n care aceast denumire nu exist deja.
8. Se execut clic pe butonul OK. n acest moment ntre cele dou
tabele a fost realizat o legtur temporar de tip one-to-one.


Fereastra Expression Builder

9. n cazul n care se dorete realizarea unei legturi de tip one-to-
many, se execut clic pe butonul 1 to many. Din fereastra
rezultat, denumit Create One-To-Many Relationship se
alege denumirea tabelei/tabelelor cu care se dorete a se
realiza legtura, se execut clic pe butonul Move i apoi pe
butonul OK.

Limbaje de programare i baze de date 27



Fereastra pentru crearea legturilor de tip one-to-many

10. Se vizualizeaz n paralel coninutul tabelelor i se execut un
clic pe cte o nregistrare din tabela-printe, n tabela-fiu fiind
afiate doar nregistrrile care conin n index valoarea
nregistrrii curente din tabela-printe.


Corespondena n modul Browse a valorilor comune ale unui index

Se constat c principalul avantaj al legturii temporare este acela
c n momentul n care n tabela-printe cursorul este mutat pe o
nregistrare, n tabela-fiu sunt afiate doar nregistrrile care conin
valoarea din cmpul comun aferent nregistrrii din tabela-printe.


LEGTURI PERMANENTE

1. Se deschide fereastra Database Designer, executnd un clic n
fereastra Project Manager pe denumirea bazei de date i apoi
pe butonul Modify. n acest moment structura i indexul fiecrei
tabele pot fi vizualizate.

Suport pentru laborator


28
2. Se execut un clic pe denumirea indexului primar corespunztor
din tabela-printe i, prin metoda drag-and-drop se plaseaz
cursorul pe denumirea corespunztoare a indexului din tabela-
fiu, elibernd cursorul. Se constat realizarea unei legturi
permamante.


Realizarea unei legturi permanente

Stabilirea unei legturi permanente permite stabilirea integritii
refereniale. O restricie de integritate referenial se refer la faptul
c n tabela-fiu nu pot exista nregistrri n care n cheia extern s
fie nregistrate valori care nu se afl n mulimea valorilor cheii
primare din tabela-printe.

De exemplu, dac se dau dou tabele FACTURI [numar_factura,
data_factura, cod_client] i CLIENI [cod_client, nume_client,
localitate], nu poate exista o nregistrare (numar_factura: 12,
data_factura: 12/06/2005, cod_client: 111) dac n tabela CLIENI
nu exist un client cu cod 111, altfel spus, nu poate exista o factur
emis de un client care nu exist.

Integritatea referenial se stabilete astfel.
1. Se execut un clic dreapta pe legtura creat i se alege
opiunea Edit Referential Integrity.
2. n fereastra rezultat, se pot stabili trei tipuri de reguli referitoare
la nregistrrile din ambele tabele:
Rules for Updating reguli pentru actualizare;
Rules for Deleting reguli pentru tergere;
Rules for Inserting reguli pentru inserare.

Limbaje de programare i baze de date 29



Fereastra Referential Integrity Builder

Pentru primele dou opiuni, exist trei posibiliti: cascade,
restrict i ignore.
Cascade se refer la faptul c atunci cnd o nregistrare
coninnd o valoare ale indexului primar din tabela-printe este
modificat/tears, se realizeaz actualizarea/tergerea automat a
nregistrrilor din tabela-fiu care conin acea valoare.
Restrict se refer la faptul c nu este permis
modificarea/tergerea unei nregistrri, i implicit a unei valor a
indexului primar, atunci cnd n tabela-fiu se regsesc nregistrri
care conin acea valoarea.
Ignore se refer la posibilitatea actualizrii/tergerii
independente a nregistrrilor din cele dou tabele n momentul
modificrii/tergerii unei valori a indexului primar.
Pentru opiunea Rulea for Inserting exist dor dou posibiliti:
restrict i ignore, referindu-se la faptul c nu este permis/este
permis adugarea unei noi nregistrri n tabela-fiu dac valoarea
nregistrat n index nu exist n mulimea valorilor indexului primar
corespunztor tabelei-printe.


Studiu individual

Aplicaia 3: Creare legturi temporare i
permamante ntre tabele aprinnd unei baze de
date.


Suport pentru laborator


30
APLICAIA 3

S se realizeze un nou proiect. S se realizeze o baz de
date. S se creeze urmtoarele tabele, aparinnd bazei de date:

Structur

Cod_client C 4
Nume C 20
Oras C 10

Index primar, ascendent :
cod_client

Coninut

Cod_client Nume Oras
AMP Amep Brasov
COR CorrImpex Galati
DAV Daval Brasov
ERG Energo Bucuresti
HTR Hatrom Brasov


Structur

Nr_fact N 10
Cod_client C 4
Data D 8


Index primar, ascendent :
nr_fact
Index normal, ascendent:
cod_client
Coninut

Nr_fact Cod_client Data
23 AMP 05/11/05
116 HTR 04/12/05
315 COR 06/04/05
117 DAV 12/03/04
18 ERG 12/05/04
56 ERG 11/07/05
12 AMP 02/10/04

Structur

Cod_produs N 10
Den_produs C 30
PU N 10
Cant N 10
Nr_fact N 10

Index primar,
ascendent :
cod_produs
Index normal,
ascendent: nr_fact

Coninut

Cod_
produs
Den_produs PU Cant Nr_fact
1 Apa
minerala
2 500 56
2 Biscuiti 1 55 116
3 Cereale 4 15 315
4 Portocale 5 10 116
5 Servetele 1 150 117
6 Ciocolata 3 40 116
7 Compot 2 14 18
8 Iaurt 3 12 23
9 Paine 1 100 12
Limbaje de programare i baze de date 31



3. S se stabileasc legturi temporare ntre cele trei tabele.
4. S se stabileasc legturi permamante ntre cele trei tabele.
5. S se stabileasc urmtoarele restricii de integritate
referenial: cascade pentru tergere i restrict pentru inserarea
unei noi nregistrri.
6. S se verifice integritatea referenial prin tergerea unei
nregistrri existente i prin adugarea unei noi nregistrri.



































Suport pentru laborator


32




INSERAREA, MODIFICAREA I TERGEREA
LINIILOR





Principalele obiective ale capitolului sunt:

Adugarea unei linii ntr-o tabel
Editarea unor date dintr-o tabel
tergerea unor date dintr-o tabel




ADUGAREA UNEI LINII

Comanda SQL de adugare de noi linii este INSERT, care
are, n modul de lucru cel mai puin pretenios urmtorul format:

INSERT INTO TABEL [(ATRIBUT1, ATRIBUT2,... .)] VALUES
(VALOARE_ATRIBUT1, VALOARE_ATRIBUT2,... .)

n cazul tabelei ANGAJATI se poate introduce o nou line
astfel:

Se d tabela Angajai cu urmatoarele date:
Limbaje de programare i baze de date 33




INSERT INTO ANGAJATI VALUES (11, 'RADU', 'Info', 250)

iar tabela va arta astfel:


STERGEREA LINIILOR

Comanda SQL pentru tergerea uneia sau mai multor linii
dintr-o tabel este DELETE

DELETE FROM TABELA WHERE CONDITIE

Dac dorim s tergem ultima nregistrare introdus vom
avea:

DELETE FROM ANGAJATI WHERE NUME='RADU'

Suport pentru laborator


34



n cazul Visual FOXPRO este nevoie de comanda PACK ca
tergerea s fie efectiv, astfel:
PACK
Iar tabela va arta astfel:




MODIFICAREA VALORILOR UNOR ATRIBUTE

Pentru a modifica valoarea unuia sau mai multor atribute sau
mai multe linii dintr-o tabel se folosete comanda UPDATE cu
formatul general:

UPDATE TABELA SET ATRIBUT1=EXPRESIE [,
ATRIBUT2=EXPRESIE2.... .] WHERE PREDICAT
Limbaje de programare i baze de date 35



Modificarea se va produce pe toate liniile tabelei care
ndeplinesc condiia formulat prin predicat.

n cazul tabelei ANGAJATI dac dorim schimbarea salariului
n 1000 pentru angajata GABRIELA vom avea:

UPDATE ANGAJATI SET SAL_BRUT=1000 WHERE
NUME='Gabriela'





Studiu individual

Aplicaia 4: Introducere, tergere i modificarea
unor date dintr-o tabel

APLICAIA 4

1. Creai tabela FACTURI (ca n ANEXA 1)
2. n tabela FACTURI (ANEXA 1) adugai urmtoarele date:


Suport pentru laborator


36


3. n tabela FACTURI modificai VALOAREA la 75000 pentru toate
facturile care au valoare mai mare de 10.000.
4. tergei toate facturile pentru care cod_furn este c1.
5. Modificati cod_furn n n99 pentru facturile a cror valoare este de
cel puin 8000.
6. tergeti toate nregistrrile pentru care nr_factur este mai mic de
4000.
7. Stergeti toate datele din tabela FACTURI.
8. Introducei cinci facturi noi utiliznd INSERT i cinci facturi
utiliznd BROWSE.



















Limbaje de programare i baze de date 37






NUCLEUL SQL N VISUAL FOX PRO




Principalele obiective ale capitolului sunt:


Introducere n conceptul de interogare
a bazelor de date
Sintaxa i utilizarea comenzii SELECT





CONCEPTUL DE INTEROGARE I COMANDA SELECT

Extragerea informaiilor din una sau mai multe tabele libere
sau aparinnd unei baze de date, pe baza unor criterii definite de
utilizator poart denumirea de interogare.
Visual Fox Pro include un set de comenzi ale limbajului SQL
(Structured Query Language) care permite interogarea tabelelor i
furnizarea rezultatelor sub forma unor interogri, care pot fi
depozitate la o destinaie precizat. Prin intermediul unei interigri
se construiete o instruciune SELECT a acestui limbaj, care
cuprinde ntregul mecanism de interogare al VFP.
Rezultatele interogrilor se pot obine cu ajutorul unui
generator denumit Query Designer, cu posibilitate de utilizare pe
baza rubricii Queries din fereastra Project Manager, existnd
posibilitatea de a utiliza de asemenea i ajutorul oferit de VFP prin
intermediul Query Wizard.

Suport pentru laborator


38
O alt posibilitate de obinere a rezultatelor interogrilor este
utilizarea comenzii Select, reprezentat de o sintax specific,
comand care va fi executat n fereastra de comenzi.
Exemplificarea utilizrii comenzii Select se va realiza utiliznd o
baz de date cu informaii necesare organizrii sesiunii studeneti.


PRINCIPALELE CLAUZE ALE FRAZEI SELECT

Orice fraz de tip SELECT are trei clauze principale:
SELECT
FROM
WHERE
Dintre aceste trei clauze doar SELECT i FROM sunt
obligatorii n orice fraz.


SELECIA I PROIECIA

Clauza SELECT corespunde operatorului proiecie din algebra
relaional, fiind utilizat pentru desemnarea listei de atribute
(coloane) din rezultat. Clauza FROM este cea n care sunt
enumerate relaiile din care vor fi extrase informaiile aferente
consultrii. Clauza WHERE desemneaz predicatul selectiv al
algebrei relaionale (condiia), relativ la atribute ale relaiilor care
apar n clauza FROM.
La modul general, o consultare SQL poate fi prezentat sub
forma:
select c1,c2,...,cn
from r1,r2,...,rm
where p

unde:
cj - reprezint coloanele rezultat;
rj - reprezint relaiile ce trebuie parcurse;
p - reprezint predicatul, condiia ce trebuie ndeplinit de
tupluri (linii) pentru a fi incluse n rezultat.

Predicatul poate fi simplu sau compus (din mai multe condiii).
Cnd clauza WHERE este omis se consider implicit c
predicatul p are valoare logic ''adevrat'', astfel nct n rezultat vor
Limbaje de programare i baze de date 39


fi incluse toate liniile din tabel sau produsul cartezian al tabelelor,
enumerate n clauza FROM.
Dac n locul coloanelor c1,c2,...,cn apare simbolul *,
rezultatul va fi alctuit din toate coloanele relaiilor specificate n
clauza FROM.
Atributele rezultatului preiau numele din tabela (tabelele)
specificate n clauza FROM. Schimbarea numelui se realizeaz prin
caluza AS.

exemplu:
select c1,c2 as NUME_NOU from r1

unde numele coloanei c2 devine NUME_NOU;

SQL nu elimin automat liniile identice din rezultat, deci pentru
ca fiecare linie s apar o singur dat este necesara utilizarea
opiunii DISTINCT.

exemplu:
select distinct c1,c2 from r1

n concluzie, o fraz SELECT, corespunde:
unei selecii algebrice (clauza WHERE p)
unei proiecii (SELECT ci)
unui produs cartezian (FROM - r1r2... rm)

i conduce la obinerea unui rezultat cu n coloane, fiecare coloan
fiind: un atribut din r1,r2,...,rm sau expresie calculat pe baza unor
atribute din r1,r2,...,rm.

Execuia unei fraze SELECT realizeaz un rezultat sub form
tabelar.
Rezultatul poate fi:
1. o list (text)
2. o tabel propriu-zis
3. o tabel temporar
4. o tabel derivat (imagine)
5. o variabil masiv (tablou)

Exemplu:
Utilizm tabela ANGAJATI n care introducem urmtoarele
date:

Suport pentru laborator


40

Datele tabelei angajati.dbf

1. Care sunt datele coninute n tabela angajati?

select nr, nume, prenume, data_nasterii, sal_brut, cod_dep from
angajati
sau:
select * from angajati


Rezultatele exemplului 1.1

2. Care sunt numele salariailor i salariul brut?

select nume, sal_brut from angajati


Limbaje de programare i baze de date 41


Rezultatele exemplului 1.2

3. Care sunt numele salariailor i salariul brut, dar pentru coloana
sal_brut denumim coloana salariu_brut?

select nume, sal_brut as salariu_brut from angajati


Rezultatele exemplului 1.3

4. Afiai numele angajatilor i salariul brut, pentru salariaii care au
salariul brut mai mare de 700 lei

select nume from angajati where sal_brut>700


Rezultatele exemplului 1.4


5. Care sunt datele salariailor care lucreaz n departamentul
informatic (cod_dep="info")?

select * from angajati WHERE cod_dep="info"


Rezultatele exemplului 1.5

Suport pentru laborator


42

6. Care sunt datele salariailor care lucreaz n departamentul
informatic (cod_dep="info") i care au salariul brut mai mare de 700
de lei?

select * from angajati where cod_dep="info" and sal_brut>700


Rezultatele exemplului 1.6

7. Afiai numele salariailor i codul departamentului pentru
angajatii care sunt fie n departamentul informatic (cod_dep="info")
fie n departamentul contabilitate (cod_dep="cont")

select nume, cod_dep from angajati where cod_dep="info" or
cod_dep="cont"


Rezultatele exemplului 1.7

8. Afiai numele angajailor i data naterii pentru angajaii nscui
dup 15-03-1980 (formatul pentru data este {^yyyy/mm/dd})

select nume, data_nasterii from angajati where data_nasterii >
{^1980/03/15}

Rezultatele exemplului 1.8

9. Afiai numele angajailor i data naterii pentru angajaii nscui
ntre 15-03-1980 i 20-05-1983
Limbaje de programare i baze de date 43



select nume, data_nasterii from angajati where data_nasterii >
{^1980/03/15} and data_nasterii < {^1983/05/20}


Rezultatele exemplului 1.9

10. Care sunt codurile de departament din tabela angajati?

select cod_dep from angajati


Rezultatele exemplului 1.10

11. Care sunt codurile de departament din tabela angajati, afiate o
singur dat?

select distinct cod_dep from angajati


Rezultatele exemplului 1.11




Suport pentru laborator


44

Intrebri:

1. Care sunt clauzele principale ale unei
selecii?
2. Care sunt clauzele obligatorii ale unei
selecii?
3. Cte tabele putem trece la clauza FROM?



Studiu individual

Aplicaia 5: Introducere de date, selecii simple
i utiliznd condiii simple i compuse.


APLICAIA 5

1. Realizai o tabel FURNIZORI cu structura tabelei FURNIZORI
din ANEXA 1.
2. Introduceti urmtoarele date:



3. Care sunt furnizorii din Brasov?
4. Care sunt furnizorii din Braov sau Bucuresti?
Limbaje de programare i baze de date 45


5. Care sunt furnizorii care nu stau n Constana?
6. tergei furnizorii care sunt din Bucureti.
7. Introducei trei furnizori noi utiliznd INSERT.
8. Modificai localitatea n Cluj pentru furnizorii din Constanta.







































Suport pentru laborator


46




Coloane, expresii





Principalele obiective ale capitolului sunt:


Definirea unor coloane noi
Realizarea de calcule pe baza unor date din baza de
date.



O facilitate important n multe interogri SQL ine de
definirea, pe lng atributele tabelelor, a unor coloane noi, pe baza
unor expresii. Clauza AS ermite denumirea coloanelor calculate sau
redenumirea unor coloane ale tabelelor.
De exemplu dac dorim s aflm care este TVA-ul aferent
unei facturi, vom avea:

In tabel FACTURI avem introduse urmtoarele date:

Limbaje de programare i baze de date 47



Datele tabelei FACTURI

Pentru a afia valoarea tva-ului, precum i valoarea cu TVA
pentru fiecare factur vom avea selectul:

select nr_factura, cod_furn, data_fact, valoare, valoare*19/100 as
TVA, valoare*119/100 as val_totala from facturi

i vom obine Query-ul:


Rezultatele seleciei

Dac stabilim c pentru fiecare factur pe care o facem
termenul scadent pentru plat este de 2 luni vom calcula data
scadent astfel:

select nr_factura, gomonth(data_fact,2) as data_scadenta from
facturi


Suport pentru laborator


48

Obinerea datei scadente pentru fiecare factur

Funcia GOMONTH (data, nr_luni) returneaz o nou dat
plecnd de la data introdus la care adun un nr. de luni.

Dac stabilim c pentru fiecare factur pe care o facem
termenul scadent pentru plat este de 60 de zile vom calcula data
scadent astfel:

select nr_factura, gomonth(data_fact,0)+60 as data_scadenta
from facturi


Obinerea datei scadente pentru fiecare factur



Intrebri:

1. Cum putem s denumim coloana din rezultat?
2. Cum putem obine o coloan nou utiliznd n
selecie o condiie?


Limbaje de programare i baze de date 49



Studiu individual

Aplicaia 6: Calcularea amortizrii lunare prin
metoda liniar.


APLICAIA 6

1. Realizai tabela MF dup structura tabelei MF din ANEXA 1.
2. Introduceti urmtoarele date:


3. Care sunt mijloacele fixe cu valoare mai mare de 30000?
4. Dac PER_AMORT reprezint perioada de amortizare n ani,
calculati care este valoarea amortizrii lunare liniare.
5. Denumii coloana cu amortizarea lunar liniar AM_LUN.
6. Care sunt mijloacele fixe care au amortizarea lunar mai mare de
1000?
7. Modificati perioada de amortizare n 5 pentru mijloacele fixe cu
codul 10004.
8. Calculai care este amortizarea lunar pentru "masina 2"
9. Calculai amortizarea lunar liniar pentru mijloacele fixe
cumprate de la furnizorul c1 sau c2.






Suport pentru laborator


50




Funciile agregat: COUNT,
SUM, AVG, MIN, MAX





Principalele obiective ale capitolului sunt:


Utilizarea funciilor Count, sum, avg. min, max
Realizarea unor noi coloane care s conin date
obinute prin utilizarea funciilor de mai sus.



Funcia COUNT contorizeaz valorile neutre ale unei coloane
sau numrul de linii dintr-un rezultat al unei interogri, altfel spus, n
rezultatul unei consultri, COUNT numr cte valori diferite de
NULL are o coloan specificat sau cte linii sunt:

De exemplu dac dorim s aflm cte facturi amvem n tabela
FACTURI (cte linii sunt) avem:

select count (*) from facturi

Limbaje de programare i baze de date 51



Numrul de facturi din tabela FACTURI

Sau de exemplu dac dorim s vedem cte facturi au valoarea
peste 3000 vom avea:

select count(*) from facturi WHERE valoare>3000


Numrul de facturi din tabela FACTURI
cu valoare mai mare de 3000

Funcia SUM este una dintre cele mai utilizate funcii n
aplicaiile economice, deoarece datele financiar-contabile i cele ale
evidenei tehnico-operative sunt preponderent cantitative.

De exemplu dac dorim s aflm care este valoarea total a
facturilor din tabela FACTURI avem:

select sum(valoare) from facturi


Valoarea total a facturilor din tabela FACTURI

Sau de exemplu dac dorim s aflm care este valoarea total
a facturilor din tabela FACTURI a furnizorului cu cod_furm "c2"
avem:

select sum(valoare) from facturi where cod_furn="c2"


Valoarea total a facturilor din tabela FACTURI
a furnizorului cu cod_furm "c2"

Suport pentru laborator


52

Funcia AVG (AVERAGE) calculeaz media aritmetic a unei
coloane prin divizarea sumei valorilor coloanei respective la numrul
de valori nenule ale acesteia.

De exemplu dac dorim s aflm care este valoarea medie a
facturilor din tabela FACTURI avem:

select avg(valoare) from facturi


Valoarea medie a facturilor din tabela FACTURI

Sau de exemplu dac dorim s aflm care este valoarea
medie a facturilor din tabela FACTURI a furnizorului cu cod_furm
"c1" avem:

select avg(valoare) from facturi where cod_furn="c1"


Valoarea medie a facturilor din tabela FACTURI
a furnizorului cu cod_furm "c1"

Deosebit de utile n diverse tipuri de analiz cele dou funcii
MIN i MAX determin valoarea minim i maxim pentru o
coloan. Se pot folosi i pentru atribute de tip ir de caractere, caz
n care elementul de comparaie este codul ASCII al caracterelor.

De exemplu dac dorim care este valoare minim din tabela
facturi vom avea:

select min(valoare) from facturi


Valoarea minim din FACTURI
Limbaje de programare i baze de date 53



Sau de exemplu dac dorim care este valoare maxim din
tabela facturi vom avea:

select max(valoare) from facturi


Valoarea maxim din FACTURI

Dac dorim s aflm care este din punct de vedere alfabetic
cod_furn cu cea mai mare valoare vom avea:

select max(cod_furn) from facturi


Valoarea maxim a cod_furn din FACTURI


Studiu individual

APLICAIA 7: Utilizarea funciilor: AVG; MIN;
MAX; SUM; COUNT


APLICAIA 7

1. Realizai tabela FACTURI cu structura tabelei FACTURI din
ANEXA 1.
2. Introducei n tabela FACTURI urmtoarele date:


Suport pentru laborator


54


3. Care este media valorii facturilor?
4. Care este valoarea cea mai mare a unei facturi?
5. Care este valoarea cea mai mic a unei facturi?
6. Calculai valoarea medie a valorii facturilor dar nu cu AVG.
7. Cte facturi avem n tabel?
8. Cate facturi avem n tabel cu o valoare mai mare de 5000?
9. Cte facturi avem n tabel cu o valoare ntre 4000 i 30000?
(prin dou metode)
10. Care este valoare medie a facturilor cu nr. 3525 i 3522?




















Limbaje de programare i baze de date 55






Opiunea ORDER BY




Principalele obiective ale capitolului sunt:


Ordonarea datelor unei tabele dup unul sau mai
multe atribute



Una dintre caracteristicile modelului relaional este c nici
ordinea atributelor, nici ordinea liniilor n relaii nu reprezint
importan din punctul de vedere al coninutului informaional.
ns n practic forma de prezentare a rezultatelor interogrii
est important. Spre exemplu o list a localitilor dintr-o tabel este
mai uor citit n ordine alfabetic.

De exemplu dac dorim pentru tabela facturi s afim toate
datele ordonate dup cmpul cod_furn vom avea

select * from facturi order by cod_furn


Suport pentru laborator


56

Datele obinute n urma ordonrii dup cmpul cod_furn

Aranjarea se poate face att cresctor (ASC) ct i
descresctor (DESC). n plus se pot specifica mai multe coloane
care s serveasc drept criterii suplimentare de ordonare. Astfel, la
valori egale ale primului atribut, intr n aciune criteriul de "balotaj",
care este al doilea atribut, etc.

De exemplu dac dorim s ordonm datele din facturi nti
dup cod_furn i apoi dup valoare (dup acest criteriu
descresctor) vom avea:

select * from facturi order by cod_furn, valoare desc


Obinerea datelor ordonate dup cod_furn i apoi
descresctor dup valoare



Intrebri:

1. Care este diferena ntre ORDER i SORT?
2. Dup cte cmpuri putem ordona i cum?
Limbaje de programare i baze de date 57





Studiu individual

APLICAIA 8: Ordonarea rezultatelor unei
interogri.


APLICAIA 8

1. Realizai tabela MF dup structura tabelei MF din ANEXA 1.
2. Introduceti urmtoarele date:



3. Care sunt datele din tabela MF, ordonate alfabetic dup
denumire?
4. Care sunt datele din tabela MF, ordonate alfabetic dup denumire
i apoi dup valoare?
5. Care este amortizarea lunar liniar pentru fiecare mijloc fix,
datele fiind ordonate dup denumirea mijlocului fix?
6. Afiai denimirea mijloacelor fixe, ordonat alfabetic pentru
mijloacele fixe cu o valoare mai mare de 32000 inclusiv.
7. Afiai alfabetic codurile furnizor - o singur dat.
8. Care este valoarea cea mai mare unui mijloc fix?
9. Care este valoare medie a amortizrii lunare a mijloacelor fixe?
10. Cte mijloace fixe avem?


Suport pentru laborator


58




OPERATORII BETWEEN, LIKE I IN





Principalele obiective ale capitolului sunt:


Utilizarea operatorilor
BETWEEN
LIKE
IN



Pentru formularea predicatului de selecie, SQL permite
utilizarea, pe lng >,<, >=,<=,= i a altor operatori, dintre care ve
vom opri la BETWEEN (cuprins ntre), LIKE (ca i), IN (n), la care
se adaug IS NULL.
Operatorul BETWEEN este util pentru definirea intervalelor de
valori.

De exemplu dac dorim s afim doar facturile care au valori
ntre 4000 i 8000 vom avea:

select * from facturi where valoare between 4000 and 8000


Limbaje de programare i baze de date 59


Date afiate utiliznd condiia BETWEEN

Acelai rezultat il puteam obine i cu o condiie dubl:

select * from facturi where valoare >= 4000 and valoare <=8000


Date afiate utiliznd condiia dubl

Operatorul LIKE permite compararea unui atribut (expresii) cu
un literal utiliznd o "masc" construit cu ajutorul specificatorilor
multiplii % i _ . Simbolurile procent i underscore sunt denumite
jokeri. Procentul substituie un ir de lungime variabil, 0-n caractere,
n timp ce underscore substituie un singur caracter.

Pentru exemplificare mai introducem dou facturi cu
urmtoarele date:

Introducerea suplimentar a 2 facturi

De exemplu dac dorim s afim care sunt toi furnizorii a
cror cod_client ncepe cu litera "c" vom avea:

select * from facturi where cod_furn like "c%"


Suport pentru laborator


60

Furnizorii a cror cod_furn ncepe cu litera "c"

De exemplu dac dorim s afim care sunt toi furnizorii a
cror cod_client ncepe cu litera "m" vom avea:

select * from facturi where cod_furn like "m%"


Furnizorii a cror cod_furn ncepe cu litera "m"

De exemplu dac dorim s afim care sunt toi furnizorii a
cror cod_client are dou caractere i al doilea caracter este 5 vom
avea:

select * from facturi where cod_furn like "_5"


Furnizorii a cror cod_furn are dou caractere
i al doilea caracter este 5

Atunci cnd se testeaz dac valoarea unui atribut este
ncadrabil ntr-o list de valori dat, n locul folosirii abundente a
operatorului OR este mai elegant s se apeleze la operatorul IN.

De exemplu dac dorim s afim facturile furnizorilor care au
cod_furn c1, c3 i c4 avem:

select * from facturi where cod_furn in ("c1","c3","c4")

Limbaje de programare i baze de date 61



Facturile furnizorilor care au cod_furn c1, c3 i c4

Sau de exemplu dac dorim s selectm facturile care au
valoare de 500, 600, 5000 vom avea:

select * from facturi where valoare in (500, 600, 5000)


Facturile care au valoare de 500, 600, 5000



Intrebri:

1. Care este diferena ntre operatorii
BETWEEN i IN?
2. Cu ce poate fi substituit operatorul
BETWEEN?



Studiu individual

APLCAIA 9: Utilizarea operatorilor BETWEEN;
LIKE i IN n calcularea unor date pe baza
tabelei ANGAJATI.


APLICAIA 9

1. Realizai tabela SALARIATI pe baza structurii tabelei ANGAJATI
din ANEXA 1.

Suport pentru laborator


62
2. n tabel introducei urmtoarele date:


3. Care sunt salariaii care au salariu cuprins ntre 550 i 1000?
4. Care sunt angajaii care au salariu 600, 1000, 750, sau 300?
5. Ci angajai avem?
6. Care este salariul mediu?
7. Care este numele salariatului cu salariul cel mai mare?
8. Care sunt angajaii a cror nume ncepe cu litera M sau I?
9. Ci angajai au prenumele din trei litere?
10. Care sunt salariaii care nu au prenumele ION sau IOANA?




















Limbaje de programare i baze de date 63






REUNIUNE, PRODUS CARTEZIAN





Principalele obiective ale capitolului sunt:

Prezentarea operatorului UNION
Realizarea produsului cartezian




Primii trei operatori asambliti prezint operatori SQL dedicai:
UNION, INTERSECT, MINUS (EXTRACT), n timp ce produsul
cartezian se calculeaz automat prin simpla enumerare a celor fou
tabele din clauza FROM.

La reuniunea a dou tabele, SQL elimin automat liniile
identice din rezultat. Dac se dorete prelucrarea tuturor liniilor celor
dou relaii i implicit apariia de linii duplicate, se folosete caluza
ALL (UNION ALL).

De exemplu, dup aceeai strctur a tabelei FURNIZORI
crem tabela FURNIZORI2.
Tabela FURNIZORI2 conine urmtoarele date:


Suport pentru laborator


64

Datele tabelei FURNIZORI2


Datele tabelei FURNIZORI

Dac dorim s afim toate datele (utiliznd reuniunea) din
tabelele FURNIZORI i FURNIZORI2 avem:

select * from furnizori union select * from furnizori2

Limbaje de programare i baze de date 65



Toate datele (utiliznd reuniunea) din tabelele FURNIZORI i
FURNIZORI2

SQL nu pune la dispoziie vreun operator special dedicat
produsului cartezian.
Produsul cartezian se realizeaz prein simpla enumerare a
tabebelor n clauza FROM.

De exemplu dac dorim s realizm produsul cartezian ntre
tabelele FACTURI i FURNIZORI avem:

select * from facturi, furnizori


Suport pentru laborator


66

Produsul cartezian al tabelelor FACTURI i FURNIZORI




Intrebri:

1. Ce reprezint operatorul UNION?
2. Cum se realizeaz produsul cartezian?



Studiu individual

APLICAIA 10: Evidena mijloacelor fixe ale
unei ntreprinderi


APLICAIA 10

1. Realizai tabela MF1 i MF2 dup structura tabelei MF din
ANEXA 1.
Limbaje de programare i baze de date 67


2. Introduceti urmtoarele date:


Datele tabelei MF1


Datele tabelei MF2


3. Care sunt datele din tabela MF1, ordonate alfabetic dup
denumire?
4. Care sunt datele din tabela MF2, ordonate alfabetic dup
denumire i apoi dup valoare?
5. Afiai datele celor dou tabele ntr-un query
6. Care sunt mijloacele fixe ce se gsesc n MF1 i nu se gsesc n
MF2?
7. Care sunt mijloacele fixe ce se gsesc i n MF1 i n MF2?
8. Care este valoarea medie a mijloacelor fixe din MF1?
9. Care este valoarea medie a mijloacelor fixe din MF2 a cror nume
ncepe cu litera C?

Suport pentru laborator


68
10. Care sunt mijloacele fixe din tabela MF2 furnizate de furnizorii cu
codurile: c1, c2, c4, c5,c8?



































Limbaje de programare i baze de date 69





THETA I ECHI-JONCIUNEA





Principalele obiective ale capitolului sunt:


Realizarea unei legturi ntre dou sau mai multe
tabele
Utilizarea condiiilor n echi-jonciune



SQL nu prezint clauze sau operatori speciali pentru jonciune,
jonciunea fiind o combinaie ntre produs cartezian i selecie.
Deci pentru theta-jonciunea dintre dou relaii R1 i R2 avem:

select * from R1, R2 where R1.A>=R2.E

unde:

R1
A B C
20 XYZ 30
30 XXZ 20
40 YYX 25
R2
C D E
25 XYZ 30
40 YYX 25
30 XXZ 40

iar pentru echi-jonciune avem:


Suport pentru laborator


70
select * from R1, R2 where R1.A=R2.E

Varianta cu INNER JOIN (jonciune intern) este:

select * from R1 inner join R2 on R1.A>=R2.E

respectiv

select * from R1 inner join R2 on R1.A=R2.E


Pentru urmtorul exemplu utilizm urmtoarele tabele:
FURNIZORI, FACTURI cu urmtoarele date:





Se cere s de afieze pentru fiecare factur numele
furnizorului.

Limbaje de programare i baze de date 71


select facturi.*, furnizori.nume_furn from facturi, furnizori where
facturi.cod_furn=furnizori.cod_furn


Numele furnizorului pentru fiecare factur

Acelai rezultat se poate obine utiliznd INNER JOIN:

select facturi.*, furnizori.nume_furn from facturi inner join furnizori
ON facturi.cod_furn=furnizori.cod_furn


Numele furnizorului pentru fiecare factur

Dac dorim s afim numele furnizorului pentru fiecare
factur numai pentru furnizorul cu cod_furn "c1" vom avea:

select facturi.*, furnizori.nume_furn from facturi, furnizori where
facturi.cod_furn=furnizori.cod_furn and facturi.cod_furn="c1"



Suport pentru laborator


72
Numele furnizorului pentru fiecare factur
numai pentru furnizorul cu cod_furn "c1"




Intrebri:

1. De ce dou tabele sunt legate logic prin
valori?
2. Care este condiia necesar pentru echi-
jonciune?




Studiu individual

APLICAIA 11: Evidena salariailor dintr-o firm


APLICAIA 11

1. S se realizeze tabelele ANGAJATI i DEPARTAMENTE dup
structura tabelelor ANGAJATI i DEPARTAMENTE din ANEXA 1
2. Introducei n tabele urmtoarele date:


Limbaje de programare i baze de date 73




3. Afiai eful pentru fiecare angajat.
4. Care sunt angajaii care lucreaz n Braov?
5. Ci angajai lucreaz n Bucureti?
6. Care este numele angajatului cu salariul maxim?
7. Care este fondul de salarii pentru fiecare cod_dep?
8. Care sunt angajatii angajai dupa 01/01/1980?
9. Care sunt angajaii care lucreaz la departamentul marketing?
10. Ci subalterni are Vlad?
11. Care este salariul mediu pentru departamentul management?
12. Care sunt angajaii a cror ef ncepe cu litera "A"?
13. Care sunt angajaii care lucreaz n Braov sau Bucureti?



















Suport pentru laborator


74




GRUPAREA TUPLURILOR: GROUP BY I
HAVING





Principalele obiective ale capitolului sunt:

Utilizarea grupurilor
Utilizarea condiiilor pentru grupuri




Clauza GROUP BY formeaz grupe (grupuri) de tupluri ale
unei relaii, pe baza valorilor comune ale unui atribut. n frazele
SELECT formulate pn n acest paragraf, prin intermediul WHERE
au fost selectate tupluri ale tabelei. Prin asocierea unei clauze
HAVING la GROUP BY este posibil selectare anumitor grupuri de
tupluri ce ndeplinesc un criteriu, valabil numai la nivel de grup (nu i
la nivel de linie).
Clauza unei fraze SELECT ce conine aceast clauz se
obine prin regruparea tuturor liniilor din tabelele eumerate n FROM,
extrgndu-se cte o apariie pentru fiecare valoare distinct a
coloanei/grupului de coloane.

Formatul general este:

Limbaje de programare i baze de date 75


select coloan1, coloan2,...,coloan m from tabel group by
coloan_de_regrupare

De exemplu dac dorim s vedem care este valoarea total a
facturilor pentru fiecare cod_furn vom avea:

select cod_furn, sum(valoare) from facturi group by cod_furn


Valoarea total a facturilor pentru fiecare cod_furn

Cea mai simpl definiie a clauzei HAVING este: clauza
HAVING este WHERE-ul ce opereaz la nivel de grupuri. Dac
WHERE acioneaz la nivel de tuplu, selectnd acele linii care
ndeplinesc o condiie specificat, HAVING permite specificarea
unor condiii de selecie care se aplic rupurilor de linii create prin
GROUP BY.
Din rezultat sunt eliminate toate grupurile care nu satisfac
condiia specificat.

De exemplu dac dorim s vedem care este valoarea total a
facturilor pentru cod_furn egal cu "c1" vom avea:

select cod_furn, sum(valoare) from facturi group by cod_furn having
cod_furn="c1"


Valoarea total a facturilor pentru
cod_furn egal cu "c1"




Suport pentru laborator


76

Intrebri:

Cnd se utilizeaz GROUP BY?
Care este definiia condiiei HAVING?



Studiu individual

APLICAIA 12: Situaii de grup la nivelul
salariailor


APLICAIA 12

1. S se realizeze tabelele ANGAJATI i DEPARTAMENTE dup
structura tabelelor ANGAJATI i DEPARTAMENTE din ANEXA 1
2. Introducei n tabele urmtoarele date:


Limbaje de programare i baze de date 77




3. Afiai eful pentru fiecare angajat.
4. Care este salariul total pentru fiecare departament?
5. Care este salariul total pentru departamentul MANAGEMENT?
6. Care este suma total a salariilor din departamentele
management i contabilitate?
7. Care este numrul de salariai din fiecare departament?
8. Care este departamentul cu angajaii cei mai muli?
9. Care este eful departamentului cu cei mai muli angajai?
10. Ci angajai are Vlad?

















Suport pentru laborator


78




FUNCII DE CALCUL N VISUAL FOX PRO





Principalele obiective ale capitolului sunt:



Utilizarea funciilor de calcul n Visual Fox Pro




Visual Fox Pro permite utilizarea unor instruciuni specifice,
executate n fereastra de comenzi, pentru calcule statistice, dar i
funcii statistice i financiare.

Instruciunile cel mai des utilizate pentru calcule statistice sunt:

average <denumire cmp> <domeniul nregistrrilor> to <denumire
variabila>
Instruciunea furnizeaz media aritmetic a valorilor numerice din
cmpul specificat.

count <domeniul nregistrrilor> to <denumire variabila>
Instruciunea furnizeaz numrul de nregistrri din tabel care
respect condiiile impuse n domeniul nregistrrilor.

Limbaje de programare i baze de date 79


sum <denumire cmp> <domeniul nregistrrilor> to <denumire
variabil>
Instruciunea furnizeaz suma (pe coloan) valorilor din cmpul
specificat.


Unde: denumire cmp reprezint cmpul pe baza valorilor cruia se
va realiza suma;
domeniul nregistrrilor reprezint de obicei o condiie de
filtrare a valorilor care intr n sum;
denumire variabil reprezint o variabil nou n care va fi
depozitat rezultatul nsumrii valorilor.

Pentru afiarea rezultatelor acestor operaii se srie n fereastra de
comenzi:
?[mesaj], <denumire variabil>


Exemple de instruciuni pentru calcule statistice

Principalele funcii statistice: AVG( ), COUNT( ), SUM( ) avnd
efecte similare cu instruciunile menionate mai sus, se utilizeaz n
cadrul unor instruciuni cum ar fi CALCULATE sau SELECT.

Funciile financiare cel mai des utilizate sunt:
PAYMENT (valoare mprumut, rata dobnzii, perioada)
determin rata periodic de regul lunar care trebuie

Suport pentru laborator


80
achitat pentru a stinge o datorie, un mprumut ntr-o
perioad de timp dat, la o anumit rat a dobnzii.

FV (rata lunar, rata dobnzii, numr de perioade)
determin valoarea actualizat a unei investiii cu pli
periodice egale, pentru un numr cunoscut de perioade
egale de timp, la o anumit valoare a ratei dobnzii.


PV (rata lunar, rata dobnzii, numr de perioade)
determin valoarea prezent a unei investiii realizate n
viitor, n condiiile achitrii unor pli periodice constante, pe
o anumit perioad, la o rat a dobnzii constant.

Observaie: rata dobnzii se raporteaz la 12 n toate cele trei
cazuri, caz n care numrul de perioade reprezint numrul de luni.
Aceste funcii se utilizeaz n cadrul unor comenzi de tip
browse. n fereastra de comenzi se va scrie:
browse fields <denumire cmp1>, <denumire cmp2>,...,
<denumire variabil>=<denumire funcie financiar>(parametri
corespunztori)
Denumirile cmpurilor afiate prin comanda browse, strns
legate de parametrii funciei, se utilizeaz pentru a oferi o imagine
complet asupra situaiei analizate, alternativ existnd posibilitatea
afirii doar a rezultatului obninut prin utilizarea funciei financiare.


Studiu individual

Aplicaie 13: Utilizare funcii statistice i
financiare.


APLICAIA 13

S se construiasc un nou proiect. S se construiasc o tabel
avnd urmtoarea structur:
Cod_firma C 4
Credit N 20
Rata N 20
Rata_dob_c N 6 ;2
Limbaje de programare i baze de date 81


Rata_dob_d N 6 ;2
Perioada N 3

i cu urmtorul coninut :

Cod_firma Credit Rata Rata_dob_c Rata_dob_d Perioada
AMP 10000 100 0.2 0.1 15
COR 15000 145 0.21 0.11 20
DAV 12000 250 0.23 0.12 36
ERG 45000 500 0.22 0.1 48
HTR 21500 350 0.21 0.14 18
COM 50000 220 0.23 0.11 15
SEP 35000 750 0.23 0.13 24
MAN 15500 600 0.21 0.1 12
RAR 75000 840 0.2 0.12 72

a) S se determine rata periodic, lunar, care trebuie pltit pentru
creditul contractat, de ctre fiecare societate comercial, utiliznd
funcia PAYMENT.
b) Valorile nscrise n cmpul rata, reprezint sume lunare egale
care vor fi depuse de fiecare firm, la nceputul fiecrei luni, n
conturi de depozit. Care este valoarea viitoare a sumei obinute in
cursul ultimei luni n care firmele vor depune bani n cont? (Utilizai
funcia FV)
c) Cte firme au contactat credite cu o valoare peste 25000 lei?
d) Care este suma total a creditelor acordate de bnci tuturor
firmelor?
e) Care este media sumelor depuse lunar de firmele al cror cod
ncepe cu litera C?
















Suport pentru laborator


82

Bibliografie:

1. Marin Fotache, SQL - Dialecte DB2, Oracle, Visual FoxPro,
Editura Polirom, 2001, Bucureti

2. Mihaela Muntean, Dezvoltarea aplicaiilor cu baze de date n
Visual FoxPro, Editura All, 2001, Bucureti

3. Manualul de utilizare - Visual FoxPro 8.0

4. Grupul BDASEIG, Baze de date. Fundamente teoretice i
practice, Infomega, 2002

5. Manole Velicanu, Constana Bodea, Ion Lungu, Cristina Ioni,
Georgeta Bdescu - Sisteme de Gestiune a Bazelor de Date,
Petrion
























Limbaje de programare i baze de date 83



Anexa 1

Tabele utilizate


unde: nr - numr; sal_brut - salariu brut; cod_dep - cod departament


unde: cod_dep - cod departament; den-denumire


unde: nr_factur-numr factur; data_fact - data facturii


Suport pentru laborator


84

unde: cod_furn - cod furnizor; nume_furn - nume furnizor


unde: cod_mf - codul mijlocului fix, per_amort - perioada de
amortizare, cod_furn - codul furnizorului

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