Radu Lixăndroiu

Dana Lupşa

LIMBAJE DE PROGRAMARE ŞI BAZE DE DATE

SUPORT PENTRU LABORATOR

BRAŞOV - 2006

Limbaje de programare şi baze de date

1

SISTEMUL DE GESTIUNE A BAZELOR DE DATE

Principalele obiective ale capitolului sunt: Concepte principale din teoria rela ională 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 rela ional. VFP este un SGBD rela ional cu limbaj propriu, care suportă un nucleu extins din limbajul rela ional SQL (Structured Query Language).

2

Suport pentru laborator

PRINCIPALELE CONCEPTE DIN TEORIA RELA IONALĂ Domeniul - reprezintă un ansamblu de valori, caracterizat printr-un nume. Domeniul se poate defini explicit, prin enumerarea tuturor valorilor care apar in acestuia (exemplu D1:{roşu, galben, albastru}), sau implicit prin precizarea proprietă ilor pe care le au valorile domeniului respectiv (exemplu: D2:{e/e ∈ N } Rela ia - (tabela) reprezintă un subansamblu al produsului cartezian dintre mai multe domenii (D1xD2x…) caracterizat printr-un nume. Reprezentarea folosită pentru o rela ie (R) este tabloul bidimensional (tabela de date) de forma:

Atributul este coloana unei rela ii caracterizate printr-un nume. Fiecare atribut îşi ia valorile dintr-un domeniu. Mai multe atribute pot lua valori din acelaşi domeniu. Tuplul este linia dintr-o rela ie şi nu are nume. Valorile dintr-un tuplu apar in produsului cartezian dintre domeniile rela iei (exemplu tuplul v1, v2, ...,vn, unde v1∈ D1, v2 ∈ D2,...,vn ∈ Dm, cu n ≥ m numere întregi). Schema rela iei este un ansamblu format din numele rela iei (R) urmat între parantaze rotunde de lista atributelor (Ai), pentru fiecare atribut precizându-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 căruia se poate identifica un tuplu dintr-o rela ie. 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 rela ie R1, dacă ansamblul de atribute care o defineşte ia valori din aceleaşi domenii ca şi cheia primară a unei rela ii R2 si dacă are rolul de a stabili o legătura (asociere) între cele două rela ii. Prezentare comparativă a no iunilor privind organizarea datelor în memoria externă în fişiere, baze de date rela ionale (BDR) şi cele utilizate în VFP.
Mem externă BDR VFP FISIER RELA IE TABELĂ CÂMP ATRIBUT CÂMP ASOCIERE ASOCIERE (LEGATURA) CHEIE CHEIE PRIMARĂ CHEIE PRIMARĂ CHEIE EXTERNĂ CHEIE DOMENIU -

Intrebări: 1. Pentru tabelele FURNIZORI şi FACTURI (ANEXA 1) care sunt cheile? 2. Da i exemplu de un atribut şi de un tuplu pentru rela ia FACTURI (ANEXA 1)

O bază de date reprezintă o colec ie de informa ii . printre care şi Visual Fox Pro. care reprezintă de asemenea şi baza realizării formatului distribuibil (executabil).4 Suport pentru laborator GENERALITĂ I DESPRE APLICA IA VISUAL FOX PRO Principalele obiective ale capitolului sunt: Prezentarea şi utilizare aplica ia Visual Fox Pro Baze de date Crearea. adrese. Pentru o mai bună organizare a bazelor de date sau a celorlalte obiecte. păstrarea. regăsirea şi analiza cu uşurin ă a acestora. facturi – care pot fi gestionate cu ajutorul unor aplica ii specifice.de exemplu nume. permi ând întregistrarea. grupate în baze de date. produse. consultarea şi actualizarea tabelelor Visual Fox Pro (VFP) este un limbaj specializat în prelucrarea datelor. acestea sunt grupate într-un proiect. .

Clic pe Start 2.Limbaje de programare şi baze de date UTILIZAREA APLICA IEI VISUAL FOX PRO 1. În cadrul fiecărui câmp există mai multe valori. Activa i op iunea Programs 3. respectiv decuparea şi prezentarea datelor în func ie de anumite condi ii. Formularele reprezintă ferestre personalizate care oferă un acces şi o vizualizare facilă a datelor dintr-o tabelă sau o interogare. O bază de date trebuie să con ină cel pu in o tabelă. Clic pe pictograma aplica iei Visual Fox Pro VFP dispune de o fereastră principală care cuprinde: 5 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 câmpuri (coloane) – care formează structura tabelei şi înregistrări (rânduri) – reprezentând con inutul tabelei. Interogări ale tabelelor sau bazelor de date. Rapoartele prezintă datele dintr-o tabelă sau o interogare într-un format imprimabil. .

Se bifează op iunea Project 4. care dispune de o fereastră cu 6 pagini ce grupează pe categorii elementele componente ale unui proiect şi o bară cu op iuni dependentă de context. Crearea unui nou proiect VFP pune la dispozi ia utilizatorilor un coordonator al întregii activită i denumit “Project Manager”. . Se atribuie un nume proiectului şi se salvează în loca ia dorită. Clic pe meniul File 2. Clic pe butonul New File 5. se procedează astfel: 1. Se activează op iunea New 3.6 Suport pentru laborator CREAREA UNUI PROIECT Pentru realizarea unui proiect.

Crearea structurii tabelelor (creare câmpuri). 4. În urma acestei ac iuni rezultă o fereastră denumită Table Designer. Din fereastra Project Manager se execută clic pe pagina Data. 2. Se atribuie o denumire tabelei şi se allege loca i în care va fi salvată.Limbaje de programare şi baze de date 7 Fereastra Project Manager – fără tabele sau baze de date În cazul în care fereastra Project Manager se închide. Pentru crearea structurii unei tabele se procedează astfel: 1. Se deschide/crează un proiect. Crearea con inutului tabelei (încărcarea inform iilor). 3. apoi pe butonul New şi New Table. redeschiderea acesteia se realizează prin alegerea din meniul File a op iunii Open şi apoi prin căutarea proiectului dorit în loca ia în care a fost salvat. II. CREAREA ŞI CONSULTAREA UNEI TABELE Crearea tabelelor se realizează în două etape: I. Se execută clic pe op iunea Free Tables. În fereastra Table Designer există 3 pagini: .

dată calendaristică. currency. Fereastra de confirmare . double). La ac ionarea butonului OK utilizatorul este interoga dacă doreşte să introducă date în tabelă. Pagina Fields cuprinde: • denumire câmp (name). moment de timp. real. integer. • tip date (valori) aferente câmpului (type). memo şi general. • Indexes (pagina de indecşi). cu informa ii despre tabelă. • indicatorul Null (dacă nu există momentan date). Datele sunt de mai multe tipuri: numeric (numeric. iar la alegerea op iunii YES se pot introduce informa ii. • op iunea specifică tipului de date numeric (decimal). logic. şiruri de caractere. • Table (tabele).8 Suport pentru laborator Fereastra Table Designer • Fields (pagina de câmpuri). • indecşi (index). • mărimea maximă a valorilor (width).

În Project Manager. modificare şi ştergere a înregistrărilor. • build. • add – adăugare tabelă creată anterior. similar cu actualizarea con inutului. în pagina Data se selectează tabela dorită. toate implicând vizualizarea ini ială a structurii tabelei cu ajutorul butonului/comenzii Modify/Modify structure. este marcată de trei opera ii: adăugare. • browse – vizualizare înregistrări tabelă. Consultarea con inutului unei tabele se realizează astfel: 1.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 (neapar inând unei bază de date). . • modify – modificare structură tabelă. există mai multe butoane pentru diverse op iuni. Se execută clic pe butonul Browse. în pagina Data se observă. 2. astfel: • new – creare tabelă nouă. ACTUALIZAREA STRUCTURII UNEI TABELE Actualizarea structurii unei tabele. Buton pentru acces la structura tabelei/bazei de date Buton pentru acces la con inutul tabelei Feareastra Project Manager – cu o tabelă În partea din dreapta a ferestrei PM. • remove – eliminare/ştergere tabelă din proiectul curent.

2. B. Se execută clic pe butonul Modify. rând pe rând mai multe înregistrări. Din meniul View se activează op iunea Append Mode şi se adugă. Se execută clic pe butonul Browse. Adăugarea înregistrărilor se realizează astfel: Pentru a adăuga o singură înregistrare: 1. modificare şi ştergere a înregistrărilor. Se execută clic pe denumirea câmpului care se doreşte a fi şters şi apoi pe butonul Delete. 2. toate implicând vizualizarea ini ială a con inutului tabelei cu ajutorul butonului/comenzii Browse. 2. Se execută clic pe butonul Browse.10 A. B. 3. Din fereastra Project Manager se execută clic pe pagina Data şi se alege denumirea tabelei care trebuie actualizată. Din meniul Table se activează op iunea Append New Record şi se adaugă o înregistrare. Din fereastra Project Manager se execută clic pe pagina Data şi se alege tabele care trebuie actualizată. 3. 3. 2. Suport pentru laborator Adăugarea şi modificarea câmpurilor se realizează astfel: 1. 3. Se realizează direct ac iunea dorită. Se execută clic pe butonul Modify. Ştergerea câmpurilor se realizează astfel: 1. A. Din fereastra Project Manager se execută clic pe pagina Data şi se alege tabele care trebuie actualizată. ACTUALIZAREA CON INUTULUI UNEI TABELE Actualizarea con inutului unei tabele este marcată de trei opera ii: adăugare. Modificarea înregistrărilor se realizează după cum urmează: Pentru a modifica independent înregistrările: . Pentru a adăuga mai multe înregistrări: 1. Din fereastra Project Manager se execută clic pe pagina Data şi se alege denumirea tabelei care trebuie actualizată.

utilizând clauzele: • All – se referă la toate înregistrările.. Stabilirea domeniului înregistrărilor se face : static (independent de informa iile con inute în înregistrări). . 2. (se alege câmpul în care va fi modificată cu informa ia) completând Replacement Criteria (domeniul înregistrărilor = totalitatea înregistrărilor afectate de execu ia unei comenzi). Vizualizarea con inutului tabelei şi modificarea înregistrărilor b. • Rest – se referă la înregistrarea curenta şi la toate celelalte înregistrări până la sfârşitul tabelei. Din fereastra Project Manager se execută clic pe pagina Data şi apoi pe butonul Browse. Pentru a modifica înregistrările în func ie de anumite criterii 1. Rezultă o fereastră în care la op iunea Field. dinamic (în func ie de informa iile con inute în înregistrări) utilizând: c. With. 3.Limbaje de programare şi baze de date 11 1.. Din fereastra Project Manager se execută clic pe pagina Data şi apoi pe butonul Browse efectuându-se apoi modificasrea pentru înregistrarea dorită. • Next – de exemplu următoarele 4 înregistrări începând cu înregistrarea curentă... • Record – înregistrarea a patra. Din meniul Table se activează op iunea Replace Field. de exemplu.

1. Se vizulizează con inutul tabelei. Ştergerea logică a înregistrărilor Pentru ştergerea unor înregistrări care îndeplinesc o anumită condi ie se utilizează din meniul Table op iunea Delete Records. 3. Se şterg logic înregistrările dorite. b) Ştergere fizică. Ştergerea înregistrărilor se realizează în două moduri a) Ştergere logică. Se ac ionează cu mouse-ul spa iul de ştergere aflat în stânga înregistrării care se doreşte a fi ştearsă logic. moment în care înregistrarea va fi marcată. 2. Se vizualizează con inutul tabelei. În fereastra rezultată se stabileşte domeniul înregistrărilor. Înregistrarea poate fi recuperată executând un clic pe celaşi spa iu. acest tip de ştergere permi ând recuperarea înregistrărilor. acest tip de ştergere nepermi ând recuperarea înregistrărilor. Din meniul Table se alege op iunea Remove Deleted Records apoi se execută clic pe butonul Yes. C.12 Suport pentru laborator • for <condi ie> se referă la toate înregistrările din tabelă pentru care condi ia este adevarată. . 2. • while <condi ie> se referă la înregistrările cuprinse între înregistrarea curentă şi prima înregistrare pentru care condi ia este falsă. 1.

