Sunteți pe pagina 1din 85

Universitatea tefan cel Mare SUCEAVA

Facultatea de Inginerie Mecanic, Mecatronic i Management

ef lucr. ing. Sergiu SPNU

Baze de Date
ndrumar de laborator

Suceava, 2007
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).
2 Suport pentru laborator

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 v1 D1, v2 D2,...,vn Dm, cu n m 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 n m 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.
Mem FISIER CMP - CHEIE - -
extern
BDR RELAIE ATRIBUT ASOCIERE CHEIE CHEIE DOMENIU
PRIMAR EXTERN
VFP TABEL CMP ASOCIERE CHEIE CHEIE -
(LEGATURA) PRIMAR

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)
4 Suport pentru laborator

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:

bar de
instrumente

bar de meniu

fereastr de comenzi
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.
6 Suport pentru laborator

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:


8 Suport pentru laborator

Fereastra Table Designer

Fields Indexes (pagina de Table (tabele),


(pagina de indeci); cu informaii
cmpuri); despre tabel.

Pagina Fields cuprinde:

denumire cmp (name); opiunea specific tipului de


tip date (valori) aferente date numeric (decimal);
cmpului (type); indeci (index);
mrimea maxim a indicatorul Null (dac nu
valorilor (width); 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).
Buton pentru
acces la
structura
tabelei/bazei
de date

Buton
pentru
acces la
coninutul
tabelei
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; browse vizualizare


add adugare tabel nregistrri tabel;
creat anterior; remove
modify modificare eliminare/tergere tabel
structur 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.
10 Suport pentru laborator

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:
12 Suport pentru laborator

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
14 Suport pentru laborator

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.
16 Suport pentru laborator

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.
18 Suport pentru laborator

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.
20 Suport pentru laborator

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).
22 Suport pentru laborator

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.
24 Suport pentru laborator

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.
26 Suport pentru laborator

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.
28 Suport pentru laborator

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.
30 Suport pentru laborator

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 Coninut

Cod_client C 4 Cod_client Nume Oras


Nume C 20 AMP Amep Brasov
Oras C 10 COR CorrImpex Galati
DAV Daval Brasov
Index primar, ascendent : ERG Energo Bucuresti
cod_client HTR Hatrom Brasov

Structur Coninut

Nr_fact N 10 Nr_fact Cod_client Data


Cod_client C 4 23 AMP 05/11/05
Data D 8 116 HTR 04/12/05
315 COR 06/04/05
117 DAV 12/03/04
Index primar, ascendent : 18 ERG 12/05/04
nr_fact 56 ERG 11/07/05
Index normal, ascendent: 12 AMP 02/10/04
cod_client

Structur Coninut

Cod_produs N 10 Cod_ Den_produs PU Cant Nr_fact


Den_produs C 30 produs
PU N 10 1 Apa 2 500 56
Cant N 10 minerala
Nr_fact N 10 2 Biscuiti 1 55 116
3 Cereale 4 15 315
Index primar, 4 Portocale 5 10 116
ascendent : 5 Servetele 1 150 117
cod_produs 6 Ciocolata 3 40 116
Index normal, 7 Compot 2 14 18
ascendent: nr_fact 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.
32 Suport pentru laborator

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'


34 Suport pentru laborator

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:
36 Suport pentru laborator

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.
38 Suport pentru laborator

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 - r1 r2 ... 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:
40 Suport pentru laborator

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


42 Suport pentru laborator

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


44 Suport pentru laborator

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.
46 Suport pentru laborator

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
48 Suport pentru laborator

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.
50 Suport pentru laborator

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"
52 Suport pentru laborator

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:
54 Suport pentru laborator

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


56 Suport pentru laborator

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?
58 Suport pentru laborator

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%"


60 Suport pentru laborator

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.
62 Suport pentru laborator

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:
64 Suport pentru laborator

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


66 Suport pentru laborator

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?
68 Suport pentru laborator

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 R2
A B C C D E
20 XYZ 30 25 XYZ 30
30 XXZ 20 40 YYX 25
40 YYX 25 30 XXZ 40

iar pentru echi-jonciune avem:


70 Suport pentru laborator

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"
72 Suport pentru laborator

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?
74 Suport pentru laborator

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"
76 Suport pentru laborator

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?
78 Suport pentru laborator

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
80 Suport pentru laborator

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?
82 Suport pentru laborator

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


84 Suport pentru laborator

unde: cod_furn - cod furnizor; nume_furn - nume furnizor

unde: cod_mf - codul mijlocului fix, per_amort - perioada de


amortizare, cod_furn - codul furnizorului