Prezenta i modul de actualizare a structurii unei tabele.2 . Studiu individual Aplica ia 1: Creare şi actualizare tabelă.Limbaje de programare şi baze de date 13 Confirmarea ştergerii fizice a unei înregistrări Intrebări: Care sunt componentele unei tabele? Cum se construieşte o tabelă în Visual Fox Pro? Ce înseamnă actualizarea con inutului unei tabele? Cum se actualizează con inutul unei tabele? Prezentat i modul de vizualizare a con inututlui unei tabele. APLICA IA 1 Crea i o tabelă următoarea structură: Nume Prenume Cod Oras Medie Admis C C N C N L 30 30 3 20 6.

Să se modifice valorile corespunzătoare din câmpul oraş.10.85 9. c) Candidatele din Deva sunt de fapt din Bucureşti.50 8.60 a) Să se adauge un nou câmp.14 şi cu următorul con inut : Nume Prenume Cod Ionescu Maria 1 Vlad Mirela 8 Georgecu Ana 5 Popescu Denisa 4 Rauta Andreea 6 Stanciu Roxana 2 Radulescu Ruxandra 3 Matei Iuliana 7 Suport pentru laborator Oras Iasi Deva Cluj Arad Deva Deva Cluj Ploiesti Medie Admis 9.29 9.10 9. utilizând op iunea Delete Record şi stabilind domeniul înregistrărilor cu for. stabilind domeniul înregistrărilor cu for. .00 F e) Să se şteargă logic înregistrările aferente candidatelor care au ob inut medie mai mică decât 9.25 au fost admise. d) Să se adauge înregistrarea: Cretulescu Alexandra 9 Orastie 8.33 9.50 9.27 9. f) Să se şteargă fizic înregistrările şterse logic la punctul anterior. denumit Admis. Să se completeze valorile corespunzătoare pentru câmpul Admis. b) Se presupune că doar candidatele cu medii peste 9.

Pentru crearea unei baze de date se parcurge următoarea succesiune de paşi: 1. rezultând o fereastră denumită Database Designer. se execută clic pe butonul New şi se crează o baza de date. rezultând pagina Project Manager. Se crează un nou proiect. . Se selectează op iunea Tables şi se execută clic pe butonul New.Limbaje de programare şi baze de date 15 Baze de date. Sortare. 3. În fereastra Project Manager se execută click pe semnul ‘+’ apărut în fa a denumirii bazei de date. Din pagina Data se selectează op iunea Databases. Tipuri de indecşi Validare la nivel de câmp şi înregistrare CREAREA UNEI BAZE DE DATE O bază de date este formată din una sau mai multe tabele cu legături între ele şi eventual secven e de cod. Indexare Principalele obiective ale capitolului sunt: Crearea unei baze de date În elegerea conceptelor de sortare şi indexare În elegerea no iunii de index. 2.

adică într-un câmp pot fi introduse valori egale. Se pot stabili mai mul i indecşi dar numai unul este activ la un moment dat. urmată de apăsarea butonului Enter de la tastatură. Se execută comanda browse. Pentru a vizualiza con inutul noii tabele. În urma sortării rezultă o noua tabelă în care înregistrările sunt aranjate într-o anumita ordine. dar prin alegerea acestui tip de index doar prima în ordinea apari iei va fi accesibilă . Ordonarea fizică a înregistrărilor tabelei se realizează utilizând instruc iunea: sort on <denumire câmp> to <denumire fisier nou> Aceasta va fi aşadar scrisă în fereastra de comenzi. Indexul poate fi : • Regular (normal) • Unique (unic). utilizând comanda use <denumire fişier nou>.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 înregistrărilor unei tabele. Indexarea reprezintă ordonarea logică a înregistrărilor unei tabele. În urma indexării înregistrările tabelei sunt vizualizate într-o anumită ordine. mai întâi aceasta se deschide. dată de index.

b) Se execută un clic pe butonul Modify. c) În fereastra care rezultă. adcă valorile din câmpul respectiv vor fi ordonate crescător/descrescător. pentru celelalte câmpuri în care sunt necesare valori distincte. Pentru o tabelă se poate stabili un singur index primar. d) Din op iunea Index se alege Ascending (crescător) sau Descending (descrescător).Limbaje de programare şi baze de date 17 • Primary (primar). denumită Table designer. • Candidate (candidat). . se aleg indecşi de tip candidat. utilizat în cazul în care într-o tabela este nevoie de mai multe câmpuri cu valori distincte. Fereastra Table Designer – op iunile Ascending/Descending g) Din fereastra Table designer . MODUL DE STABILIRE A INDECŞILOR a) Din fereastra Project Manager se selectează denumirea tabelei care face parte din baza de date. pagina Indexes . Indexul primar obligă ca toate valorile din câmpul ales să fie distincte. Acest tip de index poate fi stabilit doar dacă tabela face parte dintr-o bază de date. Deoarece se poate stabili doar un singur index primar. adică cel care asigură identificarea unică a înregistrărilor unei tabele. optiunea Type se alege tipul de index dorit. în pagina Fields se execută un clic pe câmpul care va fi stabilit ca index.

18 Suport pentru laborator Fereastra Table Designer – tipuri de indecşi MODUL DE ACTIVARE A INDECŞILOR a) Se vizualizeaza con inutul tabelei. c) Se execută clic pe butonul OK. Fereastra de activare unui index . b) Din meniul Table se selectează optiunea Properties. Din pagina Index order se alege denumirea câmpului care se doreşte a fi activat.

Se selecteaza denumirea tabelei din fereastra Project Manager. • Field Validation : permite validarea la nivel de câmp. În pafina Fields . având un număr mai mare de caractere decât cel permis în mod uzual. se executa Modify. de exemplu formatul “a” permite introducerea numai a literelor şi a cifrelor. de exemplu. 2. Cum se procedează ? Se executa clic pe câmpul dorit şi în op iunea Format se scrie litera a. în josul paginii există anumite op iuni care vor fi utlizate după cum urmează: • Format: stabileşte un format de editare pentru valorile unui câmp.Limbaje de programare şi baze de date 19 Alte op iuni aferente unei tabele dintr-o bază de date 1. • Input mask : permite stabilirea unei “măşti de intrare”. . stabilirea faptului că prima litera va fi majusculă Cum se procedeaza ? Se executa clic pe campul dorit şi în op iunea Input mask se scrie : !aaaaaaaaaa. • Caption : permite stabilirea unei denumiri mai lungi pentru câmpuri Cum se procedează ? Se execută clic pe câmpul căruia se doreşte a se modifica denumirea şi în op iunea Caption se scrie denumirea dorită. adică interzice ieşirea din acel câmp dacă informa ia introdusă nu a corespuns unei cerin e.

• Update trigger : restric ionează modificarea denumirii oricărui câmp din tabelă. aferent încălcării condi iei. . RECNO()< sau > o valoare. de exemplu. • Insert trigger : limitează introducerea de noi înregistrări Cum se procedează ? În op iunea Insert trigger se scrie condi ia utilizând. în op iune Message se va scrie un mesaj corespunzător.20 Suport pentru laborator Cum se procedează ? Se executa clic pe câmpul ales şi în op iunea Rule se scrie condi ia. în op iune Message existând posibilitatea scrierii unui measaj. Obs : mesajul va fi afişat când condi ia de validare la nivelul înregistrărilor nu este respectată. În pagina Table există următoarele op iuni : • Record Validation : se poate realiza validarea la nivel de înregistrare Cum se procedează ? În op iunea Rule se scrie condi ia. Observa ie : mesajul va fi afişat când condi ia de validare la nivelul câmpului nu este respectată.

structura sau utilitatea tabelei. precum şi numărul de înregistrări şi de câmpuri. Cum se procedează ? În op iunea Delete trigger se scrie RECNO()#<număr înregistrare> • Table comment: permite adăugarea unui comentariu referitor la înregistrările.Limbaje de programare şi baze de date Cum se procedează ? În op iunea Update trigger se scrie .F. stabilire şi activare indecşi. Observa ie: • pentru a vizualiza data în ordine azi/luna/an. . 21 • Delete trigger : interzice ştergerea oricărei înregistrări din tabelă. utilizarea op iunilor suplimentare privind tabelele (validare la nivel de câmp şi la nivel de înregistrare). Tot în cadrul acestei pagini se regăsesc şi informa ii despre loca ia pe hard disk unde se află tabela. de exemplu se interzice ştergerea unei înregistrări. î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 Intrebări: Care este diferen a dintre o tabelă şi o bază de date? Ce înseamnă sortarea? Dar indexarea? Care sunt diferen ele dintre cele două concepte? Ce semnifică no iunile de validare la nivel de câmp şi validare la nivel de înregistrare? Studiu individual APLICA IA 2: Creare bază de date. creare tabelă.

Să se stabilească acestă regulă şi. 5.16.11.01. 4.22 APLICA IA 2 Suport pentru laborator Să se creeze baza de date denumită STUDENT în care se află o tabelă cu următoarea structură: Marca Nume Prenume Oras Data_ang Salariu şi cu următorul con inut : Marca 1 13 134 140 7 18 39 57 241 114 Nume Ionescu Vlad Radu Stan Rauta Stanciu Radulescu Matei Cretulescu Filip Prenume Maria Mirela Andrei Denisa Andreea Alex Ruxandra Iuliana Alexandra Carmen Oras Iasi Deva Cluj Arad Deva Brasov Cluj Ploiesti Orastie Oradea Data_ang 11.03 03.98 09.99 12. Ce se întâmplă? . Să se sorteze tabela. să se stabilească faptul că pentru câmpul oraş prima literă va fi majusculă.11. Să se stabilească pentru câmpul oraş formatul a. respectiv: Locul nasterii angajatului 7. 2. Regula de validare la nivelul câmpului marca nu permite valori mai mici decât 250. 6. 8.15. Să se stabilească următorii indecşi: marca – index de tip primar şi oraş – index de tip normal.00 04. Să se vizualizeze con inutul tebelei rezultate.30. în cazul în care aceasta este încălcată să se afişeze mesajul: Marca trebuie sa fie mai mica decat 250.02 Salariu 500 600 350 380 650 400 260 390 100 850 N C C C D N 4 30 30 20 8 10 1.03 03.01 07.04. Să se activeze pe rând indecşii stabili i la puncul anterior. Introduce i o nouă înregistrare în care valoarea din câmpul marca să încalce regula.10.01.07.02 02.00 08. 3.00 10. Să se stabilească pentru câmpul oraş o denimre mai lungă.

10. Să se stabilească acestă regulă şi. Introduce i o nouă înregistrare în care valoarea din câmpul salariu să încalce regula. Interzice i ştergerea primei înregistrări. Ce se întâmplă? 12. 14. Restric iona i modificarea denumirii oricărui câmp din tabelă. Verifica i.Limbaje de programare şi baze de date 23 9. Adăuga i următorul comentariu referitor la tabelă: Aceasta tabela este utilizata pentru evidenta salaratilor firmei ALFA SRL. . în cazul în care aceasta este încălcată să se afişeze mesajul: Salariul trebuie sa fie mai mare decat 300. Regula de validare la nivelul înregistrărilor stabileşte ca salariul să nu fie mai mic decât 300. Limita i introducerea de noi înregistrări la 14 şi apoi introduce i o nouă înregistrare. Verifica i. 13. Ce se întâmplă? 11. de la infiintare pana in prezent.

Legăturile se stabilesc pe baza unui câmp comun celor două tabele. . legături permanente : valabile ori de câte ori se deschide baza de date. iar pentru tabela-fiu câmpul se numeşte cheie externă. legături temporare : valabile în cadrul sesiunii de lucru curente 2. se construiesc o singură dată şi fac parte integrantă din baza de date La stabilirea unei rela ii între două tabele una dintre tabele are rol conducător. fiind denumită tabela-fiu. pentru valori egale aflate în acele câmpuri.24 Suport pentru laborator BAZE DE DATE. LEGĂTURI ÎNTRE TABELE Principalele obiective ale capitolului sunt: Prezentarea tipurilor de legături între tabelele apar inând unei baze de date Între doua sau mai multe tabele apar inând unei baze de date se pot stabili două tipuri de legături (rela ii): 1. Pentru tabela-părinte acest câmp se numeşte cheie primară. fiind denumită tabela-părinte şi cealaltă tabelă este condusă.

nu pot exista două înregistrări cu aceeaşi valoare CNP. LEGĂTURI TEMPORARE 1. Se verifică existen a indecşilor sau se stabilesc indecşii în cazul în care nu sunt stabili i. pentru a deschide tabelele. Fereastra Data Session 5. CNP este cheie primară într-o tabelă cu informa ii despre popula ia unui oraş. deci fiecere înregistrare va fi unică. se execută clic pe tabela care se doreşte a fi deschisă. Stabilirea legăturilor temporare şi a legăturilor permanente presupune realizarea simultană a trei condi ii: a) existen a unei baze de date cu cel pu in două tabele . 4. De exemplu.Limbaje de programare şi baze de date 25 De asemenea se impune o precizare: cheia primară reprezintă un câmp ale cărui valori au rol unic de identificare a fiecărei înregistrări. Se execută clic pe butonul Open. Se crează un nou proiect sau se deschide un proiect existent. denumită Open. bifând de semenea op iunea Exclusive. 2. b) în tabela-părinte câmpul comun este index primar c) în tabela-fiu câmpul comun este stabilit ca fiind index – de obicei normal. Din fereastra ob inută astfel. con inând o bază de date. Se procedează similar pentru toate tabelele pentru care se doreşte stabilirea unor legături temporare. apoi se execută clic pe butonul OK. Din meniul Window se alege op iunea Data Session. 3. . deoarece fiecare cetă ean are un singur CNP.

apoi în fereastra Expression Builder. în cazul în care această denumire nu există deja. 8. în dreptul op iunii SET RELATION se scrie denumirea câmpului comun. Se execută clic pe denumirea tabelei-părinte. Din fereastra rezultată. În acest moment între cele două tabele a fost realizată o legătură temporară de tip one-to-one.26 Suport pentru laborator 6. Se execută clic pe butonul Relations. se execută clic pe butonul Move şi apoi pe butonul OK. Fereastra Expression Builder 9. denumită denumită Set Index Order se execută OK. 7. . se execută clic pe butonul 1 to many. Se execută clic pe butonul OK. În fereastra rezultantă. În cazul în care se doreşte realizarea unei legături de tip one-tomany. denumită Create One-To-Many Relationship se alege denumirea tabelei/tabelelor cu care se doreşte a se realiza legătura.

Coresponden a în modul Browse a valorilor comune ale unui index Se constată că principalul avantaj al legăturii temporare este acela că în momentul în care în tabela-părinte cursorul este mutat pe o înregistrare. în tabela-fiu fiind afişate doar înregistrările care con in în index valoarea înregistrării curente din tabela-părinte. Se deschide fereastra Database Designer. LEGĂTURI PERMANENTE 1. Se vizualizează în paralel con inutul tabelelor şi se execută un clic pe căte o înregistrare din tabela-părinte. . În acest moment structura şi indexul fiecărei tabele pot fi vizualizate. în tabela-fiu sunt afişate doar înregistrările care con in valoarea din câmpul comun aferent înregistrării din tabela-părinte. executând un clic în fereastra Project Manager pe denumirea bazei de date şi apoi pe butonul Modify.Limbaje de programare şi baze de date 27 Fereastra pentru crearea legăturilor de tip one-to-many 10.

data_factura: 12/06/2005. nu poate exista o factură emisă de un client care nu există. prin metoda drag-and-drop se plasează cursorul pe denumirea corespunzătoare a indexului din tabelafiu. nume_client. • Rules for Inserting – reguli pentru inserare. . se pot stabili trei tipuri de reguli referitoare la înregistrările din ambele tabele: • Rules for Updating – reguli pentru actualizare. localitate]. cod_client: 111) dacă în tabela CLIEN I nu există un client cu cod 111.28 Suport pentru laborator 2. dacă se dau două tabele FACTURI [numar_factura. O restric ie de integritate referen ială se referă la faptul că în tabela-fiu nu pot exista înregistrări în care în cheia externă să fie înregistrate valori care nu se află în mul imea valorilor cheii primare din tabela-părinte. Realizarea unei legături permanente Stabilirea unei legături permanente permite stabilirea integrită ii referen iale. eliberând cursorul. Se execută un clic pe denumirea indexului primar corespunzător din tabela-părinte şi. data_factura. nu poate exista o înregistrare (numar_factura: 12. 1. De exemplu. Se execută un clic dreapta pe legătura creată şi se alege op iunea Edit Referential Integrity. Se constată realizarea unei legături permamante. • Rules for Deleting – reguli pentru ştergere. Integritatea referen ială se stabileşte astfel. În fereastra rezultată. cod_client] şi CLIEN I [cod_client. altfel spus. 2.

Studiu individual Aplica ia 3: Creare legături temporare şi permamante între tabele apr inând unei baze de date. restrict şi ignore. atunci când în tabela-fiu se regăsesc înregistrări care con in acea valoarea. Ignore se referă la posibilitatea actualizării/ştergerii independente a înregistrărilor din cele două tabele în momentul modificării/ştergerii unei valori a indexului primar. referindu-se la faptul că nu este permisă/este permisă adăugarea unei noi înregistrări în tabela-fiu dacă valoarea înregistrată în index nu există în mul imea valorilor indexului primar corespunzător tabelei-părinte.Limbaje de programare şi baze de date 29 Fereastra Referential Integrity Builder Pentru primele două op iuni. se realizează actualizarea/ştergerea automată a înregistrărilor din tabela-fiu care con in acea valoare. Restrict se referă la faptul că nu este permisă modificarea/ştergerea unei înregistrări. Cascade se referă la faptul că atunci când o înregistrare con inând o valoare ale indexului primar din tabela-părinte este modificată/ştearsă. . există trei posibilită i: cascade. şi implicit a unei valor a indexului primar. Pentru op iunea Rulea for Inserting există dor două posibilită i: restrict şi ignore.

ascendent: nr_fact Cod_ Den_produs PU produs 1 Apa 2 minerala 2 Biscuiti 1 3 Cereale 4 4 Portocale 5 5 Servetele 1 6 Ciocolata 3 7 Compot 2 8 Iaurt 3 9 Paine 1 Cant Nr_fact 500 55 15 10 150 40 14 12 100 56 116 315 116 117 116 18 23 12 .30 APLICA IA 3 Suport pentru laborator Să se realizeze un nou proiect. ascendent: cod_client Structură Cod_produs Den_produs PU Cant Nr_fact N C N N N 10 30 10 10 10 Con inut Index primar. ascendent : cod_client Structură Nr_fact N Cod_client C Data D 10 4 8 Con inut Nr_fact 23 116 315 117 18 56 12 Cod_client AMP HTR COR DAV ERG ERG AMP Data 05/11/05 04/12/05 06/04/05 12/03/04 12/05/04 11/07/05 02/10/04 Index primar. Să se creeze următoarele tabele. ascendent : nr_fact Index normal. ascendent : cod_produs Index normal. apar inând bazei de date: Structură Cod_client C Nume C Oras C 4 20 10 Con inut Cod_client AMP COR DAV ERG HTR Nume Amep CorrImpex Daval Energo Hatrom Oras Brasov Galati Brasov Bucuresti Brasov Index primar. Să se realizeze o bază de date.

5. 6.Limbaje de programare şi baze de date 31 3. Să se stabilească legături permamante între cele trei tabele. . Să se verifice integritatea referen ială prin ştergerea unei înregistrări existente şi prin adăugarea unei noi înregistrări. Să se stabilească următoarele restric ii de integritate referen ială: cascade pentru ştergere şi restrict pentru inserarea unei noi înregistrări. Să se stabilească legături temporare între cele trei tabele. 4.

... ATRIBUT2.. VALOARE_ATRIBUT2. MODIFICAREA ŞI ŞTERGEREA LINIILOR Principalele obiective ale capitolului sunt: Adăugarea unei linii într-o tabelă Editarea unor date dintr-o tabelă Ştergerea unor date dintr-o tabelă ADĂUGAREA UNEI LINII Comanda SQL de adăugare de noi linii este INSERT. ..) În cazul tabelei ANGAJATI se poate introduce o nouă line astfel: Se dă tabela Angaja i cu urmatoarele date: ..)] VALUES (VALOARE_ATRIBUT1. care are. . în modul de lucru cel mai pu in preten ios următorul format: INSERT INTO TABELĂ [(ATRIBUT1.32 Suport pentru laborator INSERAREA.

250) iar tabela va arăta astfel: STERGEREA LINIILOR Comanda SQL pentru ştergerea uneia sau mai multor linii dintr-o tabelă este DELETE DELETE FROM TABELA WHERE CONDITIE avea: Dacă dorim să ştergem ultima înregistrare introdusă vom DELETE FROM ANGAJATI WHERE NUME='RADU' .Limbaje de programare şi baze de date 33 INSERT INTO ANGAJATI VALUES (11. 'Info'. 'RADU'.

.. astfel: PACK Iar tabela va arăta astfel: MODIFICAREA VALORILOR UNOR ATRIBUTE Pentru a modifica valoarea unuia sau mai multor atribute sau mai multe linii dintr-o tabelă se foloseşte comanda UPDATE cu formatul general: UPDATE TABELA SET ATRIBUT1=EXPRESIE ATRIBUT2=EXPRESIE2...34 Suport pentru laborator În cazul Visual FOXPRO este nevoie de comanda PACK ca ştergerea să fie efectivă. .] WHERE PREDICAT [.

Limbaje de programare şi baze de date 35 Modificarea se va produce pe toate liniile tabelei care îndeplinesc condi ia formulată prin predicat. Crea i tabela FACTURI (ca în ANEXA 1) 2. În tabela FACTURI (ANEXA 1) adăuga i următoarele date: . ştergere şi modificarea unor date dintr-o tabelă APLICA IA 4 1. În cazul tabelei ANGAJATI dacă dorim schimbarea salariului în 1000 pentru angajata GABRIELA vom avea: UPDATE ANGAJATI NUME='Gabriela' SET SAL_BRUT=1000 WHERE Studiu individual Aplica ia 4: Introducere.

36

Suport pentru laborator

3. În tabela FACTURI modifica i VALOAREA la 75000 pentru toate facturile care au valoare mai mare de 10.000. 4. Şterge i toate facturile pentru care cod_furn este c1. 5. Modificati cod_furn în n99 pentru facturile a căror valoare este de cel pu in 8000. 6. Ştergeti toate înregistrările pentru care nr_factură este mai mic de 4000. 7. Stergeti toate datele din tabela FACTURI. 8. Introduce i cinci facturi noi utilizând INSERT şi cinci facturi utilizând 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 informa iilor din una sau mai multe tabele libere sau apar inând 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 interogări, care pot fi depozitate la o destina ie precizată. Prin intermediul unei interigări se construieşte o instruc iune SELECT a acestui limbaj, care cuprinde întregul mecanism de interogare al VFP. Rezultatele interogărilor se pot ob ine cu ajutorul unui generator denumit Query Designer, cu posibilitate de utilizare pe baza rubricii Queries din fereastra Project Manager, existând posibilitatea de a utiliza de asemenea şi ajutorul oferit de VFP prin intermediul Query Wizard.

38

Suport pentru laborator

O altă posibilitate de ob inere a rezultatelor interogărilor este utilizarea comenzii Select, reprezentată de o sintaxă specifică, comandă care va fi executată în fereastra de comenzi. Exemplificarea utilizării comenzii Select se va realiza utilizând o bază de date cu informa ii necesare organizării sesiunii studen eşti. 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ă. SELEC IA ŞI PROIEC IA Clauza SELECT corespunde operatorului proiec ie din algebra rela ională, fiind utilizată pentru desemnarea listei de atribute (coloane) din rezultat. Clauza FROM este cea în care sunt enumerate rela iile din care vor fi extrase informa iile aferente consultării. Clauza WHERE desemnează predicatul selectiv al algebrei rela ionale (condi ia), relativ la atribute ale rela iilor 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 cj - reprezintă coloanele rezultat; rj - reprezintă rela iile ce trebuie parcurse; p - reprezintă predicatul, condi ia ce trebuie îndeplinită de tupluri (linii) pentru a fi incluse în rezultat. Predicatul poate fi simplu sau compus (din mai multe condi ii). Când clauza WHERE este omisă se consideră implicit că predicatul p are valoare logică ''adevărat'', astfel încât în rezultat vor unde:

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 alcătuit din toate coloanele rela iilor 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 op iunii DISTINCT. exemplu: select distinct c1,c2 from r1 În concluzie, o frază SELECT, corespunde: • unei selec ii algebrice (clauza WHERE p) • unei proiec ii (SELECT ci) • unui produs cartezian (FROM - r1 ⊗ r2 ⊗ ... ⊗ rm) şi conduce la ob inerea 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. Execu ia 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: Utilizăm tabela ANGAJATI în care introducem următoarele date:

data_nasterii. nume.1 2. cod_dep from angajati sau: select * from angajati Rezultatele exemplului 1. sal_brut.dbf 1. Care sunt datele con inute în tabela angajati? select nr.40 Suport pentru laborator Datele tabelei angajati. prenume. sal_brut from angajati . Care sunt numele salaria ilor şi salariul brut? select nume.

5 . Care sunt datele salaria ilor care lucrează în departamentul informatic (cod_dep="info")? select * from angajati WHERE cod_dep="info" Rezultatele exemplului 1. sal_brut as salariu_brut from angajati Rezultatele exemplului 1. Care sunt numele salaria ilor şi salariul brut. Afişa i numele angajatilor şi salariul brut.Limbaje de programare şi baze de date Rezultatele exemplului 1.4 5.3 4. dar pentru coloana sal_brut denumim coloana salariu_brut? select nume.2 41 3. pentru salaria ii care au salariul brut mai mare de 700 lei select nume from angajati where sal_brut>700 Rezultatele exemplului 1.

6 7. Afişa i numele angaja ilor şi data naşterii pentru angaja ii născu i după 15-03-1980 (formatul pentru data este {^yyyy/mm/dd}) select nume. cod_dep from angajati where cod_dep="info" or cod_dep="cont" Rezultatele exemplului 1. Afişa i numele angaja ilor şi data naşterii pentru angaja ii născu i între 15-03-1980 şi 20-05-1983 .42 Suport pentru laborator 6. Care sunt datele salaria ilor 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.8 9. Afişa i numele salaria ilor şi codul departamentului pentru angajatii care sunt fie în departamentul informatic (cod_dep="info") fie în departamentul contabilitate (cod_dep="cont") select nume. data_nasterii from angajati where data_nasterii > {^1980/03/15} Rezultatele exemplului 1.7 8.

11 . data_nasterii from angajati where data_nasterii > {^1980/03/15} and data_nasterii < {^1983/05/20} Rezultatele exemplului 1.10 11. Care sunt codurile de departament din tabela angajati.Limbaje de programare şi baze de date 43 select nume.9 10. Care sunt codurile de departament din tabela angajati? select cod_dep from angajati Rezultatele exemplului 1. afişate o singură dată? select distinct cod_dep from angajati Rezultatele exemplului 1.

Introduceti următoarele date: 3. Realiza i o tabelă FURNIZORI cu structura tabelei FURNIZORI din ANEXA 1. APLICA IA 5 1. 2. selec ii simple şi utilizând condi ii simple şi compuse. Care sunt clauzele obligatorii ale unei selec ii? 3. Care sunt clauzele principale ale unei selec ii? 2. Care sunt furnizorii din Brasov? 4. Care sunt furnizorii din Braşov sau Bucuresti? .44 Suport pentru laborator Intrebări: 1. Câte tabele putem trece la clauza FROM? Studiu individual Aplica ia 5: Introducere de date.

8.Limbaje de programare şi baze de date 5. 45 . Modifica i localitatea în Cluj pentru furnizorii din Constanta. Şterge i furnizorii care sunt din Bucureşti. Care sunt furnizorii care nu stau în Constan a? 6. Introduce i trei furnizori noi utilizând INSERT. 7.

46 Suport pentru laborator Coloane. De exemplu dacă dorim să aflăm care este TVA-ul aferent unei facturi. pe baza unor expresii. 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 interogări SQL ine de definirea. vom avea: In tabelă FACTURI avem introduse următoarele date: . pe lângă atributele tabelelor. Clauza AS ermite denumirea coloanelor calculate sau redenumirea unor coloane ale tabelelor. a unor coloane noi.

precum şi valoarea cu TVA pentru fiecare factură vom avea selectul: select nr_factura. valoare*119/100 as val_totala from facturi şi vom ob ine Query-ul: Rezultatele selec iei 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.2) as data_scadenta from facturi . data_fact. cod_furn. gomonth(data_fact. valoare*19/100 as TVA. valoare.Limbaje de programare şi baze de date 47 Datele tabelei FACTURI Pentru a afişa valoarea tva-ului.

nr_luni) returnează o nouă dată plecând de la data introdusă la care adună un nr. de luni. Cum putem ob ine o coloană nouă utilizând în selec ie o condi ie? . gomonth(data_fact. Cum putem să denumim coloana din rezultat? 2. 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.0)+60 as data_scadenta from facturi Ob inerea datei scadente pentru fiecare factură Intrebări: 1.48 Suport pentru laborator Ob inerea datei scadente pentru fiecare factură Func ia GOMONTH (data.

Introduceti următoarele date: 3. Care sunt mijloacele fixe cu valoare mai mare de 30000? 4. Care sunt mijloacele fixe care au amortizarea lunară mai mare de 1000? 7. 8. 5. Realiza i tabela MF după structura tabelei MF din ANEXA 1. Dacă PER_AMORT reprezintă perioada de amortizare în ani. 6. 2. Denumi i coloana cu amortizarea lunară liniară AM_LUN. Calcula i amortizarea lunară liniară pentru mijloacele fixe cumpărate de la furnizorul c1 sau c2.Limbaje de programare şi baze de date Studiu individual 49 Aplica ia 6: Calcularea amortizării lunare prin metoda liniară. . calculati care este valoarea amortizării lunare liniare. APLICA IA 6 1. Modificati perioada de amortizare în 5 pentru mijloacele fixe cu codul 10004. Calcula i care este amortizarea lunară pentru "masina 2" 9.

SUM. avg. MAX Principalele obiective ale capitolului sunt: Utilizarea func iilor Count. min. AVG. altfel spus. sum. max Realizarea unor noi coloane care să con ină date ob inute prin utilizarea func iilor de mai sus. MIN. în rezultatul unei consultări. COUNT numără câte vaşlori diferite de NULL are o coloană specificată sau câte linii sunt: De exemplu dacă dorim să aflăm căte facturi amvem în tabela FACTURI (câte linii sunt) avem: select count (*) from facturi . Func ia COUNT contorizează valorile neutre ale unei coloane sau numărul de linii dintr-un rezultat al unei interogări.50 Suport pentru laborator Func iile agregat: COUNT.

De exemplu dacă dorim să aflăm 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ă aflăm 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" .Limbaje de programare şi baze de date 51 Numărul de facturi din tabela FACTURI Sau de exemplu dacă dorim să vedem câte facturi au valoarea peste 3000 vom avea: select count(*) from facturi WHERE valoare>3000 Numărul de facturi din tabela FACTURI cu valoare mai mare de 3000 Func ia SUM este una dintre cele mai utilizate func ii în aplica iile economice. deoarece datele financiar-contabile şi cele ale eviden ei tehnico-operative sunt preponderent cantitative.

caz în care elementul de compara ie 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 . Se pot folosi şi pentru atribute de tip şir de caractere.52 Suport pentru laborator Func ia AVG (AVERAGE) calculează media aritmetică a unei coloane prin divizarea sumei valorilor coloanei respective la numărul de valori nenule ale acesteia. De exemplu dacă dorim să aflăm 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ă aflăm 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ă func ii MIN şi MAX determină valoarea minimă şi maximă pentru o coloană.

SUM. 2. Introduce i în tabela FACTURI următoarele date: .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ă aflăm 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 APLICA IA 7: Utilizarea func iilor: AVG. MIN. MAX. Realiza i tabela FACTURI cu structura tabelei FACTURI din ANEXA 1. COUNT APLICA IA 7 1.

Câte facturi avem în tabelă cu o valoare între 4000 şi 30000? (prin două metode) 10. Cate facturi avem în tabelă cu o valoare mai mare de 5000? 9. 3525 şi 3522? . Calcula i valoarea medie a valorii facturilor dar nu cu AVG. Care este valoarea cea mai mare a unei facturi? 5. Câte facturi avem în tabelă? 8. Care este valoarea cea mai mică a unei facturi? 6. Care este media valorii facturilor? 4.54 Suport pentru laborator 3. 7. Care este valoare medie a facturilor cu nr.

Însă în practică forma de prezentare a rezultatelor interogării est importantă. De exemplu dacă dorim pentru tabela facturi să afişăm toate datele ordonate după câmpul cod_furn vom avea select * from facturi order by cod_furn .Limbaje de programare şi baze de date 55 Op iunea ORDER BY Principalele obiective ale capitolului sunt: Ordonarea datelor unei tabele după unul sau mai multe atribute Una dintre caracteristicile modelului rela ional este că nici ordinea atributelor. Spre exemplu o listă a localită ilor dintr-o tabelă este mai uşor citită în ordine alfabetică. nici ordinea liniilor în rela ii nu reprezintă importan ă din punctul de vedere al con inutului informa ional.

intră în ac iune criteriul de "balotaj". la valori egale ale primului atribut.56 Suport pentru laborator Datele ob inute în urma ordonării după câmpul cod_furn Aranjarea se poate face atât crescător (ASC) cât şi descrescător (DESC). De exemplu dacă dorim să ordonăm datele din facturi întâi după cod_furn şi apoi după valoare (după acest criteriu descrescător) vom avea: select * from facturi order by cod_furn. etc. care este al doilea atribut. În plus se pot specifica mai multe coloane care să servească drept criterii suplimentare de ordonare. Astfel. valoare desc Ob inerea datelor ordonate după cod_furn şi apoi descrescător după valoare Intrebări: 1. După câte câmpuri putem ordona şi cum? . Care este diferen a între ORDER şi SORT? 2.

ordonată alfabetic pentru mijloacele fixe cu o valoare mai mare de 32000 inclusiv. 8: Ordonarea rezultatelor unei APLICA IA 8 1. Care este valoare medie a amortizării lunare a mijloacelor fixe? 10. 7. Care este amortizarea lunară liniară pentru fiecare mijloc fix. Care sunt datele din tabela MF. ordonate alfabetic după denumire? 4. Câte mijloace fixe avem? . Realiza i tabela MF după structura tabelei MF din ANEXA 1. datele fiind ordonate după denumirea mijlocului fix? 6. 8. 2. Afişa i denimirea mijloacelor fixe. Introduceti următoarele date: 3. Afişa i alfabetic codurile furnizor . Care sunt datele din tabela MF.Limbaje de programare şi baze de date 57 Studiu individual APLICA IA interogări.o singură dată. Care este valoarea cea mai mare unui mijloc fix? 9. ordonate alfabetic după denumire şi apoi după valoare? 5.

Operatorul BETWEEN este util pentru definirea intervalelor de valori.58 Suport pentru laborator OPERATORII BETWEEN. la care se adaugă IS NULL. LIKE (ca şi). IN (în). De exemplu dacă dorim să afişăm doar facturile care au valori între 4000 şi 8000 vom avea: select * from facturi where valoare between 4000 and 8000 . pe lângă >.= şi a altor operatori. LIKE ŞI IN Principalele obiective ale capitolului sunt: Utilizarea operatorilor BETWEEN LIKE IN Pentru formularea predicatului de selec ie. >=.<. SQL permite utilizarea.<=. dintre care ve vom opri la BETWEEN (cuprins între).

Procentul substituie un şir de lungime variabilă. Simbolurile procent şi underscore sunt denumite jokeri.Limbaje de programare şi baze de date Date afişate utilizând condi ia BETWEEN Acelaşi rezultat il puteam ob ine şi cu o condi ie dublă: select * from facturi where valoare >= 4000 and valoare <=8000 59 Date afişate utilizând condi ia dublă Operatorul LIKE permite compararea unui atribut (expresii) cu un literal utilizând o "mască" construită cu ajutorul specificatorilor multiplii % şi _ . în timp ce underscore substituie un singur caracter. Pentru exemplificare următoarele date: mai introducem două facturi cu Introducerea suplimentară a 2 facturi De exemplu dacă dorim să afişăm care sunt to i furnizorii a căror cod_client începe cu litera "c" vom avea: select * from facturi where cod_furn like "c%" . 0-n caractere.

60 Suport pentru laborator Furnizorii a căror cod_furn începe cu litera "c" De exemplu dacă dorim să afişăm care sunt to i furnizorii a căror cod_client începe cu litera "m" vom avea: select * from facturi where cod_furn like "m%" Furnizorii a căror cod_furn începe cu litera "m" De exemplu dacă dorim să afişăm care sunt to i furnizorii a căror cod_client are două caractere şi al doilea caracter este 5 vom avea: select * from facturi where cod_furn like "_5" Furnizorii a căror cod_furn are două caractere şi al doilea caracter este 5 Atunci când se testează dacă valoarea unui atribut este încadrabilă într-o listă de valori dată. c3 şi c4 avem: select * from facturi where cod_furn in ("c1". în locul folosirii abundente a operatorului OR este mai elegant să se apeleze la operatorul IN."c4") . De exemplu dacă dorim să afişăm facturile furnizorilor care au cod_furn c1."c3".

LIKE şi IN în calcularea unor date pe baza tabelei ANGAJATI. 600. Cu ce poate fi substituit operatorul BETWEEN? Studiu individual APLCA IA 9: Utilizarea operatorilor BETWEEN.Limbaje de programare şi baze de date 61 Facturile furnizorilor care au cod_furn c1. 600. 5000 Intrebări: 1. Care este diferen a între operatorii BETWEEN şi IN? 2. APLICA IA 9 1. Realiza i tabela SALARIATI pe baza structurii tabelei ANGAJATI din ANEXA 1. 600. . 5000) Facturile care au valoare de 500. 5000 vom avea: select * from facturi where valoare in (500. c3 şi c4 Sau de exemplu dacă dorim să selectăm facturile care au valoare de 500.

Care este numele salariatului cu salariul cel mai mare? 8. 1000. Câ i angaja i au prenumele din trei litere? 10. Care este salariul mediu? 7. Care sunt salaria ii care au salariu cuprins între 550 şi 1000? 4.62 2. 750. Câ i angaja i avem? 6. Care sunt salaria ii care nu au prenumele ION sau IOANA? . Care sunt angaja ii a căror nume începe cu litera M sau I? 9. În tabelă introduce i următoarele date: Suport pentru laborator 3. sau 300? 5. Care sunt angaja ii care au salariu 600.

în timp ce produsul cartezian se calculează automat prin simpla enumerare a celor fouă tabele din clauza FROM. după aceeaşi strctură a tabelei FURNIZORI creăm tabela FURNIZORI2. SQL elimină automat liniile identice din rezultat.Limbaje de programare şi baze de date 63 REUNIUNE. De exemplu. PRODUS CARTEZIAN Principalele obiective ale capitolului sunt: Prezentarea operatorului UNION Realizarea produsului cartezian Primii trei operatori asamblişti prezintă operatori SQL dedica i: UNION. MINUS (EXTRACT). La reuniunea a două tabele. Dacă se doreşte prelucrarea tuturor liniilor celor două rela ii şi implicit apari ia de linii duplicate. se foloseşte caluza ALL (UNION ALL). INTERSECT. Tabela FURNIZORI2 con ine următoarele date: .

64 Suport pentru laborator Datele tabelei FURNIZORI2 Datele tabelei FURNIZORI Dacă dorim să afişăm toate datele (utilizând reuniunea) din tabelele FURNIZORI şi FURNIZORI2 avem: select * from furnizori union select * from furnizori2 .

Produsul cartezian se realizează prein simpla enumerare a tabebelor în clauza FROM.Limbaje de programare şi baze de date 65 Toate datele (utilizând reuniunea) din tabelele FURNIZORI şi FURNIZORI2 SQL nu pune la dispozi ie vreun operator special dedicat produsului cartezian. furnizori . De exemplu dacă dorim să realizăm produsul cartezian între tabelele FACTURI şi FURNIZORI avem: select * from facturi.

Ce reprezintă operatorul UNION? 2.66 Suport pentru laborator Produsul cartezian al tabelelor FACTURI şi FURNIZORI Intrebări: 1. Cum se realizează produsul cartezian? Studiu individual APLICA IA 10: Eviden a mijloacelor fixe ale unei întreprinderi APLICA IA 10 1. Realiza i tabela MF1 şi MF2 după structura tabelei MF din ANEXA 1. .

ordonate alfabetic după denumire şi apoi după valoare? 5. ordonate alfabetic după denumire? 4. Afişa i datele celor două tabele într-un query 6. Care sunt datele din tabela MF1. Care sunt datele din tabela MF2. Care sunt mijloacele fixe ce se găsesc şi în MF1 şi în MF2? 8. Introduceti următoarele date: 67 Datele tabelei MF1 Datele tabelei MF2 3.Limbaje de programare şi baze de date 2. Care este valoarea medie a mijloacelor fixe din MF2 a căror nume începe cu litera C? . Care este valoarea medie a mijloacelor fixe din MF1? 9. Care sunt mijloacele fixe ce se găsesc în MF1 şi nu se găsesc în MF2? 7.

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

Limbaje de programare şi baze de date 69 THETA ŞI ECHI-JONC IUNEA Principalele obiective ale capitolului sunt: Realizarea unei legături între două sau mai multe tabele Utilizarea condi iilor în echi-jonc iune SQL nu prezintă clauze sau operatori speciali pentru jonc iune.E unde: R1 A 20 30 40 B XYZ XXZ YYX C 30 20 25 R2 C 25 40 30 D XYZ YYX XXZ E 30 25 40 iar pentru echi-jonc iune avem: . R2 where R1.A>=R2. Deci pentru theta-jonc iunea dintre două rela ii R1 şi R2 avem: select * from R1. jonc iunea fiind o combina ie între produs cartezian şi selec ie.

70 Suport pentru laborator select * from R1.A>=R2. .A=R2. R2 where R1.E Pentru următorul exemplu utilizăm FURNIZORI.E Varianta cu INNER JOIN (jonc iune internă) este: select * from R1 inner join R2 on R1.A=R2.E respectiv select * from R1 inner join R2 on R1. FACTURI cu următoarele date: următoarele tabele: Se cere să de afişeze pentru fiecare factură numele furnizorului.

nume_furn from facturi. furnizori. furnizori.cod_furn=furnizori.cod_furn=furnizori. furnizori.*.cod_furn Numele furnizorului pentru fiecare factură Dacă dorim să afişăm numele furnizorului pentru fiecare factură numai pentru furnizorul cu cod_furn "c1" vom avea: select facturi.*.cod_furn and facturi.nume_furn from facturi inner join furnizori ON facturi.cod_furn="c1" .cod_furn=furnizori.nume_furn from facturi. furnizori where facturi.cod_furn Numele furnizorului pentru fiecare factură Acelaşi rezultat se poate ob ine utilizând INNER JOIN: select facturi. furnizori where facturi.Limbaje de programare şi baze de date 71 select facturi.*.

De ce două tabele sunt legate logic prin valori? 2. Introduce i în tabele următoarele date: .72 Suport pentru laborator Numele furnizorului pentru fiecare factură numai pentru furnizorul cu cod_furn "c1" Intrebări: 1. Să se realizeze tabelele ANGAJATI şi DEPARTAMENTE după structura tabelelor ANGAJATI şi DEPARTAMENTE din ANEXA 1 2. Care este condi ia necesară pentru echijonc iune? Studiu individual APLICA IA 11: Eviden a salaria ilor dintr-o firmă APLICA IA 11 1.

Care sunt angaja ii a căror şef începe cu litera "A"? 13. Câ i angaja i lucrează în Bucureşti? 6. Care sunt angaja ii care lucrează în Braşov? 5. Care sunt angaja ii care lucrează la departamentul marketing? 10. Câ i subalterni are Vlad? 11. 4. Care sunt angajatii angaja i dupa 01/01/1980? 9.Limbaje de programare şi baze de date 73 3. Afişa i şeful pentru fiecare angajat. Care sunt angaja ii care lucrează în Braşov sau Bucureşti? . Care este salariul mediu pentru departamentul management? 12. Care este numele angajatului cu salariul maxim? 7. Care este fondul de salarii pentru fiecare cod_dep? 8.

Clauza unei fraze SELECT ce con ine această clauză se ob ine prin regruparea tuturor liniilor din tabelele eumerate în FROM. prin intermediul WHERE au fost selectate tupluri ale tabelei. În frazele SELECT formulate până în acest paragraf.74 Suport pentru laborator GRUPAREA TUPLURILOR: GROUP BY ŞI HAVING Principalele obiective ale capitolului sunt: Utilizarea grupurilor Utilizarea condi iilor pentru grupuri Clauza GROUP BY formează grupe (grupuri) de tupluri ale unei rela ii. 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). Formatul general este: . extrăgându-se câte o apari ie pentru fiecare valoare distinctă a coloanei/grupului de coloane. pe baza valorilor comune ale unui atribut.

. coloană2.. Dacă WHERE ac ionează la nivel de tuplu.. sum(valoare) from facturi group by cod_furn having cod_furn="c1" Valoarea totală a facturilor pentru cod_furn egal cu "c1" . selectând acele linii care îndeplinesc o condi ie specificată. Din rezultat sunt eliminate toate grupurile care nu satisfac condi ia specificată. sum(valoare) from facturi group by cod_furn Valoarea totală a facturilor pentru fiecare cod_furn Cea mai simplă defini ie a clauzei HAVING este: clauza HAVING este WHERE-ul ce operează la nivel de grupuri.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. HAVING permite specificarea unor condi ii de selec ie care se aplică rupurilor de linii create prin GROUP BY.Limbaje de programare şi baze de date 75 select coloană1. De exemplu dacă dorim să vedem care este valoarea totală a facturilor pentru cod_furn egal cu "c1" vom avea: select cod_furn..

Introduce i în tabele următoarele date: . Să se realizeze tabelele ANGAJATI şi DEPARTAMENTE după structura tabelelor ANGAJATI şi DEPARTAMENTE din ANEXA 1 2.76 Suport pentru laborator Intrebări: Când se utilizează GROUP BY? Care este defini ia condi iei HAVING? Studiu individual APLICA IA 12: Situa ii de grup la nivelul salaria ilor APLICA IA 12 1.

Care este salariul total pentru departamentul MANAGEMENT? 6. Afişa i şeful pentru fiecare angajat.Limbaje de programare şi baze de date 77 3. Care este şeful departamentului cu cei mai mul i angaja i? 10. Câ i angaja i are Vlad? . Care este salariul total pentru fiecare departament? 5. 4. Care este departamentul cu angaja ii cei mai mul i? 9. Care este numărul de salaria i din fiecare departament? 8. Care este suma totală a salariilor din departamentele management şi contabilitate? 7.

Instruc iunile cel mai des utilizate pentru calcule statistice sunt: average <denumire câmp> <domeniul înregistrărilor> to <denumire variabila> Instruc iunea furnizează media aritmetică a valorilor numerice din câmpul specificat. dar şi func ii statistice şi financiare. pentru calcule statistice. executate în fereastra de comenzi. . count <domeniul înregistrărilor> to <denumire variabila> Instruc iunea furnizează numărul de înregistrări din tabelă care respectă condi iile impuse în domeniul înregistrărilor.78 Suport pentru laborator FUNC II DE CALCUL ÎN VISUAL FOX PRO Principalele obiective ale capitolului sunt: Utilizarea func iilor de calcul în Visual Fox Pro Visual Fox Pro permite utilizarea unor instruc iuni specifice.

se utilizează în cadrul unor instruc iuni cum ar fi CALCULATE sau SELECT. rata dobânzii. perioada) – determină rata periodică – de regulă lunară – care trebuie . SUM( ) având efecte similare cu instruc iunile men ionate mai sus. domeniul înregistrărilor reprezintă de obicei o condi ie de filtrare a valorilor care intră în sumă. COUNT( ). Func iile financiare cel mai des utilizate sunt: • PAYMENT (valoare împrumut. Unde: denumire câmp reprezintă câmpul pe baza valorilor căruia se va realiza suma. <denumire variabilă> Exemple de instruc iuni pentru calcule statistice Principalele func ii statistice: AVG( ). denumire variabilă reprezintă o variabilă nouă în care va fi depozitat rezultatul însumării valorilor.Limbaje de programare şi baze de date 79 sum <denumire câmp> <domeniul înregistrărilor> to <denumire variabilă> Instruc iunea furnizează suma (pe coloană) valorilor din câmpul specificat. Pentru afişarea rezultatelor acestor opera ii se srie în fereastra de comenzi: ?[mesaj].

la o anumită valoare a ratei dobânzii. <denumire variabilă>=<denumire func ie financiară>(parametri corespunzători) Denumirile câmpurilor afişate prin comanda browse.2 . strâns legate de parametrii func iei.. • FV (rata lunară. un împrumut într-o perioadă de timp dată. • PV (rata lunară.. se utilizează pentru a oferi o imagine completă asupra situa iei analizate.. număr de perioade) – determină valoarea prezentă a unei investi ii realizate în viitor. caz în care numărul de perioade reprezintă numărul de luni. pentru un număr cunoscut de perioade egale de timp. Utilizare func ii statistice şi APLICA IA 13 Să se construiască un nou proiect. la o rată a dobânzii constantă. în condi iile achitării unor plă i periodice constante.. Observa ie: rata dobânzii se raportează la 12 în toate cele trei cazuri. Să se construiască o tabelă având următoarea structură: Cod_firma C 4 Credit N 20 Rata N 20 Rata_dob_c N 6 . pe o anumită perioadă. rata dobânzii.80 Suport pentru laborator achitată pentru a stinge o datorie. Aceste func ii se utilizează în cadrul unor comenzi de tip browse. <denumire câmp2>. la o anumită rată a dobânzii. alternativ existând posibilitatea afişării doar a rezultatului obn inut prin utilizarea func iei financiare. În fereastra de comenzi se va scrie: browse fields <denumire câmp1>. Studiu individual Aplica ie 13: financiare. rata dobânzii. număr de perioade) – determină valoarea actualizată a unei investi ii cu plă i periodice egale.

1 0. în conturi de depozit. care trebuie plătită pentru creditul contractat.23 0.23 0. de către fiecare societate comercială.Limbaje de programare şi baze de date Rata_dob_d N Perioada N şi cu următorul con inut : Cod_firma AMP COR DAV ERG HTR COM SEP MAN RAR Credit 10000 15000 12000 45000 21500 50000 35000 15500 75000 Rata 100 145 250 500 350 220 750 600 840 Rata_dob_c 0.11 0. b) Valorile înscrise în câmpul rata. reprezintă sume lunare egale care vor fi depuse de fiecare firmă.22 0.2 3 81 Perioada 15 20 36 48 18 15 24 12 72 a) Să se determine rata periodică.12 6 . lunară.13 0. Care este valoarea viitoare a sumei ob inute in cursul ultimei luni în care firmele vor depune bani în cont? (Utiliza i func ia FV) c) Câte firme au contactat credite cu o valoare peste 25000 lei? d) Care este suma totală a creditelor acordate de bănci tuturor firmelor? e) Care este media sumelor depuse lunar de firmele al căror cod începe cu litera “C”? .1 0.2 Rata_dob_d 0.21 0.12 0.1 0.21 0.14 0. la începutul fiecărei luni.2 0.11 0.21 0. utilizând func ia PAYMENT.23 0.

Petrion . Infomega. Visual FoxPro. 2001. Grupul BDASEIG. Georgeta Bădescu .82 Suport pentru laborator Bibliografie: 1. 2002 5. Marin Fotache. Manole Velicanu. Editura All. SQL . Mihaela Muntean. 2001. Cristina Ioni ă. Bucureşti 3.Visual FoxPro 8. Baze de date. Bucureşti 2.Sisteme de Gestiune a Bazelor de Date. Fundamente teoretice şi practice. Oracle. Constan a Bodea. Editura Polirom.Dialecte DB2. Dezvoltarea aplica iilor cu baze de date în Visual FoxPro.0 4. Manualul de utilizare . Ion Lungu.

Limbaje de programare şi baze de date 83 Anexa 1 Tabele utilizate unde: nr . data_fact .cod departament unde: cod_dep . cod_dep . sal_brut . den-denumire unde: nr_factură-număr factură.număr.salariu brut.cod departament.data facturii .

84 Suport pentru laborator unde: cod_furn . cod_furn .codul mijlocului fix.nume furnizor unde: cod_mf . nume_furn .codul furnizorului . per_amort .perioada de amortizare.cod furnizor.

Sign up to vote on this title
UsefulNot useful