Documente Academic
Documente Profesional
Documente Cultură
Curs Baze de Date - WWW Cartipdf TK PDF
Curs Baze de Date - WWW Cartipdf TK PDF
Disciplin obligatorie; Anul III, Sem. 5, ore sptmnal, nvmnt de zi: 2 curs, 2 laborator, total ore semestru 56; 6 credite; examen. I. CONINUTUL TEMATIC AL DISCIPLINEI Notiuni introductive n domeniul bazelor de date (entitate, relatie, atribut, limbaje pentru baze de date, componenete i arhitectura unui sistem de gestiune a bazelor de date (SGBD), evoluia SGBD-urilor) Proiectarea bazelor de date simple Proiectarea bazelor de date relaionale (modelarea Entitate-Relaie, diagrama E/R, modelul relational, regulile lui Codd, caracteristicile modelului relational, normalizare, forme normale, dependene funcionale) Proiectarea bazelor de date relaionale orientate obiect (modelarea orientata pe obiect cu UML, proiectarea diagramelor de clas i de obiecte cu programul Visio) Proiectarea bazelor de date relaionale cu programul ACCESS (tabele, formulare, interogri, rapoarte, comenzi macro, securitate) Limbaje de manipulare a datelor relaionale Concepte de baza ale limbajului SQL Limbajul SQL ACCESS - SQL
dar n Microsoft Access toate obiectele bazei de date, mpreun cu datele care aparin unei baze de date sunt stocate ntr-un singur fiier fizic.(Un fiier este o colecie de nregistrri nrudite stocate ca o singur untiate de sistemul de operare al calculatorului.) Totui, unul dintre principalele avantaje ale bazelor de date relaionale este faptul c detaliile de implementare fizic sunt separate de definiiile logice ale obiectelor bazei de date, astfel nct majoritatea utilizatorilor bazei de date nu au nevoie s tie unde (i cum) sunt stocate obiectele bazei de date n sistemul de fiiere al calculatorului. De fapt , pe msur ce vei nva limbajul SQL , vei vedea c nu este nevoie s specificai numele unui fiier fizic ntr-o instruciune SQL dect atunci cnd definii sau modificai chiar obiectele bazei de date.
posibilitatea de a folosi tabelele independent sau n combinaii, fr nici o ierarhie sau secvena predefinita n care trebuie s se fac accesul la date. Un model este o reprezentare a obiectelor i evenimentelor lumii reale i a asocierilor dintre ele. De fapt, el reprezint o abstracie asupra aspectelor semnificative ale unei ntreprinderi, ale unui sistem real, ignornd proprietile accidentale. Modelul este cel pe care utilizatorii trebuie s-l cunoasc; implementarea unui model este cea pe care utilizatorii nu este necesar s o cunoasc. Diferena dintre model i implementare este, de fapt, un caz special i important al deosebirii uzuale dintre logic i fizic. Modelele se impun prin sintaxa i prin semantica lor i, din acest punct de vedere, exist trei tipuri fundamentale de modele: modele care descriu aspectele statice ale procesului modelat; modele care descriu aspectele dinamice ale procesului modelat; modele care descriu aspectele funcionale ale procesului modelat. Un model de date reprezint o colecie integrat de concepte necesare descrierii: datelor, relaiilor dintre ele, constrngerilor existente asupra datelor sistemului real analizat. Modelarea unei baze de date permite trecerea de la percepia unor fapte din lumea real la reprezentarea lor prin date. Modelul de date trebuie s reflecte fidel fenomene ale lumii reale, s urmreasc evoluia acestei lumi i comunicarea dintre fenomenele lumii reale. Modelul trebuie s asigure conceptele de baz care permit proiectantului bazei de date i utilizatorilor s comunice, fr ambiguiti, cunotinele lor privind funcionarea i organizarea modelului real analizat. Prin urmare, un model de date trebuie s reprezinte datele i s le fac nelese. n esen, modelul de date are trei componente: mulime de reguli conform crora sunt construite bazele de date (partea structural); mulime de operaii permise asupra datelor, care sunt utilizate pentru reactualizarea sau regsirea datelor (partea de prelucrare); mulime de reguli de integritate, care asigur coerena datelor. Abordarea general a problemei modelrii semantice a datelor se face n patru etape. Se identific o mulime de concepte semantice care sunt utile n descrierea lumii reale. Se presupune c lumea real (modelul real analizat) este format din entiti care au anumite proprieti, c fiecare entitate are o identitate, c exist legturi, corelaii ntre entiti. Conceptul de corelaie, ca i cel de entitate, este util, n mod intuitiv, la descrierea modelului. Se caut o mulime de obiecte formale, simbolice care sunt utilizate pentru reprezentarea conceptelor semantice anterioare. Se dau reguli de integritate formale i generale (constrngeri) care s reflecte restriciile la care este supus modelul. Se definete o mulime de operatori formali prin care pot fi prelucrate i analizate obiectele formale.
Modelul entitate-relaie
Una dintre cele mai cunoscute abordri ale modelrii semantice (cu siguran una dintre cele mai utilizate) este cea bazat pe modelul entitate-relaie (E/R). Acesta a fost introdus de ctre P.P. Chen n 1976 i rafinat de atunci n diverse moduri de ctre acesta i de muli ali cercettori, ca un model de date conceptual, pentru a uura proiectarea bazelor de date. Pentru reprezentarea grafic a modelului sunt utilizate diagramele E/R, care sunt modele neformalizate pentru reprezentarea unui model, unui sistem din lumea real. Diagramele E/R constituie o tehnic de reprezentare a structurii logice a bazei de date, ntr-o manier grafic. Aceste diagrame ofer un mijloc simplu i inteligibil de comunicare a caracteristicilor importante ale designului unei anumite baze de date. Diagrama E/R este un model de date conceptual de nivel nalt, independent de platforma hardware utilizat i de tipul SGBD-ului. Modelul este constituit din concepte care descriu structura bazei de date i tranzaciile de regsire sau reactualzare asociate. Popularitatea modelului E/R ca modalitate de abordare a proiectrii bazelor de date poate fi atribuit n principal tehnicii de realizare a diagramelor E/R. Aceast tehnic, ca i modelul E/R nsui, a evoluat de-a lungul timpului datorit noilor problematici care au aprut n proiectarea bazelor de date. Baza de date poate fi definit ca o mulime de date ce modeleaz un sistem real. Acest sistem este format din obiecte legate ntre ele. Modelul E/R mparte elementele unui sistem real n dou categorii: entiti i relaii (legturi, asocieri) ntre aceste entiti. Entitiile i legturile au anumite caracteristici, numite atribute. Nu trebuie confundat conceptul de relaie, n sensul de asociere, care intervine n definirea diagramei E/R cu conceptul de relaie care este specific modelului relaional.
Entitate
Entitatea este un obiect sau un concept, care este semnificativ pentru modelul real analizat. O entitate poate fi dependent (slab), existena sa depinznd de alt entitate sau independent (tare), caz n care ea nu depinde de existena altei entiti. Entitatea poate fi persoan, loc, concept, activitate etc. Prin urmare, ea poate fi un obiect cu existen fizic, real sau poate fi un obiect cu existen conceptual, abstract. Cheia primar este un identificator unic n cadrul entitii, fcnd distincie ntre valori diferite ale acesteia.
Cheia primar:
trebuie s fie unic i cunoscut la orice moment; trebuie s fie controlat de administratorul bazei; trebuie s nu conin informaii descriptive, s fie simpl, fr ambiguiti; s fie stabil; s fie familiar utilizatorului.
Observaii Entitile devin tabele n modelele relaionale. n general, entitile se scriu cu litere mari.
Entitile sunt substantive, dar nu orice substantiv este o entitate. Trebuie ignorate substantivele nerelevante. Pentru fiecare entitate este obligatoriu s se dea o descriere detaliat. Nu pot exista, n aceeai diagram, dou entiti cu acelai nume, sau o aceeai entitate cu nume diferite.
DEPARTAMENT
SARCINA
lucreaza_in
conduce apartine_la
SALARIAT
atasat_la
PROIECT
Relaie
Relaia (asocierea) este o comunicare ntre dou sau mai multe entiti. O valoare a unei relaii este o comunicare ntre valorile entitilor pe care le leag. Relaia exprim un raport care exist ntre aceste entiti. Gradul unei relaii este dat de numrul de entiti participante ntr-o relaie (de exemplu, relaie binar, ternar, cvadrupl, n-ar). Existena unei relaii este subordonat existenei entitilor pe care le leag. ntre dou entiti pot exista mai multe relaii. O relaie n care aceeai entitate particip mai mult dect o dat n diferite roluri definete o relaie recursiv. Uneori, aceste relaii sunt numite unare. Observaii: n modelul relaional, relaiile devin tabele speciale sau coloane speciale care refer chei primare. Relaiile sunt verbe, dar nu orice verb este o relaie. Pentru fiecare relaie este important s se dea o descriere detaliat. n aceeai diagram pot exista relaii diferite cu acelai nume. n acest caz, ele sunt difereniate de ctre entitile care sunt asociate prin relaia respectiv. Pentru fiecare relaie trebuie stabilit cardinalitatea (maxim i minim) relaiei, adic numrul de tupluri ce aparin relaiei. poate (cardinalitate maxim) trebuie (cardinalitate minima)
EXEMPLE: Ci salariai pot lucra ntr-un departament? Muli! n cte departamente poate lucra un salariat? In cel mult unul!
Relaia SALARIAT_lucreaza_in_DEPARTAMENT are cardinalitatea maxim many-one (n:1). Exemplu: Ci salariai trebuie s conduc un departament? Cel puin unul! Cte departamente trebuie s conduc un salariat? Zero! Relaia SALARIAT_conduce_DEPARTAMENT are cardinalitatea minim one-zero (1:0). Asupra entitilor participante ntr-o relaie pot fi impuse constrngeri care trebuie s reflecte restriciile care exist n lumea real asupra relaiilor. O clas de constrngeri, numite constrngeri de cardinalitate, este definit de numrul de nregistrri posibile pentru fiecare entitate participant (raport de cardinalitate). Cel mai ntlnit tip de relaii este cel binar, iar n acest caz rapoartele de cardinalitate sunt, n general, one-to-one (1:1), one-to-many (1:n) sau many-to-many (m:n).
Atribut
Atributul este o proprietate descriptiv a unei entiti sau a unei relaii. De exemplu, numele , genul unei film, sunt atribute al entitii FILM. Atributele pot fi simple (pretul de nchiriere a unui film), compuse (de exemplu, numele filmului), cu valori multiple (de exemplu, limbile n care e tradus un film), derivate (de exemplu, vrsta unei persoane se obine din data naterii). Observaii Trebuie fcut distincia ntre atribut care uzual devine coloan n modelele relaionale i valoarea acestuia, care devine valoare n coloane. Atributele sunt substantive, dar nu orice substantiv este atribut. Fiecrui atribut trebuie s i se dea o descriere complet n specificaiile modelului (exemple, contraexemple, caracteristici). Pentru fiecare atribut trebuie specificat numele, tipul fizic (integer, float, char etc.), valori posibile, valori implicite, reguli de validare, constrngeri, tipuri compuse.
atasat_la
M(0) M(0)
data_initiala functia
1
1 M(0)
1(0)
11
M
SARCINA nr_proiect nr_sarcina data_inceperii stare
Diagrama Entitate/relaie Cazuri speciale de entiti, relaii, atribute i modul lor de reprezentare n cadrul diagramei entitate-relaie.
1. Entitate dependent nu poate exista n mod independent (SARCINA
depinde de PROIECT). Cheia primar a unei entiti dependente include cheia primar a sursei (nr_proiect) i cel puin o descriere a entitii (nr_sarcina). Entitatea dependent se deseneaz prin dreptunghiuri cu linii mai subiri.
2. Motenirea atributelor. Subentitate (subclas) submulime a unei alte
entiti, numit superentitate (superclas) (SALARIAT < > PROGRAMATOR). Subentitatea se deseneaz prin dreptunghiuri incluse n superentitate. Exist o relaie ntre o subentitate i o superentitate, numit ISA, care are cardinalitatea maxim 1:1 i minim 1:0. Cheile primare, atributele i relaiile unei superentiti sunt valabile pentru orice subentitate. Afirmaia reciproc este fals. 3. ntr-o diagram E/R se pot defini relaii recursive.
4. Relaie sau atribut? Dac un atribut al unei entiti reprezint cheia primar a
primare a dou entiti, atunci este vorba de o relaie. (cheia primar a relaiei
asociat_la combin cod_salariat cu nr_proiect, prin SALARIAT_asociat la_PROIECT va defini o relaie i nu o entitate).
urmare,
Probleme
1.S se creeze modelul E/R pentru gestiunea activitilor de mprumut dintr-o bibliotec S-a presupus (restrictiv) c ntr-o zi un cititor nu poate mprumuta, de mai multe ori, aceeai carte. Entitile i relaiile care intervin n acest model sunt urmtoarele: 1. CARTE (entitate independent) orice carte care se gsete n inventarul bibliotecii. Cheia primar este atributul codel. 2. CITITOR (entitate independent) orice cititor care poate mprumuta cri. Cheia primar este atributul codec. 3. DOMENIU (entitate independenta) domeniul cruia i aparine o carte. Cheia primar este atributul coded. 4. IMPRUMUTA relaie avnd cardinalitatea m:m care leag entitile CITITOR i CARTE. 5. APARTINE relaie care leag atributele CARTE i DOMENIU. Relaia are cardinalitatea maxim m:1, iar cardinalitatea minim 1:1.
CITITOR CARTE
M(1)
M(0) imprumuta
1 apartine
DOMENIU
coded# intdom
2.Evidena colilor de oferi din Romania. Completai relaiile (lucreaza_la, conduce, sustine, asista, instruieste) dintre entiti i specificai cardinalitatea!
SCOALA cod_scoala#
CLIENT cod_client#
INSTRUCTOR cod_instructor#
EXAMEN cod_examen#
MASINA cod_masina#
EXAMINATOR cod_examinator#
Modelul relaional
Modelul relaional a fost conceput i dezvoltat de E.F. Codd. El este un model formal de organizare conceptual a datelor, destinat reprezentrii legturilor dintre
date, bazat pe teoria matematic a relaiilor. Modelul relaional este alctuit numai din relaii i prin urmare, orice interogare asupra bazei de date este tot o relaie. Cercetarea n domeniu 3 mari proiecte (System R, INGRES, PRTV) Caliti: este simplu; riguros din punct de vedere matematic; nu este orientat spre sistemul de calcul.
Modaliti pentru definirea unui SGBD relaional: prezentarea datelor n tabele supuse anumitor operaii de tip proiecie, selecie, reuniune, compunere, intersecie etc. un sistem de baze de date ce suport un limbaj de tip SQL Structured Query Language; un sistem de baze de date care respect principiile modelului relaional introdus de E.F. Codd. structura relaional a datelor; operatorii modelului relaional; regulile de integritate care guverneaz folosirea cheilor n model.
Aceste trei elemente corespund celor trei componente ale ingineriei software: informaie, proces, integritate. Structura datelor Definirea noiunilor de domeniu, relaie, schem relaional, valoare null i tabel vizualizare (view). Conceptele utilizate pentru a descrie formal, uzual sau fizic elementele de baz ale organizrii datelor sunt date n urmtorul tabel: Formal relaie tuplu atribut domeniu Uzual tablou linie coloan tip de dat Fizic fiier nregistrare cmp tip de dat
Reguli de integritate sunt aseriuni pe care datele coninute n baza de date trebuie s le satisfac. Exist trei tipuri de constrngeri structurale (de cheie, de referin, de entitate) ce constituie mulimea minimal de reguli de integritate pe care trebuie s le respecte un SGBD relaional. Restriciile de integritate minimale sunt definite n raport cu noiunea de cheie a unei relaii. O mulime minimal de atribute ale cror valori identific unic un tuplu ntr-o relaie reprezint o cheie pentru relaia respectiv.
Fiecare relaie are cel puin o cheie. Una dintre cheile candidat va fi aleas pentru a identifica efectiv tupluri i ea va primi numele de cheie primar. Cheia primar nu poate fi reactualizat. Atributele care reprezint cheia primar sunt fie subliniate, fie urmate de semnul #. O cheie identific linii i este diferit de un index care localizeaz liniile. O cheie secundar este folosit ca index pentru a accesa tupluri. Un grup de atribute din cadrul unei relaii care conine o cheie a relaiei poart numele de supercheie. Fie schemele relaionale R1(P1, S1) i R2(S1, S2), unde P1 este cheie primar pentru R1, S1 este cheie secundar pentru R1, iar S1 este cheie primar pentru R2. n acest caz, vom spune c S1 este cheie extern (cheie strin) pentru R1. Modelul relaional respect trei reguli de integritate structural. Regula 1 unicitatea cheii. Cheia primar trebuie s fie unic i minimal. Regula 2 integritatea entitii. Atributele cheii primare trebuie s fie diferite de valoarea null. Regula 3 integritatea referirii. O cheie extern trebuie s fie ori null n ntregime, ori s corespund unei valori a cheii primare asociate. Transformarea entitilor Entitile independente devin tabele independente. Cheia primar nu conine chei externe. Entitile dependente devin tabele dependente. Cheia primar a entitilor dependente conine cheia primar a entitii de care depinde (cheie extern) plus unul sau mai multe atribute adiionale. Subentitile devin subtabele. Cheia extern se refer la supertabel, iar cheia primar este aceast cheie extern (cheia primar a subentitii PROGRAMATOR este cod_salariat care este o cheie extern). Transformarea relaiilor Relaiile 1:1 i 1:n devin chei externe. Relaia conduce devine coloan n tabelul DEPARTAMENT, iar relaia lucreaza_in devine coloan n tabelul SALARIAT. Simbolul indic plasamentul cheii externe, iar simbolul exprim faptul c aceast cheie extern este coninut n cheia primar. Relaia 1:1 plaseaz cheia extern n tabelul cu mai puine linii. Relaia m:n devine un tabel special, numit tabel asociativ, care are dou chei externe pentru cele dou tabele asociate. Cheia primar este compunerea acestor dou chei externe plus eventuale coloane adiionale. Tabelul se deseneaz punctat. Relaiile de tip trei devin tabele asociative. Cheia primar este compunerea a trei chei externe plus eventuale coloane adiionale.
Atributele multiple devin tabele dependendente ce conin cheia primar a entitii i atributul multiplu. Cheia primar este o cheie extern, plus una sau mai multe coloane adiionale. Entitile devin tabele, iar atributele lor devin coloane n aceste tabele. Ce devin atributele relaiilor? Pentru relaii 1:1 i 1:n, atributele relaiilor vor aparine tabelului care conine cheia extern, iar pentru relaii m:n i de tipul trei, atributele vor fi plasate n tabelele asociative.
apartine_la
conduce
lucreaza_in
casatorit
Schemele relaionale corespunztoare acestei diagrame conceptuale sunt urmtoarele: SALARIAT(cod_salariat#, forma_plata, nr_depart); nume, prenume, sex, job_cod, cod_sot,
DEPARTAMENT(cod_departament#, nume, numar_cladire, cod_sal); ATASAT_LA(cod_salariat#, nr_proiect#, functia); PROIECT(nr_proiect#, descriere, buget_alocat); SARCINA(nr_proiect#, nr_sarcina, data_inceperii, stare);
AGENT_TERITORIAL(cod_salariat#, zona, comision); PROGRAMATOR(cod_salariat#, limbaj, nivel); TELEFON(cod_salariat#, nr_telefon#). Regulile lui Codd
Caracteristici ale modelului relaional: nu exist tupluri identice; ordinea liniilor i a coloanelor este arbitrar; articolele unui domeniu sunt omogene; fiecare coloan definete un domeniu distinct i nu se poate repeta n cadrul aceleiai relaii; toate valorile unui domeniu corespunztoare tuturor cazurilor nu mai pot fi descompuse n alte valori (sunt atomice). Avantajele modelului relaional: fundamentare matematic riguroas; independen fizic a datelor; posibilitatea filtrrilor; existena unor structuri de date simple; realizarea unei redundane minime; suplee n comunicarea cu utilizatorul neinformatician. Ca limite ale modelului relaional putem meniona: rmne totui redundan, ocup spaiu, apar fenomene de inconsisten, nu exist mecanisme pentru tratarea optim a cererilor recursive, nu lucreaz cu obiecte complexe, nu exist mijloace perfecionate pentru exprimarea constrngerilor de integritate, nu realizeaz gestiunea totala a datelor distribuite, nu realizeaz gestiunea cunotinelor.
n anul 1985, E.F. Codd a publicat un set de 13 reguli n raport cu care un sistem de gestiune a bazelor de date poate fi apreciat ca relaional. Nici un sistem de gestiune a bazelor de date pus n vnzare pe piaa comercial nu respect absolut toate regulile definite de Codd, dar acest lucru nu mpiedic etichetarea acestor sisteme drept relaionale. Nu trebuie apreciat un SGBD ca fiind relaional sau nu, ci msura n care acesta este relaional, deci numrul regulilor lui Codd pe care le respect. Regula 1 regula gestionrii datelor. Un SGBD relaional trebuie s fie capabil s gestioneze o baz de date numai prin posibilitile sale relaionale.
Regula 2 regula reprezentrii informaiei. ntr-o baz de date relaional, informaia este reprezentat la nivel logic sub forma unor tabele ce poart numele de relaii. Regula 3 regula accesului garantat la date. Fiecare valoare dintr-o baz de date relaional trebuie s poat fi adresat n mod logic printr-o combinaie format din numele relaiei, valoarea cheii primare i numele atributului. Regula 4 regula reprezentrii informaiei necunoscute. Un sistem relaional trebuie s permit utilizatorului definirea unui tip de date numit null pentru reprezentarea unei informaii necunoscute la momentul respectiv. Regula 5 regula dicionarelor de date. Asupra descrierii bazelor de date (informaii relative la relaii, vizualizri, indeci etc.) trebuie s se poat aplica aceleai operaii ca i asupra datelor din baza de date. Regula 6 regula limbajului de interogare. Trebuie s existe cel puin un limbaj pentru prelucrarea bazei de date. Regula 7 regula de actualizare a vizualizrii. Un SGBD trebuie s poat determina dac o vizualizare poate fi actualizat i s stocheze rezultatul interogrii ntr-un dicionar de tipul unui catalog de sistem. Regula 8 regula limbajului de nivel nalt. Regulile de prelucrare asupra unei relaii luat ca ntreg sunt valabile att pentru operaiile de regsire a datelor, ct i asupra operaiilor de inserare, actualizare i tergere a datelor. Regula 9 regula independenei fizice a datelor: Programele de aplicaie i activitile utilizatorilor nu depind de modul de depunere a datelor sau de modul de acces la date. Regula 10 regula independenei logice a datelor. Programele de aplicaie trebuie s fie transparente la modificrile de orice tip efectuate asupra datelor. Regula 11 regula independenei datelor din punct de vedere al integritii. Regulile de integritate trebuie s fie definite ntr-un sublimbaj relaional, nu n programul de aplicaie. Regula 12 regula independenei datelor din punct de vedere al distribuirii. Distribuirea datelor pe mai multe calculatoare dintr-o reea de comunicaii de date, nu trebuie s afecteze programele de aplicaie. Regula 13 regula versiunii procedurale a unui SGBD. Orice component procedural a unui SGBD trebuie s respecte aceleai restricii de integritate ca i componenta relaional. Deoarece regulile lui Codd sunt prea severe pentru a fi respectate de un SGBD operaional, s-au formulat criterii minimale de definire a unui sistem de gestiune relaional. Un SGBD este minimal relaional dac: toate datele din cadrul bazei sunt reprezentate prin valori n tabele; nu exist pointeri observabili de ctre utilizator;
sistemul suport operatorii relaionali de proiecie, selecie i compunere natural, fr limitri impuse din considerente interne. Un SGBD este complet relaional dac este minimal relaional i satisface n plus condiiile:
sistemul suport restriciile de integritate de baz (unicitatea cheii primare, constrngerile refereniale, integritatea entitii). sistemul suport toate operaiile de baz ale algebrei relaionale.
Tabele
Unitatea primar de stocare a datelor ntr-o baz de date relaional este tabelul, care este o structur bidimensional compus din rnduri i coloane. Fiecare tabel reprezint o entitate, ceea ce nseamn o persoan, un loc sau un lucru care trebuie s fie reprezentat n baza de date, cum ar fi un client, un cont bancar sau o tranzacie bancar. Fiecare rnd al tabelului reprezint o apariie a entitii. Figura 1-1 reprezint listingul parial al unui tabel numit FILM(filme). Tabelul FILM este parte a unei baze de date pentru un magazin de produse video, folosit ca exemplu n toat aceast curs. Tabelul FILM conine date care descriu filmele disponibile n magazinul de produse video. Fiecare rnd din tabel reprezint un film, iar fiecare coloan reprezint o caracteristic a filmului respectiv, cum ar fi titlul filmului sau categoria MPAA(Motion Picture Associationof America care a fost fondat n 1972 n America ca asociaie a productorilor de film pe lng industria cinematografic)
FILM_I D FILM_C OD_GE N Drama ActAv Comedie ActAv ActAv ActAv MPA A_CO DRAT ING R R PG-13 PG-13 R PG-13 FILM_NUME PRET_INCHIR _VHS PRET_INCHIR _DVD AN_P RODU S 2003 2003 2003 2003 2003 2003
1 2 3 4 5 6
7 8 9
PG-13 R PG-13
10 11 12 13 14 15 16 17 18
Mystic River The Last Samurai Something`s Gotta Give The Italian Job Kill Bill: Vol 1 Pirates of the Caraibbean: The Curse of the Black Pearl Big Fish Man on Fire Master and Commander: The Far Side of the World Lost in translation Two Weeks Notice 50 First Dates Matchstick Men Could Mountain Road to Perdition The School of Rock 13 Going on 30 Monster
19 20
ActAv Strain
PG-13 R
After
12.98 17.99
29.98 19.94
2004 1981
Figura 1-1 Listingul tabelului FILM Se poate observa asemnarea dintre tabelele bazelor de date relaionale i foile de calcul tabelar. Totui, bazele de date relaionale ofer o flexibilitate mult mai mare n organizarea i afiarea informaiilor.
Relaii
Relaiile reprezint asocierile dintre tabelele bazelor de date relaionale. Dei fiecare tabel relaional poate exista independent, esena bazelor de date este tocmai stocarea informaiilor ntre care exist legturi. De exemplu, pe lng filmele propriuzise, putei stoca informaii despre categoriile folosite de magazin pentru organizarea inventarelor de filme. n acelai timp, putei stoca i informaii despre copiile fiecrui film, inclusiv data la care a fost primit copia i formatul acesteia, cum ar fi DVD sau VHS. Prin folosirea realaiilor, putei asocia tabelele nrudite, ntr-un mod formal, uor de folosit astfel nct putei s combinai date din tabele multiple n aceeai interogare a bazei de date, dar pstrnd flexibilitatea de a include numai informaiile care v intereseaz.Posibilitatea de a selecta din baza de date numai informaiile care v intereseaz v permite s ajustai informaiile din baz de date n funcie de cerinele specifice ale persoanelor sau aplicaiilor care au acces la baza de date. Figura 1-2 prezinta patru tabele din baza de date a magazinului de produse video si relaiile dintre acestea, ntr-un format cunoscut sub numele de diagrama de relatii a entitatilor (ERD Entity Relationship Diagram). Fiecare dreptunghi din diagrama reprezint un tabel relaional, cu numele tabelului scris deasupra liniei orizontale si coloanele tabelului enumerate pe verticala , in portiunea principala a dreptunghiului. Relaiile sunt implementate folosind coloane corespondente din cele dou tabele participante. n diagrama ERD coloana sau coloanele subliniate din fiecare tabel. UN tabel poate avea o singur cheie primar. Totui , o cheie primar poate fi compus din mai multe coloane, dac aceasta este calea de formare a unei chei unice. Dac o cheie primar este folosit ntr-un alt tabel pentru stabilirea unei relaii, poart numele de chieie extern. n figur 1-2, observai coloanele cheie extern folosite n tabelul FILM pentru crearea relaiilor cu tabelele FILM_GENRE i MPAA_RATING i marcate cu identificatoarele <fk1> i <fk2> n dreapta numelui coloanei cheie extern. i coloana COD_LIMBA este marcat drept cheie extern , dar tabelul LANGUAGE i relaia acestuia cu tabelul FILM au fost omise din figura de mai sus. Cheile primare i cheile externe sunt blocuri de construcie fundamentale ale modelului relaional, deoarece stabilesc relaii i permit crearea legturilor ntre date, atunci cnd este necesar. Trebuie s nelegei acest concept pentru a putea nelege cum funcioneaz bazele de date relaionale.
FILM
FILM_ID <pk> MPAA_RATING MPAA_COD_RATING <pk>
MPAA_DESCRIERE_RATING
Figura 1-2
Restricii
O restricie este o regul specificat pentru un obiect al bazei de date (de obicei un table sau o coloan), avnd rolul de a limita ntr-un mod oarecare domeniul de valori permise pentru obiectul respectiv al bazei de date.Dup ce sunt specificate, restriciile sunt impuse automat de sistemul DBMS i nu pot fi ocolite dect dac o persoan autorizata le dezactiveaz sau le terge(le elimin).Fiecare restricie primete un nume unic, astfel nct s poat fi referit n mesajele de eroare i n comenzile folosite ulterior n baz de date.Este recomandabil ca proiectanii bazei de date s denumeasc restriciile, deoarece numele generate automat de baz de date nu sunt foare descriptive. Totui , nu am denumit restriciile din baza de date folosit ca exemplu n aceast carte, deoarece, din pcate, nu toate produsele RDBMS disponibile n prezent accept restriciile denumite. Exist mai multe tipuri de restricii pentru baze de date: Restricia NOT NULL Poate fi plasat pe o coloan pentru a mpiedica folosirea valorilor nule.O valoare nul (null) este o modalitate special prin care sistemul RDBMS trateaz valoarea unei coloane pentru a indica faptul c valoarea coloanei respective nu este cunoscut. O valoare nul nu este acelai lucru un un spaiu liber, un ir vid sau valoarea zero i este o valoare special care nu este egal cu nimic altceva. Restricia cheie primar (primary key) Definit pe coloana (coloanele) cheie primar ale unui tabel pentru a garanta c valorile cheie primar sunt ntotdeauna unice n ntreg tabelul.Atunci cnd cheia primar este definit pe mai multe coloane, combinaia valorilor acelor coloane trebuie s fie unic n tabel - o coloan care reprezint doar o parte a valorii cheii primare poate conine valori duplicate n tabel. Restriciile cheie primar sunt aproape inttotdeauna implementate de RDBMS prin folosirea unui index.Indexul este un tip special de obiect al unei baze dedate care permite efectuarea cutrilor rapide n valorile coloanei.Atunci cnd n tabele sunt nserate rnduri noi, sistemul RDBMS verific automat indexul pentru a se asigura c cheia primar a noului rnd nu este deja folosit n tabel i , dac se ntmpl acest lucru , respinge cererea de inserare. Cutarea n indexuri se face mult mai repede dect cutarea n tabel;ca urmare, indexarea cheii primare este esenial
pentru orice tabel, indiferent de dimensiunea acestuia, astfel nct cutarea cheilor duplicate la fiecare inserare s nu duc la o reducere semnificativ a performanelor. O caracteristic suplimentar a cheilor primare este faptul c nu pot fi definite dect pe coloane pentru care a fost definit i restricia NOT NULL. Restricia de unicitate (unique) Definit pe o coloan sau un set de coloane care trebuie s conin valori unice ale tabelului. Ca i n cazul cheilor primare, sistemul RDBMS folosete aproape ntotdeauna un index ca modalitate de impunere eficient a restriciei.Totui, spre deosebire de cheile primare, un tabel poate avea definite mai multe restricii de unicitate, iar coloanele care particip la o restricie de unicitate pot conine ( n cele mai multe sisteme RDBMS ) i valori nule. Restricia referenial (numit uneori restricie de integritate referenial) O restricie care impune o relaie ntre dou tabele dintr-o baz de date relaional. Prin impunere se nelege c sistemul RDBMS se asigur ntotdeauna, n mod automat, c fiecrei valori a cheii externe i corespunde o valoarea a cheii primare n tabelul printe.n tabelul FILM, sistemul RDBMS nu-mi permite s inserez o nregistrare cu valoarea M n coloana MPAA_COD_RATING, deoarece M nu este o valoarea MPAA_COD_RATING valid i , ca urmare, nu apare ca valoare a cheii primare din tabelul MPAA_RATING. n sens invers, sistemul RDBMS nu-mi permite s terg din tabelul MPAA_RATING rndul cu cheia primar PG-13 , deoarece valoarea respectiv este folosit ca valoare a cheii externe pentru cel puin una din nregistrrile din tabelul FILM. Pe scurt , restricia referenial garanteaz c relaia dintre cele dou tabele i valorile corespondente ale cheii primare i cheii externe i pstreaz logica n orice moment. Restricia CHECK Folosete o instruciune logic simpl (scris n SQL) pentru a valida valoarea unei coloane.Rezultatul instruciunii trebuie s fie o valoare logic de adevrat (true) sau fals (false), astfel nct un rezultat adevrat s permit nserarea n tabel a valorii coloanei, iar un rezultat fals s duc la rejectarea valorii coloanei , cu mesajul de eroare corespunztor.
Index
Un index reprezint o cale rapid de localizare i sortare a Inregistrarilor dintro tabel prin gruparea tuturor nregistrrilor pentru un anumit atribur sau grup de atribute. Indexarea este utilizat n dou scopuri principale: accelerarea cutrilor n baya de date asigurarea unicitii nregistrrilor De exemplu, dac ne intereay anumite nume dintr-o tabel Studeni, putem crea un index pentru coloana NumeSt, pentru a regsi mai repede studenii cu un anmit nume de familie..
Putem indexa i mai multe coloane, de exemplu creem un index cu numele NUME , pentru coloanele NumeSt i PrenumeSt. Dei accelereaz procesul de regsire a datelor , indecii ngreuneaz actualizarea lor.Dupa fiecare operaie de actualiyare)inserare, modificare, tergere, trebuie verificai i actualiyai indecii.Folosirea lor trebuie bine ntemeiat altfel mresc timpul de rspuns al sistemuluii ocup spaiul suplimentar pe disc . In Partea a-II-aAccess , se prezint modul de creare a indecilor i n Partea III, la DDL, create index. Observaie: Cheia primar a unei tabele este indexaa automat. Nu pot fi indexate coloane de tipul :Memo, Hyperlinksau OLE Cnd o coloan face parte din cheia primar a unei tabele, proprietatea Indexed are valoarea Yes(No Duplicates), i proprietatea Required primete valoarea Yes, deoarece cheia primar nu poate conine valoarea null.
Vizualizri
O vizualizare (view) este o interogare stocat n baza de date i pune la dispoziia utilizatorului un subset personalizat al datelor din unul sau mai multe tabele ale bazei de date. Cu alte cuvinte, o vizualizare este un tabel virtual, deoarece arat ca un tabel i n cele mai multe privine se comport c un tabel, dar nu stocheaz date ( nu este stocat dect interogarea SQL care definete vizualizarea). Vizualizrile au mai multe funcii utile: Mascheaz radurile pe care utilizatorul nu este nevoie s le vad (sau nu-i este permis s le vad). Mascheaz coloanele pe care utilizatorul nu are nevoie s le vad (sau nu-i este permis s le vad). Mascheaz operaiile complexe efectuate n baza de date, cum ar fi uniunile de tabele (respectiv combinarea coloanelor din tabele multiple ntr-o singur interogare a bazei de date). mbuntete performanele interogrilor (n unele sisteme RDBMS, precum Microsoft SQL Server).
Necesitatea normalizrii
Normalizarea este procesul reversibil de transformare a unei relaii, n relaii de structur mai simpl. Procesul este reversibil n sensul c nici o informaie nu este pierdut n timpul transformrii. O relaie este ntr-o form normal particular dac ea satisface o mulime specificat de constrngeri. Procesul normalizrii se realizeaz plecnd de la o relaie universal ce conine toate atributele sistemului de modelat, plus o mulime de anomalii. Orice form normal se obine aplicnd o schem de descompunere. Exist dou tipuri de descompuneri. Descompuneri ce conserv dependenele. Aceast descompunere presupune desfacerea relaiei R n proieciile R1, R2, ..., Rk, astfel nct dependenele lui R sunt echivalente (au nchideri pseudo-tranzitive identice) cu reuniunea dependenelor lui R1, R2, ..., Rk. Descompuneri fr pierderi de informaie. Aceast descompunere presupune desfacerea relaiei R ntr-o mulime de proiecii R1, R2, ..., Rj, astfel nct pentru orice realizare a lui R este adevrat relaia: O descompunere fr pierdere de informaie, utilizat n procesul normalizrii, este dat de regula Casey-Delobel: Fie R(A) o schem relaional i fie , , o partiie a lui A. Presupunem c determin funcional pe . Atunci: mulimea atributelor care intervin n dependenele funcionale; reprezint reuniunea determinantului cu restul atributelor lui A.
Tabelul de mai jos prezint tabelul FILM fr normalizare, aa cum ar arta dac toate informaiile despre filme ar fi colectate ntr-un singur tabel.Acest exemplu va fi folosit pentru ilustrarea procesului de normalizare. n general, numele coloanelor din tabelele relaionale folosesc liniue de subliniere pentru separarea cuvintelor. n discuia despre normalizare am eliminat aceste liniue din figuri, pentru a face textul mai uor de citit.
Anomaliile care apar n lucrul cu baza de date se produc datorit dependenelor care exist ntre datele din cadrul relaiilor bazei de date. Dependenele sunt plasate greit n tabele! Exist trei probleme care pot aprea n tabelele fr normalizare i toate trei exist n tabelul de mai jos. Scopul procesului de normalizare este de a elimina aceste probleme (anomalii) din proiectul bazei de date.
FILM _ID G E N_ C O D Dr am a GE N_ DE SC RIE RE Dra ma LAN G_ COD E MPAA _COD _RATI NG MPAA_RATIN G_DESC FILM_NUM E AN _P RO DU S 200 3 DATA_CUM PARARE DAT A_VA NZA RE MEDIA _FORM AT PRETINCHI RIERE
en, fr
Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Parintii avertizati Parintii avertizati Parintii avertizati sunt
Mystic River
01/01/2005
DVD
19.96
Ac lA d
Ac tA v
Co me die Co me die Ac tA v
Act Av si ave ntur a Acti une si ave ntur a Co med ie Co med ie Acti une si ave ntur a
en, fr, es
200 3
01/10/2005
DVD
19.96
en, fr, es
200 3
01/10/2005
VHS
15.95
en
PG-13
01/10/2005
1/30/2 005
DVD
29.99
en
PG-13
sunt
2/15/2005
DVD
29.99
en, fr
PG-13
sunt
2/15/2005
DVD
19.99
Anomalia de inserare
Anomalia de inserare se refer la o situaie n care nu putei insera date n baza de date din cauza unei dependene artificiale dintre coloanele unui tabel. S presupunem c vreti s adugai n baza de date a magazinului un nou gen de film care urmeaz a fi folosit pentru clasificarea filmelor.Tabelul de mai sus nu permite acest lucru dect dac avei un film care s fie plasat n categoria respectivasi pe care va trebui s-l adugai n tabelul FILM n acelai timp.Ar fi mult mai bine dac ai putea adauga noile genuri nainte de primirea filmelor n magazin.
Anomalia de tergere
Anomalia de tergere este inversul anomaliei de inserare. Se refer la situaia n care tergerea unor date duce la pierderea neintenionat a altor date. De exemplu dac primul film din tabel este singurul rnd din tabelul FILM pentru care coloana GEN_COD are valoarea Drama , i este ters, se pierde informaia c a existat vreodat un gen numit Drama
Anomalia de actualizare
Anomalia de actualizare se refer la o situaie n care actualizarea unei singure valori necesit actualizarea mai multor rnduri. De exemplu , dac n tabelul prezentat mai sus trebuie s modificai descrierea codului MPAA_COD_RATING R, trebuie s modificai i toate rndurile din tabel pentru filmele cu codul respectiv. Probleme similare apar i pentru coloana GEN_DESCRIERERIPTION. Chiar i coloana PRET_INCHIR are aceast problem, deoarece toate copiile aceluiai film (cu aceeai valoare FILM_ID ) pe acelai mediu (DVD sau VHS) ar trebui s aib acelai pre. Un alt pericol legat de aceast anomalie este faptul c stocarea unor date redundante poate aduce la posibilitatea de actualiza numai o parte a copiilor respectivelor date, ceea ce ar avea ca rezultat apariia inconsecvenelor n baza de date.
consumator de timp. Trebuie s fii foarte atent ca exemplele de date folosite pentru luarea deciziilor n procesul de normalizare s fie cu adevrat reprezentative pentru tipurile de valori care vor aprea n datele reale. Aa cum probabil v ateptai, exemple prost alese duc deseori la proiectarea eronat a bazei de date. Scopul procesului de normalizare este eliminarea anomaliilor de inserare, actualizare si tergere. Procesul determin crearea unui numr mai mare de relaii dect ai avea ntr-un model fr normalizare. Relaiile suplimentare sunt necesare pentru eliminarea anomaliilor, dar mprirea datelor n mai multe relaii face ca extragerea datelor stocate s fie puin mai dificil.
O relaie este n prima form normal atunci cnd nu conine atribute cu valori multiple (atribute muli valoare), adic atribute care au mai multe valori pentru acelai rnd de date. ntr-o relaie, orice intersecie a unui rnd cu o coloan trebuie s conin cel mult o valoare pentru ca relaia s fie n prima form normal. n figura 1-4, atributul pentru limb (COD_LIMBA) conine mai multe valori pentru unele dintre filme, aa c-l putei considera un atribut cu valori multiple. Atributele de acest tip sunt mai greu de ntreinut, deoarece valorile din list trebuie s fie mai nti separate, astfel nct valorile individuale s poat fi modificate far a le afecta pe celelalte. Uneori, un atribut multivaloare este deghizat sub forma atributelor multiple. De exemplu, figura 14 ar putea fi modificat astfel nct s conin atribute (coloane) separate pentru cel mult trei limbi corespunztoare fiecrui film, numite Language 1, Language 2 i Language 3. Totui, si acestea ar fi considerate atribute multivaloare, dar ntr-o forma special, numit grup repetitiv, care nu este acceptat n prima form normal. Din punct de vedere logic, un grup repetitiv nu este diferit de un atribut multivaloare. De fapt, grupurile repetitive prezint deseori chiar mai multe probleme dect atributele multivaloare, deoarece trebuie s adugai o nou coloan n tabel ori de cte ori vrei s adugai mai multe valori dect a prevzut iniial proiectantul bazei de date (cum ar fi o a patra limb pentru un film). Bazele de date relaionale cer ca toate rndurile dintr-un tabel s aib acelai numr de coloane, dar un tabel poate conine orice numr de rnduri
FIL M_I D N R _ C O PI E 1 GEN_ COD GEN_ DESC RIERE CO D_L IMB A MPA A_C OD_ RAT ING MPAA_RATING _DESC FILM_NU ME A N_ PR O D US 20 03 DATA_ CUMPA RARE DA TA_ VA NZ AR E MEDI A FORM AT PRET _INC HIR
Dram a
Drama
en, fr
AclA d
ActA v
en, fr, es
en, fr, es
en
Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Parintii sunt avertizati Parintii avertizati Parintii avertizati sunt
Mystic River
01/01/20 05
DVD
19.96
20 03
01/10/20 05
DVD
19.96
20 03
01/10/20 05
VHS
15.95
en
en, fr
sunt
20 03 20 03 20 03
1/30 /200 5
DVD
29.99
DVD
29.99
DVD
19.99
Figura 1-4 Relaia FILM . Ca urmare, procesul de normalizare pentru obinerea primei forme normale cere s transformai coloanele repetate i valorile repetate din coloane n rnduri repetate ntr-un tabel separat . Pentru transformarea relaiilor ne-normalizate n prima form normal, trebuie s mutai atributele multivaloare i grupurile repetitive n noi relaii. Deoarece grupurile repetitive reprezint un set de atribute care se repet mpreun, toate
atributele dintr-un grup repetitiv ar trebui mutate n aceeai relaie. Pe de alt parte, un atribut multivaloare (un atribut individual care are valori multiple) ar trebui s fie mutat ntr-o nou relaie proprie, nu s fie combinat cu alte atribute multivaloare n noua relaie. Procedura de mutare a unui atribut multivaloare sau a unui grup repetitiv ntr-o nou relaie const n urmtoarele etape: 1. Creai o nou relaie, cu un nume sugestiv. Deseori, este bine s includei numele relaiei originale, parial sau n ntregime, n numele noii relaii. 2. Copiai identificatorul unic din prima relaie n noua relaie. Datele depind de acest identificator n relaia original, aa c trebuie s depind de aceeai cheie i n noua relaie. Identificatorul copiat va deveni cheie extern n noua relaie. 3. Mutai grupul repetitiv sau atributul multivaloare n noua relaie. (Am folosit aici verbul a muta, deoarece aceste atribute sunt terse din relaia original.) 4. Formai un identificator unic n noua relaie, adugnd atribute la identificatorul unic copiat din relaia original. Ca ntotdeauna, asigurai-v c identificatorul unic nou format conine numai numrul minim de atribute necesar pentru a-1 face unic. Dac mutai un atribut multivaloare, care, n esen, este un grup repetitiv cu un singur atribut, este adugat atributul respectiv pentru formarea identificatorului unic. Poate prea ciudat la prima vedere, dar identificatorul unic copiat din relaia original nu este doar o cheie extern, ci, de obicei, i o parte a identificatorului unic (cheia primar) a noii relaii. Acest lucru este absolut normal. De asemenea, este perfect acceptabil s avem o relaie n care toate atributele fac parte din identificatorul unic (adic nu exist atribute care s nu fac parte din cheie). 5. Opional, putei s nlocuii cheia primar cu un singur atribut surogat pentru cheie. Dac facei acest lucru, trebuie s pstrai i atributele care compun cheia primar natural, format la paii 2 i 4. Figura 1-5 prezint rezultatul aducerii relaiei din figura 1-4 la prima form normal. Observai urmtoarele:
FIL M_I D
NR _C OPI E
GEN _CO D
GEN_D ESCRIE RE
MPAA_RATING_ DESC
FILM_NUME
Dram a
Drama
Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Parintii avertizati sunt
Mystic River
AclA d
The Samurai
Last
ActA v
The Samurai
Last
Come die
PG-13
Come die
Comedie
PG-13
Parintii avertizati
sunt
ActA v
Actiune si aventura
PG-13
Parintii avertizati
sunt
A N _ P R O D U S 2 0 0 3 2 0 0 3 2 0 0 3 2 0 0 3 2 0 0 3 2 0 0 3
MEDIA FORMAT
01/01/ 2005
DVD
19.96
01/10/ 2005
DVD
19.96
01/10/ 2005
VHS
15.95
01/10/ 2005
1/30/2 005
DVD
29.99
2/15/2 005
DVD
29.99
2/15/2 005
DVD
19.99
Am folosit o mic scurttur n cazul identificatorului unic n noua relaie FILM Language. Limba n care este disponibil un film se aplic filmului, n general, nu copiilor individuale. Observai n figura 1-4 c lista de limbi disponibile nu se schimb ntre rndurile duplicate ale aceluiai film. Ca urmare, partea NR_ COPIE a identificatorului unic din relaia FILM nu a fost copiat n noua relaie FILM Language. Dac a fi fcut acest lucru, a fi creat n noua relaie o problem specific celei de-a doua forme normale, pe care ar fi trebuit s o rezolv n urmtoarea etap a procesului de normalizare. Vei descoperi c, deseori, proiectanii experimentai de baze de date sintetizeaz cele trei forme normale i rescriu relaiile originale direct n a treia form normal. Exersnd, vei putea i dumneavoastr s facei acelai lucru.
FILM_ID 1 1 2 2 2 3 4 4 COD_LIMBA en fr en fr es en en fr
Figura 1-5 Soluia primei forme normale Atributul FILM_ID a fost copiat din relaia original (FILM) n noua relaie (FILM Language). Atributul multivaloare COD_LIMBA a fost mutat din relaia FILM n relaia FILM Language, cu numele Language Code. (Numele abreviate ale atributelor din
figura 1-4 au fost folosite doar pentru ilustrare - este recomandabil s prescurtai numele numai dac este absolut necesar.) Identificatorul unic din relaia FILM Language este format prin combinarea atributelor FILM_ID i Language Code, adic din toate atributele relaiei. Nici FILM, nici FILM Language din figura 1-5 nu conin grupuri repetitive sau atribute multivaloare, aa c ambele relaii sunt n prima form normal.
identificatorul unic. Relaia FILM Language era deja n a doua form normal, deoarece nu are atribute non-cheie i, ca urmare, a rmas nemodificat.
FILM:
FILM _ID GEN_ COD GEN_DESCRIER E MPAA_ COD_R ATING MPAA_DESCRIERE _RATING FILM_NUME AN_PRO DUS
Drama
2 3 4
R PG-13 PG-13
Sub 17 ani necesita prezenta parintilor sau a unui adult Sub 17 ani necesita prezenta parintilor sau a unui adult Parintii sunt avertizati Parintii sunt avertizati
Mystic River 2003 The Last Samurai Something's Gotta Give The Italian Job
FILM COPY:
FILM ID 1 2 2 3 3 4 NR_ COPIE 1 1 2 1 2 1 DATA_CUMPARARE 01/01/2005 01/10/2005 01/10/2005 01/10/2005 2/15/2005 2/15/2005 DATA_VAN ZARE MEDIA FORMAT DVD DVD VHS DVD DVD DVD PRET_INCHIR 19.96 19.96 15.95 29.99 29.99 19.99
1/30/2005
Se spune c o relaie este n a treia form normal dac ndeplinete urmtoarele dou criterii: Relaia este n a doua form normal. Nu exist dependene tranzitive (cu alte cuvinte, toate atributele non-cheie depind numai de identificatorul unic). Pentru a aduce la a treia form normal o relaie aflat n a doua form normal, se mut atributele dependente tranzitiv n relaii n care depind numai de cheia primar. Se las atributul de care depind acestea n relaia original, cu rolul de cheie extern.Va trebui apoi s reconstruim vizualizarea original printr-o uniune. Ca efect secundar, toate atributele uor de calculat sunt eliminate ca nclcri ale criteriilor celei de-a treia forme normale. De exemplu, ntr-o baz de date pentru vnzri, Suma Total este obinut nmulind Cantitatea Cumprat cu Preul Unitar; aa cum se observ cu uurin, Suma Total este dependent de Cantitatea Cumprat i de Preul Unitar. Presupunnd ci toate cele trei atribute sunt dependente de identificatorul unic al relaiei care le conine, este uor de vzut c Suma Total (rezultatul calculat) este, de fapt, dependent tranzitiv te celelalte dou atribute. Figura 1-7 conine soluia n a treia form normal. S-au creat noi relaii pentru MPAA Rating i FILM Gen, s-a mutat descrierile n noile relaii i am lsat atributele pentru coduri (MPAA_COD_RATING i FILM GEN_COD) n relaia FILM, definite ca fiind chei externe. Muli proiectani de baze de date numesc relaiile MPAA Rating i FILM Genre tabele de cutare" sau tabele de coduri deoarece sunt utilizate, n principal, pentru cutarea codurilor stocate n coloana cheie primar a relaiei. Totui aceste relaii au i alte roluri, cum ar fi controlul codurilor i furnizarea unei surse convenabile pentru lista de coduri valide, care poate fi folosit ntr-o list derulant de pe o pagin web. FILM:
FILM _ID 1 2 3 4 GEN_ COD Drama ActAv Comedi e ActAv MPAA_ COD_R ATING R R PG-13 PG-13 The Samurai Something's Gotta Give The Italian Job Last 15.95 14.95 11.95 19.96 2003 29.99 2003 19.99 2003 FILM_NUME Mystic River PRET_ INCHIR VHS 58.97 PRET_ INCHIR DVD 19.96 AN_PRODUS 2003
FILM_ COPII: FILM_ID NR_ COPIE DATA_CUMPAR DATE ARE VINZARE 1 1 01/01/2005 2 1 01/10/2005 2 2 01/10/2005 3 1 01/10/2005 1/30/2005 3 2 2/15/2005 4 1 2/15/2005
MPAA Rating : MPAA_COD_RATING MPAA_DESCRIERE_RATING PG-13 Parintii sunt avertizati R Sub 17 ani necesita prezenta parintilor sau a unui adult
Figura 1-7. Soluia pentru a treia form normal O alt modificare fcut pentru a ajunge la a treia form normal este legat de atributul PRET_INCHIR (pre cu amnuntul) din relaia Movie Copy, aa cum se poate vedea n figura 1-6. Dup o discuie cu proprietarul magazinului, am stabilit c preul depinde de combinaia dintre Movie ID i Media Format, toate copiile cu aceleai valori pentru FILM_ID i Media Format avnd acelai pre. In mod clar, aceasta este o dependen tranzitiv i, ca urmare, o nclcare a celei de-a treia forme normale. Soluia normal pentru o asemenea problem ar fi crearea unei relaii numite FILM Price, avnd ca identificator unic combinaia dintre FILM_ID i Media Format, i mutarea atributului PRET_INCHIR din FILM Copy n noua relaie. Totui, n timpul discuiei s-a aflat c urmeaz s se renune la furnizarea filmelor n format VHS, deoarece sunt cerute de un numr foarte mic de clieni i c peste cteva luni magazinul va avea numai filme pe DVD. innd seama de aceast informaie, am decis s mut preul n dou coloane din tabelul FILM, una cu preul pentru DVD i una cu preul pentru VHS. Dei se poate spune c aceasta este o nclcare a primei forme normale (i, din punct de vedere tehnic chiar este), mi s-a prut a fi cel mai bun compromis. Proiectarea bazelor de date nu este ntotdeauna o tiin exact, aa c de multe ori exist posibilitatea unor mici ajustri, cu condiia ca proiectantul s ia n calcul consecinele poteniale (msurate n termenii anomaliilor de date) ale fiecrui compromis.
Exemplu:
ADRESA(cod_parsoana#, telefon#, adresa)
cod_persoana
adresa
telefon n dependena adresa telefon se observ c determinantul nu este o cheie candidat. Relaia ADRESA se desface n: ADRESA_1(cod_persoana#, adresa); ADRESA_2(adresa#, telefon). Relaiile sunt n BCNF, se conserv datele, dar nu se conserv dependenele (s-a pierdut cod_persoana, telefon adresa). Diferii ali autori i cercettori au oferit propriile extensii, numite a patra form normal, a cincea form normal, forma normal cu cheie de domeniu i altele. A patra form normal(FN4) elimin redudanele datorit relaiilor de tip m:m. Este nevoie de ceva exerciiu n procesul de normalizare nainte ca aceste extensii s devin logice. In plus, a treia form normal acoper toate anomaliile pe care este posibil s le ntlnii n lucrul cu baze de date obinuite. Prezentarea general a bazei de date pentru un magazin video Majoritatea exemplelor din acest curs folosesc ca model o baz de date pentru un magayin virtual de produse video. Instruciunile SQL pentru creare obiectelor bazei de date i pentru popularea acestora cu date vor fi prezentate n leciile urmtoare. n figura 1-8 se prezint disgrama entitate relaie, ERD (Entity Relationship Diagram) pentru aceast baz de date.
PK
PK FK1 FK2
PK
PK,FK1 PK
FILM_INCHIRIERE FILM _ID NUM AR_COPIE TRANZACTIE_ID DATA_INTOARCERE COST_INCHIRIERE COST_INTARZIERE_SAU_PIERDERE DATA_RETURNARE
LIM BA COD_LIM BA NUME_LIM BA PK CLIENT_CONT CLIENT_CONT_ID PK CLIENT_HOLD_IND DATA_INSCRIS DATA_TERMINAT CLIENT_DEPOZIT_SUM A CARD_CREDIT_LA_DOSAR_INDIC COPIL_INCHIRIERE_PERM IS_INDIC CLIENT_TRANZACTIE TRANZACTIE_ID CLIENT_CONT_ID ANGAJAT_PERSOANA_ID TRANZACTIE_DATA VANZARI_TAXA PK FK1
PK,FK1 PK,FK2
PERSOANA PERSOANA_ID PERSOANA_PRENUM E PERSOANA_NUME_M IJLOCIU PERSOANA_NUME PERSOANA_ADRESA_1 PERSOANA_ADRESA_2 PERSOANA_ADRESA_ORAS PERSOANA_ADRESA_JUDET_PROV PERSOANA_ADRESA_COD_POSTAL PERSOANA_ADRESA_TARA PERSOANA_TELEFON NASTERE_DATA MOARTE_DATA
PK
PK,FK1
Probleme:
1. S se normalizeze tabelul CURS_SUDENT i PROFESOR Amintim c o tabel este n prima form normal(FN1) dac valorile tuturor atributelor care o compun sunt atomice (indivizibile). n plus, nu trebuie s existe atribute sau grupuri de atribute repetitive. Aceast prim form normal este considerat ca fiind o cerina minimal pentru majoritatea sistemelor relaionale, utilitatea ei fiind evident. Astfel , dac o coloan ar conine o list de valori , regsirea i manipularea informaiilor stocate ar fi foarte anevoioase. Presupunem c tabela Curs_Student conine urmtoarele date:
CURS_SUDENT NrMatricol NumeSt 458 Predescu 521 Radu 627 Cristescu 746 Irimia 782 Tanase 982 Bunea 1204 Dragnea S1520 Popa
Cursuri-Nota engleza-7,germana-8 desen-tehnic-10,franceza-7 programare-8,engleza-10 analiza numerica-9 gernana-6,programare-10 rezistenta materialelor-8 educatie fizica-10 analiza numerica-7,engleza-9
Coloana Cursuri conine mult prea multa informaie. S presupunem c am nlocui coloana Cursuri cu dou noi coloane: CURS_SUDENT
NrMatricol 458 521 627 746 782 982 1204 1520 NumeSt Predescu Radu Cristescu Irimia Tanase Bunea Dragnea Popa PrenumeSt Alexandru George Lucian Diana Daciela Mihaela Liviu Marius Grupa 114 122 243 361 341 114 412 452 Curs1 engleza desen tehnic programare analiza numerica germana rezistenta materialelor educatie fizica analiza numerica Nota1 7 10 8 9 6 8 10 7 Curs2 germana franceza engleza programare Nota2 8 7 10 10
engleza
Nici acum nu am rezolvat toate problemele. De exemplu, pentru a afla ci studenti s-au nscris n total la un anumit curs , va trebui s parcurgem toate cele trei coloane cu cursuri. n plus, ce se ntmpl n cazul n care un student s-a nscris la mai mult de dou cursuri? S zicem c un student nu se poate inscrie la mai mult de cinci cursuri i deci putem introduce zece coloane pentru a stoca informaiile curs-nota. .Evident , aceasta ar presupune o mare risip de spaiu , de vreme ce ar exista i unii studenti care au ales doar dou cursuri. Pentru a aduce tabela Curs_Student la FN1 vom introduce o nou coloan n cheia primar a tabelei, astfel nct aceasta va fi format acum din dou coloane: NrMatricol i IdCurs. Acum putem afla numrul total de studeni nscrii la un anumit curs. CURS_SUDENT Denumire NrMatricol NumeSt PrenumeSt Grupa IdCurs 458 Predescu Alexandru 114 4 germana 521 Radu George 122 3 franceza 521 Radu George 122 5 desen tehnic 627 Cristescu Lucian 243 1 programare 627 Cristescu Lucian 243 2 engleza 746 Irimia Diana 361 8 analiza numerica A doua form normal (FN2) Amintim c o tabel este n a doua form normal dac este n FN1 i fiecare atribut care nu face parte din cheia primar este dependent de ntreaga cheie primar.
Tabela Curs_Student este n FN1, dar nu ndeplinete cea de-a doua cerin pentru a fi n FN2. Coloana Denumire care depinde numai de IdCurs, nu i de NrMatricol , care , mpreun cu IdCurs, formeaz cheia primar. Deci avem o coloan care nu face parte din cheia primar i nu depinde de toat cheia, n sensul c , pentru o valoare dat a lui IdCurs, cunoatem denumirea cursului fr a mai trebui s tim i NrMatricol. Putem aduce tabelaCurs_Student n FN2 descompunnd-o n dou tabele, dup urmtoarea regul: pentru fiecare dependen parial se formeaz o nou tabel (pe care o vom numi Curs) coninnd coloanele determinate de aceast dependena (n acest caz, Denumirea) i determinantul lor (IdCurs). Coloanele determinate se elimin din tabela iniial. Cheia primar a noii tabele va fi format din coloanele ce compun determinantul dependenei (IdCurs), ntre cele dou tabele rezultate exist o relaie de tip 1:m asigurat de existena lui IdCurs drept cheie strin n tabela Curs_Student. Analog, deoarece coloanele NumeSt, PrenumeSt i grupa depind numai de NrMatricol, le eliminm din tabela Curs_Student i formm o nou tabel, Student, ce le va conine i va avea drept cheie primar coloana NrMatricol. De asemenea , ntre tabelele Student i Curs_Student exist o relaie de tip 1:m. STUDENT
NrMatricol 458 521 627 746 782 982 1204 1520 NumeSt Predescu Radu Cristescu Irimia Tanase Bunea Dragnea Popa PrenumeSt Alexandru George Lucian Diana Daciela Mihaela Liviu Marius Grupa 114 122 243 361 341 114 412 452
CURS_SUDENT
IdCurs 1 1 2 3 4 4 5 5 NrMatricol 782 982 458 521 627 1520 521 1740 Nota 5 10 7 7 8 8 10 6
IdCurs 1 2 3 4 5 6 7 8
CURS Denumire programare engleza franceza germana desen tehnic Rezistenta materialelor Educatie Fizica analiza numerica
A treia form normal (FN3) O tabel este n a treia form normal dac este n FN2 i toate coloanele care nu fac parte din cheia primar sunt mutual independente (depind direct de cheia primar i numai de ea)
Un exemplu calasic de dependen tranzitiv este cel al coloanelor calculate. Astfel , dac o tabel de produse ar conine Coloanele PretUnitar i Cantitate i , n plus, coloana PretTotal aceast tabel nu ar fi n FN3. Coloanele calculate nu sunt singurul caz de dependena tranzitiv ntr-o tabel. De exemplu n tabela Profesor se poate observ faptul c salariul depinde de titlul profesorului, coloanele Salariu, Titlu i IdTitlu nefcnd parte din cheia primar. Dependenele tranzitiv creeaz probleme la adugarea, actualizarea i tergerea nregistrrilor. De exemplu, dac la tabela Profesor se mai adaug 20 de nregistrri , fiecare cu titlul de preparator (prep), va trebui s introducem de 20 de ori valoarea 5 pentru IdTitlu, descrierea preparaotr pentru Titlu i valoarea 800 pentru Salariu , ceea ce este evident, redundant. De asemenea, dac salariul unui preparator se modific, va trebui s asctualizm toate nregistrrile corespunztoare. Pentru a nltura toate aceste inconveniene, vom aduce tabela Profesor la FN3 prin crearea unei noi tabele, pe care o vom numi Titlu.Tabela Titlu va avea drept cheie primar coloana IdTitlu i va mai conine coloanele Titlu i Salariu, pe care leam eliminat din tabela Profesor. Profesor IdProf 1 2 3 4 5 6 7 Titlu IdTitlu 1 2 3 4 5 6 Titlu lector dr. asistent lector conferentiar dr. prepartor profesor dr. Salariu 1300 950 1100 1700 680 2150 Nume Popescu Marin Dragnea Ion Iosif Irina Ilie Daniel Savu Cristina Cristea George Ene Dan Catedra Matematici Limbi straine Educatie fizica Informatica Limbi straine Fizica Matematici IdTitlu 1 4 3 2 5 3 7
2. Amintim ca regulile de integritate sunt; - unicitatea cheii primare - integritatea entitii valorile cheii primare sa fie diferite de valoarea null(o valoare necunoscuta sau lipsete) - integritatea referenial ) o cheie secundar trebuie s fie null n ntregime sau s corespund unei valori a cheii primare asociate.(in tabela asociat nu trebuie s existe valori fr corespondent). Tabelele Titlu i Profesor sunt n relaia 1:m (un Titlu corespunde la mai multe cadre didactice). Tabele de mai sus pstreaz regulile de integritate?
Raspuns Nu, deoarece exist cadrul didactic cu IDProf= 7 cu IdTitlu =7 , care nu exist in tabelul Titlu, ca funcie didactic. 3. S se determine anomaliile pentru tabelul Avion A# 1 2 3 4 5 6 nume AIRBUS AIRBUS AIRBUS CAR B707 B707 capacitate 250 250 250 100 150 150 localitate PARIS PARIS LONDRA PARIS LONDRA LONDRA
Constrngere: toate avioanele cu acelai nume au aceeai capacitate. Datorit dependenei introduse pot exista: anomalii la inserare, modificare sau tergere, redundan n date, probleme de reconexiune.
1. 2.
Redundan logic. Cuplul (AIRBUS, 250) apare de trei ori. Anomalie la inserie. S-a cumprat un B727 cu 150 locuri. El poate fi inserat n relaia AVION doar dac se definete o nou valoare pentru cheia primar. Anomalie la tergere. Dac este tears nregistrarea pentru care A# este 4, atunci se pierde informaia c un avion CAR are capacitatea 100. Anomalie la modificare. Dac se modific capacitatea lui B707 de la 150 la 170, atunci costul modificrii este mare pentru a modifica toate nregistrrile, iar dac se modific doar o nregistrare atunci constrngerea nu va mai fi verificat.
3. 4.
4. Exemplu: variante pentru a implementa FN1 pentru tabelul MASINA: Persoana Eu Tu El noi Varianta 1 Persoana Eu Eu Vehicul R25 W14 Vehicul R25 - W14 - R21 205 R5 - 305 BX - 305 - R12 - R25
Eu Tu El El Noi Noi Noi Noi Varianta 2 Persoana Eu Tu El Noi Prima R25 205 R5 BX
Trei R21
Patru
R12
R25
Varianta 3 (4 tabele) Masina 31 (similar se definesc Masina_32, Masina_33, Masina_34).. Persoana Eu Tu El Noi Masina_34 Persoana Noi Vehicul R25 Vehicul R25 205 R5 BX
5. S se aduca la FN2 O relaie R este n a doua form normal dac i numai dac: relaia R este n FN1; fiecare atribut care nu este cheie (nu particip la cheia primar) este dependent de ntreaga cheie primar. ATASAT_LA
COD_SALARIAT# S1 S1
NR_PROIECT# P1 P2
SUMA 60 25
S1 S3 S5
P3 P3 P3
10 60 60
ATASAT_2A
COD_SALARIAT# S1 S1 S1 S3 S5 NR_PROIECT# P1 P2 P3 P3 P3 FUNCTIA SUPERVIZOR CERCETATOR AUXILIAR SUPERVIZOR SUPERVIZOR SUMA 60 25 10 60 60
ATASAT_2B
COD_SALARIAT# S1 S3 S5 JOB_COD PROGRAMATOR VANZATOR INGINER
A doua condiie exprim necesitatea total dependenei de cheia primar. Aceast form normal interzice manifestarea unor dependene funcionale pariale n cadrul relaiei R! Pentru a obine o relaie FN2 se poate aplica regula Casey-Delobel. mulimea atributelor care intervin n dependenele funcionale; reprezint reuniunea determinantului cu restul atributelor lui A. 7. Tabelul atasat_2a nu este in FN3. De ce? Forma normal 3 (FN3) Intuitiv, o relaie R este n a treia form normal dac i numai dac: relaia R este n FN2; fiecare atribut care nu este cheie (nu particip la o cheie) depinde direct de cheia primar. atasat_3a Cod_salariat# Nr_proiect# S1 P1 S1 P2 S1 P3 S3 P3 S5 P3 atasat_3b Functia Suma Supervizor 60 Cercetator 25 Auxiliar 10
8. Presupunem c un antier poate executa mai multe lucrri de baz i c o lucrare poate fi executat de mai multe antiere. LUCRARE(cod_obiectiv#, cod_lucrare#, nume); SANTIER(nr_santier#, specialitate, sef); EXECUTA(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere, functie, conducator, data_inceput, data_sfarsit). Pentru relaia EXECUTA sunt evidente dependenele: {cod_obiectiv#, cod_lucrare#} {data_inceput, data_sfarsit}, {cod_obiectiv#, cod_lucrare#, nr_santier#} {descriere, functie, conducator}. 9. S se aduca la FN3 tabelel EXECUTA_1 rezultat de la 8 n tabelul EXECUTA_1(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere, functie, conducator) continu s existe redundan n date. Atributul conducator depinde indirect de cheia primar prin intermediul atributului functie. ntre atributele relaiei exist dependenele: {cod_obiectiv#, cod_lucrare#, nr_santier#} {descriere}, {cod_obiectiv#, cod_lucrare#, nr_santier#} {functie} {conducator}. Pentru a aduce relaia EXECUTA_1 n FN3 se aplic regula Casey- Delobel. Relaia se desface, prin eliminarea dependenelor funcionale tranzitive, n proieciile: EXECUTA11(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere, functie) EXECUTA12(functie, conducator).
10 S se aduc la forma BCNF (Forma normal Boyce-Codd ) (Formal, o relaie R este n forma normal Boyce-Codd dac i numai dac pentru orice dependen funcional total X A, X este o cheie (candidat) a lui R.) Relaia INVESTESTE_IN OBIECTIV_INVESTITIE. leag entitile INVESTITOR i
Ea are schema relaional: INVESTESTE_IN(cod_contractant#, cod_obiectiv#, nr_contract, cota_parte). ntre atributele relaiei exist dependenele: {cod_contractant#, cod_obiectiv#} {nr_contract, cota_parte}, {nr_contract} {cod_obiectiv}. Se aplic regula Casey-Delobel i se aduce relaia n BCNF. INVESTESTE_IN_1(cod_obiectiv, nr_contract#); INVESTESTE_IN_2(cod_contractant#, nr_contract, cota_parte).
Componentele unei baze de date ACESS Folosind aplicaia Microsoft Access, se poate administra toata informaia ntr-o singur baz de date (Database). n interiorul acestui fiier de tip Microsoft Access, se mpart datele n structuri separate numite tabele (Tables); se vizualizeaz, adaug i actualizeaz datele dintr-o tabel folosind formele (Forms); se gsesc i extrag datele folosind interogri (Queries); i se analizeaz sau se tipresc datele ntr-un format special folosind rapoartele (Reports). Tables, Queries, Forms i Reports sunt cele mai importante entiti care se creay ntr+o bay de date Access. Datele se stocheaz ntr-o singur locaie (n tabel), dar se pot vizualiza sub diferite forme: interogare, raport sau form. n momentul n care se modific i salveaz informaia n tabel atunci aceasta se va vedea i n celelalte forme. Pentru stocarea datelor, se creeaz o tabel pentru fiecare tip de informaie pe care dorii s o urmrii. Pentru utilizarea n diverse forme a informaiilor din tabele diferite se pot defini relaii ntre tabele. Astfel, se definete o relaie ntre un identificator unic din tabela de Furnizori i comenzile ctre acest furnizor din tabela ComenziFurnizori. Prin aceasta pentru fiecare furnizor definit n mod unic n tabela Furnizori se pot extrage din tabela ComenziFurnizori toate comenzile ctre acesta. Pentru a gsi i extrage numai informaiile ce ndeplinesc anumite condiii specificate de utilizator i care includ informaii din mai multe tabele, se poate crea o interogare. O interogare poate de asemenea s actualizeze sau s tearg mai multe nregistrri n acelai timp, s execute calcule asupra datelor, etc Pentru a vizualiza, introduce sau schimba uor datele direct ntr-un tabel, se creeaz o form. Atunci cnd se deschide o form, Microsoft Access extrage date dintr-unul sau mai multe tabele i le afieaz pe ecran folosind modalitatea de afiare aleas/creat de utilizator (prin forma respectiv). Pentru analiza datelor sau pentru prezentarea lor ntr-o anumit structur la tiprire, este necesar s se creeze un raport. Astfel, se poate tipri un raport care grupeaz datele i calculeaz sumele totale i alt raport n care se afieaz datele pentru diferite nregistrri din tabel, etc. Pentru a lucra cu toate obiectele dintr-o baz de date se utilizeaz fereastra Database, cea care permite selectarea Tab-urilor se apas Tab-ul dorit i n fereastra afiat se pot vizualiza toate obiectele (de acel tip) disponibile n baza de date accesat. Folosindu-se butoanele din dreapta acestei liste, se pot deschide (Open), modifica (Design) i crea (New) obiecte noi.
Sistemul de operare trebuie s fie: Microsoft Windows 2000 cu Service Pack 3 (SP3), Windows XP, sau o versiune ulterioar acestora. In ceea ce privete posibilitile aplicaiei putem spune c Microsoft Access poate mbunti modalitatea n care se organizeaz, acceseaz i partajeaz informatia. Access 2003 este suficient de sofisticat pentru dezvoltatori ct i suficient de uor pentru utilizatorii noi. Access 2003 este mai uor de utilizat ca niciodat pentru toata lumea, oricare ar fi nivelul de pregtire. Exist ncorporat o experien a utilizatorului mbuntit, verificarea automat a erorilor, updatarea automat a proprietilor i abilitatea de a vizualiza interdependenele dintre obiecte. Prin intermediul opiunilor Import/Export i al link-urilor ctre site-urile Microsoft Windows SharePoint Services se permite trasferul de date/informaii ntre membrii unei echipe. Access 2003 d posibilitatea unei abiliti mrite de a importa, exporta i de a lucra cu fiiere de date de tip Extensible Markup Language (XML). Access 2003 suport o varietate larg de formate de date incluznd Extensible Markup Language (XML), OLEDB, Open Database Connectivity (ODBC), i Microsoft Windows SharePoint Services. Se folosete informaie dintr-o varietate larg de formate ntr-o interfat familiar. Access 2003 folosete Access 2000 ca formatul de fiier implicit pentru noile baze de date. Aceasta permite instalarea i utilizarea Microsoft Access 2003 prin reutilizarea solutiilor Access deja existente. Microsoft Access ofer de asemenea posibiliti de a lucra ntr-o modalitate sigur cu datele folosite de exemplu prin intermediul parolrii bazei de date sau prin mecanisme de back-up al bazei de date. Pornirea i oprirea aplicaiei Pentru a putea utiliza Microsoft Access trebuie ca aceast aplicaie s fie instalat n cadrul pachetului Microsoft Office. Dup ce utilizatorul s-a asigurat c aceast aplicaie este instalat, pentru a o putea deschide trebuie s intre n meniul Start Programs i apoi s apese Microsoft Access din acest meniu. La apsarea acestui buton se va deschide aplicaia Microsoft Access n care va aprea o fereastra(Task Pane) n care utilizatorului i se va cere s precizeze aciunea urmtoare. Aceast aciune poate fi : una din cele dou opiuni de creare a unei noi baze de date deschiderea unei baze de date existente Pentru oprirea aplicaiei exist dou posibiliti: fie din meniul aplicaiei prin apsarea butonului Ieire (Exit) fie din butonul nchide (Close) al fiecrei aplicaii de tip fereastr. Crearea unei baze de date Crearea i deschiderea unei baze de date se pot face n dou feluri: fie din fereastra de alegere a urmtoarei aciuni care va apare la pornirea aplicaiei (v. punctul 1.3.), fie din meniul File (Fiier o baz de date este un fiier de tip Microsoft Access) al aplicaiei.
Crearea unei baze de date vid Pentru crearea unui fisier nou de tip Microsoft Access se poate selecta opiunea Baza de date Vid (Blank Database). La apsarea butonului Ok se va deschide o fereastr n care se va cere utilizatorului numele noii baze de date create. Fereastra nou deschis prezint urmtoarele caracteristici: are titlul Fiier Nou de tip Baz de date (File New Database) prezint opiunea de a salva ntr-o locaie dorit Salveaz n (Save in) directorul My Documents. In interiorul directorului selectat se pot vizualiza celelalte fiiere de acelai tip existente (n acest caz nici unul). De asemenea, tot n aceast fereastr: se poate introduce numele fiierului de tip baz de date n rubrica Numele fiierului (File name), - n acest caz se poate pune numele implicit db1 se poate modifica tipul fiierului la rubrica Salveaz ca tip (Save as type), tip baz de date Microsoft Access (Microsoft Access Databases). se apas butonul Creaz (Create) n cazul unei renunri se poate apsa butonul Anuleaz (Cancel). n cazul n care se dorete o alt locaie pentru baza de date pe cale de a fi creat, se apas sgeata existent lng numele directorului selectat din oficiu i se va da posibilitatea selectrii unui alt director. Bineneles, n urma selectrii unui alt director, informaia despre fiierele coninute de acesta se va schimba n conformitate cu directorul selectat. Fie n continuare un fiier dbCurs, n My Documents, de tip baz de date Microsoft Access i se apas butonul Create. n urma apsrii acestui buton se deschide o fereastr de tip Database. Aceasta este o fereastr n care nu exist absolut nici un obiect de tip Database, i.e. este o baz de date vid. Obinerea aceluiai rezultat se poate realiza i apsnd butonul Nou baz de date (New Database) din meniul File al aplicaiei. La apsarea acestui buton se va deschide o nou fereastr n care utilizatorul va fi ntrebat dac dorete o nou baz de date vid. La apsarea butonului Ok se va deschide fereastra de mai sus. Deschiderea unei baze de date existente O asemenea operaie se poate face din fereastra de dialog deschisa in urma alegerii optiunii Open (i.e. se alege fiierul creat la punctul 1.4.1, dbCurs). La apsarea butonului Ok se va deschide baza de date selectat (dbCurs) i aceasta este o baz de date vid deoarece nu a fost creat absolut nici un obiect n ea. Obinerea aceluiai rezultat se poate realiza i apsnd butonul Deschide baz de date (Open Database) din meniul File al aplicaiei. La apsarea acestui buton se va deschide o nou fereastr n care utilizatorul va fi ntrebat ce fiier de tip baz de date dorete a fi deschis. La apsarea butonului Deschide (Open) din dreapta ferestrei se ajunge din nou la fereastra Database. nchiderea unei baze de date Pentru nchiderea unei baze de date se poate folosi butonul Close din meniul File al aplicaiei sau butonul Close din fiecare aplicaie de tip fereastr.
Conversii, Compactri, Reparaii) Pentru realizarea conversiei unei baze de date (dintr-o versiune in alta) trebuiesc parcurse urmatoarele etape: 1. se salveaz (cu un alt nume) o copie a bazei de date ce urmeaz a fi convertit (pentru a se pstra originalul pn cnd se va putea lucra cu noua baz de date). 2. se nchide baza de date ce se dorete convertit 3. dac baza de date este cu mai muli utilizatori (localizat pe un server sau ntr-un director partajat), trebuie s nu fie accesat de niciunul din acetia. 4. n meniul Unelte (Tools) al ferestrei Access se apas pe opiunea Database Utilities respectiv Convertete Baza de date (Convert Database). 5. la apsarea acestei opiuni se deschide o fereastr din care se poate selecta baza de date ce urmeaz a fi convertit(modul de lucru este similar cu cel aferent deschiderii unei baze de date) 6. la apsarea butonului Convert se deschide o fereastr n cadrul creia se poate alege numele bazei de date ce urmeaz a fi creat prin conversia celei selectate n fereastra anterioara i locaia acesteia. Pentru cazul unei locaii diferite, se poate pstra acelai nume al bazei de date n cazul n care se dorete i pstrarea acestei versiuni a bazei de date. Dup efectuarea acestor pai, baza de date creat ntr-o versiune anterioar de Microsoft Access este convertit la versiunea curent. n acelai meniu cu Convert Database mai exist i alte opiuni: Compact Database i Repair Database Opiunea Compact Database copiaz i compacteaz o baz de date nchis (i.e. se poate schimba versiunea Microsoft Access i se poate cripta fiierul). n majoritatea cazurilor, Microsoft Access va detecta dac o baz de date s-a stricat atunci cnd se ncearc deschiderea, compactarea, criptarea sau decriptarea ei i se ofer opiunea reparrii acestei baze de date. n anumite situaii Microsoft Access poate s nu detecteze dac o baz de date s-a stricat (d.e. n cazul n care o baz de date se comport imprevizibil). Pentru a repara o baz de date presupus stricat i nesesizat de Microsoft Access se apas opiunea Repair Database. Dac se dorete repararea unei alte baze de date atunci se nchide cea curent i apoi se apas opiunea Repair Database; n acest caz se va deschide o fereastr de dialog n care va trebui sa introducei baza de date necesar a fi reparat.
LECIA 2. TABELE
n aceast lecie se vor prezenta noiuni despre tabele i anume: Nume de cmpuri, Mrimea i Tipul cmpurilor de date Proprietile cmpurilor Validarea cmpurilor Cheia primar Indexarea Componenta principal a unei baze de date din Microsoft Access este TABELA o colecie de informaii dispuse pe nregistrri (linii) i cmpuri (coloane). Pentru a se lucra cu tabelele dintr-o baz de date, din fereastra Database se
poziioneaz utilizatorul pe fereastra corespunztoare tabelelor (prin apsarea Tabului Tables) Pentru crearea unei tabele noi se va apsa butonul Nou (New). n acest moment poate fi selectat modalitatea de creare a acestei tabele. Din variantele existente se va alege Design View i la apsarea butonului Ok va apare fereastra n care se pune la dispozitia utilizatorului o modalitate de definire a unei tabele noi sub form tabelar. n tabelul furnizat liniile reprezint cmpurile tabelei, iar coloanele informaiile despre aceste cmpuri : Field Name Numele cmpului Data Type Tipul de date ce va fi introdus n acest cmp Description - O scurt descriere a cmpului respectiv Field Properties - Proprietile cmpului respectiv (sunt dependente de tipul de date i sunt afiate n partea inferioar a ferestrei deschise). Nume de cmpuri Numele cmpului se introduce n coloana cu acelai nume (Nume cmp, Field Name). Aceast coloan va conine numele tuturor cmpurilor din tabel. Pentru introducerea numelor de cmpuri se vor respecta regulile Microsoft Access de denumire a cmpurilor : maxim 64 de caractere orice combinaii de litere, numere, spaii i caractere speciale NU pot fi folosite urmtoarele elemente: Punctul (.) Semnul de exclamare (!) Parantezele dreptunghiulare ([ ]) Caracterele de control NU se pot folosi spaii la nceputul numelui Cteva sugestii referitoare la introducerea numelor de cmpuri : nu vor fi folosite spaii n interiorul numelui dac vor fi utilizate n cadrul codului de Visual Basic nu se vor folosi nume extrem de lungi deoarece sunt dificil de referit se recomand utilizarea unui nume sugestiv pentru valoarea ce va fi introdus n acel cmp. Observaie: Dup cum s-a putut observa exist primul cmp din tabela agendaPersoane numit NrCrt: acest cmp are semnificaia de Numar Curent Nr Crt: prin urmare, dac semnificaia cmpului este format din mai multe cuvinte, atunci numele cmpului ar trebui sa le conin, dac nu pe toate, mcar pe cele mai semnificative i desprite NU prin spaii ci prin scrierea lor cu liter mare la nceput (de cuvnt semnificativ). Tipuri de cmpuri de date Tipul de cmp de date (DataType) determin tipul de valori pe care utilizatorii le pot introduce n interiorul cmpului respectiv. Acest tip poate fi introdus/modificat n coloana a doua din Design View. Exist mai multe tipuri de cmpuri de date. Aceast coloan se utilizeaz n felul urmtor : dac se introduce doar numele cmpului i se trece la cmpul urmtor, atunci tipul de date Text este introdus n mod implicit. la selectarea unui tip de date n partea inferioar a acestei ferestre sunt puse la dispoziie proprietile cmpului (Field Properties) .
La un anume moment, se poate dori schimbarea tipurilor de date pentru cmpuri ce conin deja informaii. Aceasta se poate ntmpla de exemplu la importarea unor date i Microsoft Access nu a setat tipul de date dorit, sau chiar n timpul construirii bazei de date, cnd tipul de date selectat initial se dovedete a nu mai fi potrivit. naintea acestor conversii (dintr-un tip n altul) este bine s se aib n vedere consecinele unei asemenea schimbri asupra informaiilor existente deja n tabel. De asemenea, trebuie luate n consideraie modificrile ce trebuiesc operate n interogrile, rapoartele sau formele ce utilizau acest cmp. Cele mai comune schimbri de tip de date sunt prezentate n cele ce urmeaz: conversia din orice tip n Text conversia din Text n Number, Currency, Date/Time sau Yes/No conversiile ntre Number i Currency sau ntre Text i Memo schimbarea proprietii FieldSize la tipul Number. Fiecare dintre aceste schimbri va fi prezentat separat. Text, Memo Microsoft Access furnizeaz dou tipuri de date Text i Memo pentru a stoca text sau combinaii de text cu numere. Tipul Text poate fi folosit pentru a stoca nume, adrese, i orice numere ce nu necesit calcule (d.e. numere de telefon sau numere de cont). Un astfel de cmp poate stoca pn la 255 de caractere, dar valoarea implicit este de 50 de caractere. Pentru a controla numrul maxim de caractere introduse ntr-un cmp atunci trebuie setat proprietatea Field Size. Tipul Memo se folosete dac se dorete stocarea unor texte sau combinaii de text cu numere foarte lungi, de pn la 65 535 de caractere, deci mai mult de 255 de caractere puse la dispoziie de tipul Text. Aceste cmpuri nu pot fi indexate sau sortate. Ambele tipuri stocheaza doar caracterele introduse; nu se memoreaz spaii pentru caracterele neintroduse. Proprietile acestor dou tipuri de date sunt similare. Dup un timp n care se stocheaz numere ce necesit calcule n cmpuri de tip Number i Currency se poate ajunge la concluzia c aceste cmpuri trebuie s mai conin i litere sau alte caractere nenumerice. Astfel, dac se folosete un cmp de tip Number pentru numere de cont (acestea coninnd numai cifre) i numerele de cont se modific i conin de la un anume moment i litere, atunci acest tip trebuie modificat la Text. Microsoft Access convertete valorile numerice la text folosind formatul General Number, ca i valorile Date/Time folosind formatul General Date. Valorile convertite nu vor conine simboluri valutare sau alte caractere speciale de formatare specificate pentru cmp nainte de conversie. Conversia din Text n orice alt tip de date se face fr pierderi de informaie att timp ct informaiile deja introduse sunt potrivite pentru noul tip de cmp n care se realizeaz conversia (d.e. nu se poate face conversia la tipul Number dac valorile introdus conin i altceva dect numere). Number, Currency, AutoNumber Microsoft Access furnizeaz i dou tipuri de date pentru cmpuri ce conin valori numerice: Number i Currency. Tipul Number se folosete atunci cnd valorile introduse se folosesc n calcule matematice, cu excepia acelor calcule ce implic indici monetari sau care cer un mare grad de acuratee. Tipul i dimensiunea valorilor numerice dintr-un cmp de tip
Number pot fi controlate prin setarea proprietii FieldSize (d.e. pentru Byte se vor stoca numai numere de la 0 la 255 i vor ocupa un spaiu de un octet). Tipul Currency se folosete atunci cnd se dorete evitarea rotunjirilor n timpul calculelor. Intr-un astfel de cmp se introduc valori valutare i date numerice folosite n calcule implicnd valori cu una pn la patru cifre dup separatorul zecimal. Se pot introduce valori cu pn la 15 cifre n partea stng a separatorului zecimal i 4 cifre n dreapta separatorului zecimal. Valorile stocate n acest fel, vor ocupa un spaiu de 8 octei. Tipul valutar depinde de setrile din Regional Settings, dar la schimbarea acestor setri se modific doar modul de afiare i nu se fac i conversiile aferente (d.e. 256 $ va fi schimbat n 256 ). Proprietile acestor dou tipuri sunt identice cu excepia proprietii FieldSize care la tipul Currency este fixat la 8 octei. Tipul numeric AutoNumber este un tip special. Un cmp de acest tip stocheaz un numr unic secvenial (incrementat cu 1) sau o valoare aleatoare asignat de Microsoft Access atunci cnd o nou nregistrare este adugat ntr-o tabel. Cmpurile de tip AutoNumber nu pot fi modificate. Unui cmp de tipul AutoNumber nu i se poate schimba tipul dup ce au fost introduse date n tabel chiar dac nu a fost nimic introdus n acel cmp. Deci acest tip de cmp de date poate fi ales numai nainte de a se introduce date de orice fel n tabela respectiv. Proprietatea FieldSize este fixat la Long Integer. Valorile noi ale acestui tip se pot obine prin incrementare sau n mod aleatoriu. Pentru conversiile din tipul Text n tipul Number, separatorul zecimal i cele de mie sunt interpretate corect. Simbolurile valutare sunt interpretate n funcie de setrile din Regional Settings din Control Panel. De asemenea, se pot realiza conversii ntre tipurile Number i Currency: se face conversia de la Number la Currency atunci cnd, cu valorile stocate n cmpul respectiv, se vor realiza calcule numeroase i cnd aceste valori conin una pn la 4 zecimale. Pentru cmpurile de tip Currency se folosete metoda de calcul n virgul fix ce evit erorile de rotunjire. Date/Time Acest format se alege pentru un cmp dac se dorete stocarea n cadrul lui a unor informaii de tip Dat/Timp. Pentru acest tip de date sunt puse la dispoziie n cadrul proprietii Format diverse formate de dat (d.e. 07/02/2005), n funcie de setrile din Regional Settings. Un cmp de tipul Date/Time poate conine valori de dat i timp cuprinse ntre anii 100 i 9999. La selectarea acestui tip sunt puse la dispoziia utilizatorului o serie de proprieti ce pot restriciona valorile introduse n acest tip de cmp de date. n acest caz nu mai exist (ca n cazul cmpului Number) proprietatea Field Size, aceasta fiind fixat la 8 octei. Stocarea informaiilor de tip date ntr-un astfel de cmp asigur c datele vor fi sortate n mod corespunztor. De asemenea, modificrile efectuate asupra formatului de dat n Regional Settings din Control Panel vor fi reflectate i n aceste cmpuri. Pentru conversiile din tipul Text n tipul Date/Time majoritatea datelor sunt convertite n mod corect. Formatele de dat i timp sunt interpretate n conformitate cu setrile din Regional Settings din Control Panel. Yes/No Un cmp de acest tip poate conine doar valori Yes/No (Da/Nu) i poate avea doar una din dou valori (Yes/No, True/False, sau On/Off). Dimensiunea acestui cmp este de 1 bit, care n funcie de valoarea introdus, poate avea valoarea 0 sau 1.
Pentru conversiile din tipul Text n tipul Yes/No cuvintele Yes, True, sau On sunt convertite ntr-o valoare Yes, iar pe de alt parte valorile No, False, sau Off sunt setate la o valoare No. De asemenea la tipul Yes/No se pot converti i date memorate ntr-un cmp de tip Number n felul urmator: valorile 0 sau NULL vor fi convertite la valoarea No, iar valorile diferite de zero la valoarea Yes.
Proprietile cmpurilor
Fiecare cmp are un set de proprieti ce sunt folosite pentru a specifica modalitatea n care informaiile din cmpul respectiv sunt stocate, utilizate sau afiate (d.e. prin proprietatea FieldSize se poate controla numrul maxim de caractere ce poate fi introdus ntr-un cmp de tip Text sau Memo). Proprietile cmpurilor pot fi setate din fereastra Design View deschis prin apsarea butonului Design pentru o tabel selectat. Aici se selecteaz cmpul pentru care se dorete setarea proprietilor n partea de sus a ferestrei i se modific/seteaz proprietile acestui cmp n partea de jos a ferestrei. Proprietile ce sunt disponibile n partea de jos a ferestrei sunt determinate de tipul de date selectat pentru cmpul respectiv. Mrimea cmpurilor Se poate folosi proprietatea Mrimea cmpurilor (Field Size) pentru a seta mrimea maxim a datelor depozitate ntr-un cmp cu tipul setat la unul din urmtoarele tipuri de date: Text, Number, sau AutoNumber. Dac tipul de date al cmpului este Text, atunci se introduce un numr ntre 0 i 255. Setarea implicit este 50. Dac tipul de date al cmpului este AutoNumber, proprietatea FieldSize poate fi setat la LongInteger sau Replication ID. Dac tipul de date al cmpului este Number, proprietatea FieldSize poate fi setat n unul din modurile prezentate n tabelul urmtor: Observaii: 1. Se recomand a fi folosit o valoare ct mai mic posibil a proprietii FieldSize deoarece date cu dimensiuni mai mici sunt procesate mai rapid i utilizeaz i o memorie mai mic. 2. Dac se convertete o valoare mai mare a proprietii FieldSize la una mai mic, ntr-un cmp ce conine deja valori, se pot pierde date: d.e. dac se schimb FieldSize pentru un cmp de tip Text de la 255 la 50, atunci datele aflate dincolo de limita a 50 de caractere vor dispare. Dac datele dintr-un cmp de tip Number nu ncap n noua setare FieldSize, numerele fracionare se pot rotunji sau se poate obine chiar valoarea NULL. Astfel, dac se schimb setarea din Single n Integer, valorile fracionare vor fi rotunjite la cea mai apropiat valoare ntreag i valorile mai mari dect 32,767 sau mai mici dect 32, 768 vor rezulta n cmpuri nule. 3. Nu se pot reface schimbrile ce rezult dintr-o modificare a proprietii FieldSize dup ce se salveaz acele schimbri n Design View. 4. Se poate folosi tipul de date Currency dac se urmrete a se executa numeroase calcule ntr-un cmp ce conine valori cu una pn la 4 zecimale. Tipurile de date Single i Double cer calcularea n virgul mobil. Tipurile de date Currency utilizeaz o modalitate de calcul n virgul fix (mai rapid). Formatul Proprietatea Format se folosete pentru a stabili modalitatea n care numerele, datele i textul sunt afiate i tiprite.
Pentru un cmp, aceast proprietate se poate seta n Design View, n Field Properties; de asemenea, aceast proprietate se poate seta i n codul de Visual Basic. Astfel, dac n tabela Catalog s-a creat un cmp Pre de tipul Currency, se pot seta proprietile acestuia la Currency (Valut) i proprietatea de DecimalPlaces (Numrul de Zecimale) la 2 sau pe Auto. Dac se stocheaz valoarea 4321.678 n cmpul respectiv, atunci numrul se va afia sub forma: $4,321.68. De asemenea, se poate folosi unul din formatele predefinite sau se poate crea un format propriu folosind simbolurile de formatare. Proprietatea Format folosete diferite setri pentru tipuri diferite de date In exemplul ilustrat sunt prezentate formatele predefinite puse la dispoziia utilizatorului de ctre Microsoft Access pentru tipul Date/Time. Sunt prezentate de asemenea si formatele puse la dispoziia utilizatorului pentru tipurile de date Currency i Number. Observaii : 1. Proprietatea Format afecteaz numai modalitatea de afiare a datelor, nu i pe cea de stocare. 2. Microsoft Access furnizeaz formate predefinite pentru tipurile de date Date/Time, Number i Currency i Yes/No. Formatele predefinite depind de ara specificat prin dublu click pe Regional Settings din Control Panel. Microsoft Access afieaz formatele potrivite pentru ara selectat. Astfel, pentru selecia English (United States) realizat n Regional Settings, valoarea stocat n cmpul Pret (din tabela Catalog) de 1234.56 n formatul Currency apare ca $1,234.56, dar dac este selectat English(United Kingdom), acelai numr apare ca 1,234.56. Dac se seteaz proprietatea Format n Design View, Microsoft Access folosete acest format pentru a afia datele n tabel. Dar dac se seteaz pentru cmpul Pret tipul Currency, formatul Currency pentru English (United Kingdom) i apoi se schimb aceast setare din Regional Settings la English (United States), datele deja introduse nu se modific ci rmn pe formatul 1,234.56 ca i cum acest format ar fi fost definit de utilizator. 3. Dac se dorete formatarea de ctre utilizator fr a se folosi formatele predefinite atunci se poate folosi unul din simbolurile urmtoare pentru orice tip de date: Se pot amesteca simbolurile de formatare de la tipurile de date Number i Currency cu simbolurile de formatare de la Date/Time, Yes/No, sau Text i Memo. Proprietatea Format are prioritate fa de proprietatea Input Mask la afiarea informaiilor coninute de cmpul pentru care sunt definite aceste proprieti, Input Mask fiind ignorat. Datele sunt afiate conform specificaiilor din Format i nu din Input Mask. Valoarea implicit Proprietatea Valoare Implicit (Default Value) se poate folosi pentru a specifica o valoare ce va fi n mod automat introdus atunci cnd se adaug o nou nregistrare n tabel. Astfel, dac majoritatea furnizorilor sunt din Bucureti, atunci cmpul Ora pentru tabela de Furnizori poate fi setat ca avnd Default Value de Bucureti. Se poate accepta aceast valoare sau se poate suprascrie cu o nou valoare. Default Value se poate seta pentru un cmp n Design View sau pentru un control pe form/raport. n majoritatea cazurilor se va dori ca aceast proprietate s fie setat n Design View n tabela ce conine cmpul respectiv, din moment ce aceasta va
fi aplicat controalelor bazate pe acel cmp (att timp ct controalele au fost create dup setarea acestei proprieti n Design View al tabelei). Dac un control nu este legat de un cmp dintr-o tabel atunci aceast proprietate trebuie setat n form/raport. Observaii : 1. Setarea proprietii Default Value nu are efect asupra datelor deja existente. Oricum se poate nlocui valoarea curent a unui cmp cu valoarea implicit prin apsarea CTRL+ALT+SPACEBAR. Dac se definete o valoare implicit pentru un cmp de tip Yes/No ntr-o baz de date care va fi utilizat internaional, se recomand a fi introdus un semn egal naintea valorii i Microsoft Access va afia valoarea n limba local (d.e. se introduce =Yes dac se dorete ca n Germania s fie afiat Ja). Regula de validare Regula de Validare (Validation Rule) se poate folosi pentru a specifica cerinele pentru datele introduse ntr-o nregistrare, cmp sau control (pe o form/raport). Este folosit mpreun cu Textul de Validare. Atunci cnd datele introduse ncalc Regula de Validare, se poate folosi Textul de Validare pentru a specifica mesajul afiat utilizatorului. Regulile de validare sunt aplicate : pentru cmp atunci cnd se editeaz datele dup ce focusul prsete cmpul pentru nregistrri atunci cnd v micai pe alt nregistrare. Observaii : 1. Aceste proprieti nu se aplic n cazul controalelor de tip check box, buton option sau buton toggle, atunci cnd ele sunt ntr-un grup option. Ele se aplic numai grupului option nsui [pentru forme]. 2. Setarea se realizeaz introducnd o expresie pentru Regula de Validare; lungimea maxim este de 2048 de caractere. 3. Regula de Validare nu poate conine orice expresie. De asemenea, pentru un cmp sau pentru o nregistrare nu se pot folosi : funcii definite de utilizator funcia de CurrentUser sau Eval, sau referine la forme, tabele sau interogri. n plus pentru cmpuri Regula de Validare nu poate conine referiri la alte cmpuri din tabel. 4. Microsoft Acces valideaz automat datele introduse n funcie de tipul de date al cmpului. Astfel, Microsoft Access nu permite introducerea unui text ntr-un cmp numeric in plus, regulile de validare mai specific i un mod de validare suplimentar fa de simpla verificare a tipului de date introdus. Regula de validare Regula de Validare (Validation Rule) se poate folosi pentru a specifica cerinele pentru datele introduse ntr-o nregistrare, cmp sau control (pe o form/raport). Este folosit mpreun cu Textul de Validare. Atunci cnd datele introduse ncalc Regula de Validare, se poate folosi Textul de Validare pentru a specifica mesajul afiat utilizatorului. Regulile de validare sunt aplicate : pentru cmp atunci cnd se editeaz datele dup ce focusul prsete cmpul pentru nregistrri atunci cnd v micai pe alt nregistrare. Observaii :
1. Aceste proprieti nu se aplic n cazul controalelor de tip check box, buton option sau buton toggle, atunci cnd ele sunt ntr-un grup option. Ele se aplic numai grupului option nsui [pentru forme]. 2. Setarea se realizeaz introducnd o expresie pentru Regula de Validare; lungimea maxim este de 2048 de caractere. 3. Regula de Validare nu poate conine orice expresie. De asemenea, pentru un cmp sau pentru o nregistrare nu se pot folosi : funcii definite de utilizator funcia de CurrentUser sau Eval, sau referine la forme, tabele sau interogri. n plus pentru cmpuri Regula de Validare nu poate conine referiri la alte cmpuri din tabel. 4. Microsoft Acces valideaz automat datele introduse n funcie de tipul de date al cmpului. Astfel, Microsoft Access nu permite introducerea unui text ntr-un cmp numeric in plus, regulile de validare mai specific i un mod de validare suplimentar fa de simpla verificare a tipului de date introdus . Textul de validare Textul de Validare (Validation Text) se folosete mpreun cu Regula de Validare, acesta fiind mesajul care va fi afiat utilizatorului n momentul n care valoarea introdus n cmpul respectiv nu respect Regula de Validare. Lungimea maxim pentru Textul de Validare este de 255 de caractere. Setarea se realizeaz introducnd o expresie pentru Regula de Validare i un text pentru Textul de Validare. Indexarea Proprietatea de Indexare (Indexed) se folosete pentru a crea pentru a seta un index ntr-o tabel. Un index este o caracteristic a Microsoft Access care mrete viteza interogrilor pe cmpurile indexate ca i sortrile sau operaiile de grupare. nregistrrile dintr-o baz de date nu sunt stocate ntr-o ordine particular. Prin setarea proprietii Indexare se schimb doar ordinea n care nregistrrile sunt scoase din baza de date, nu este afectat ordinea de stocare (ordinea fizic) a nregistrrilor. Descrierea setrii acestei proprieti: No Valoare implicit nu este index. Yes (Duplicates OK) este index i sunt permise duplicatele(aceleai valori pentru un acelai cmp pe nregistrri diferite). Yes (No Duplicates) este index i nu sunt permise duplicatele. Aceast proprietate se poate seta numai n modul Design View. De exemplu, dac ne intereaz anumite nume dintr-o tabel Studeni, putem crea un index pentru coloana NumeSt, pentru a regsi mai repede studenii cu un anmit nume de familie..
Unui cmp i se seteaz aceast proprietate numai dac ndeplinete una din urmtoarele condiii: tipul de date al cmpului este Text, Number, Currency sau Date/Time se anticipeaz cutri pentru valorile stocate n acest cmp se anticipeaz sortri dup valorile stocate n cmp se anticipeaz stocarea unor multe valori diferite n acest cmp. Dac multe din valorile din cmp sunt identice, atunci indexul nu va mri n mod semnificativ viteza interogrilor. Un index poate fi creat din mai multe cmpuri i atunci sortarea se face dup primul cmp din index, n cazul n care pe acest cmp s-au gsit duplicate atunci se realizeaz sortarea dup cel de-al doilea cmp i aa mai departe. O alt modalitate de a crea un index pentru o tabel se poate realiza prin apsarea butonului aferent din meniul Microsoft Access(aflat linga cheita.). La apsarea acestui buton se va deschide o fereastr n care este permis introducerea unui index prin numele lui, cmpul i modalitatea de sortare (Ascending, Descending), iar n partea de jos a ferestrei se pot seta proprietile indexului. Observaii 1. Se folosete proprietatea Indexare pentru a gsi sau sorta nregistrrile dintr-o tabel folosind un singur cmp. Valorile coninute de cmp pot s fie unice sau nu, d.e. se poate crea un index pentru cmp ID ale crui valori trebuie s fie unice (Yes (No Duplicates)) sau pentru un cmp Nume pentru care pot exista duplicate (Yes (Duplicates OK)) .
2. Nu se pot indexa cmpuri de tip Memo sau Hyperlink sau OLE. 3. Numrul cmpurilor dintr-un index poate fi orict de mare. Un index este creat atunci cnd se salveaz o tabel i este n mod automatic modificat atunci cnd se modific sau se adaug o nregistrare. Un index se poate aduga sau terge oricnd n Design View. 4. Dac o cheie primar pentru o tabel este format dintr-un singur cmp, Microsoft Access va seta automat proprietatea Indexare pentru acel cmp la Yes (No Duplicates) i Requiered. 5. Nu este obligatoriu s se seteze neaprat aceast proprietatea ntr-o tabel, dar atunci cnd se lucreaz cu tabele mari, neindexate, accesarea sau extragerea datelor din tabel poate dura foarte mult timp. Pe de alt parte crearea unui index format din prea multe cmpuri poate ncetini destul de mult operaii ca actualizare, adugare sau tergere. De exemplu creem un index cu numele NUME , pentru coloanele NumeSt i PrenumeSt. Pentru aceasta se deschide tabela Studenti se apas pe butonul Indexes din bara . Apare fereastra Indexes care conine deja cheia primara IdST. Se creaza un index cu numele NUME pentru numele si prenumele studentilor Se introduce numeSt in ferestra index in cimpul FieldName iar in cimpul Index Name se da numele Nume In linia urmatoare se lasa libera caseta IndexName si in Field Name se alege prenumeSt, ca in figura
Proprietile fiecrui indexse vd n partea de jos a ferestrei Indexes, cand se face clic n caseta cu numele indexului.(Nume i respectiv Primary Key). n Partea a_III_a , SQL, se prezintmodul de crearea a unui index , cu instruciunea DDL, CREATE INDEX.
Cheia primar
O cheie primar (Primary Key) reprezint un mod unic de identificare a unei nregistrari ntr-o tabel. O Cheie Primar este un index pentru care proprietatea Primary este setat pe Yes.
Puterea unui sistem de baze de date aa cum este Microsoft Access vine din abilitatea sa de a gsi i de a aduce rapid informaii stocate n tabele diferite folosind interogrile, formele i rapoartele. Pentru a putea realiza acest lucru, fiecare tabel ar trebui s includ un cmp sau o mulime de cmpuri care s identifice n mod unic fiecare nregistrare din tabel. Acest cmp sau aceste cmpuri poart denumirea de Cheia Primar a tabelei. Din momentul n care s-a hotrt care este cheia primar a unei tabele, Microsoft Access va preveni duplicatele sau valorile de Null introduse n cmpurile din cheia primar pentru a se asigura unicitatea acesteia. In Microsoft Access se pot defini trei tipuri de cheie primar: AutoNumber, cu un singur cmp i cu mai multe cmpuri. Cheia Primar de tip AutoNumber Un cmp de tip AutoNumber poate fi setat s introduc n mod automat un numr secvenial pe msur ce fiecare nregistrare este adugat ntr-o tabel. Cea mai uoar modalitate de creare a unei Chei Primare este de a desemna un astfel de cmp pe post de Cheie Primar. Posibilitatea acestei aciuni este descris mai sus. Cheia Primar cu un singur cmp Dac exist un cmp ce conine valori unice cum ar fi numere de Identificare (ID) se poate desemna acest cmp pe post de cheie primar. Dac n cmpul desemnat pe post de cheie primar sunt valori duplicate sau valori de Null, atunci Microsoft Access nu va permite aceasta aciune. Dac nu se pot elimina duplicatele din informaia stocat ntr-un cmp din tabel atunci se poate alege o cheie primar din celelalte dou tipuri. Cheie Primar cu mai multe cmpuri In situaiile n care nu este garantat unicitatea valorilor dintr-un cmp anume (pentru a se putea folosi cheia primar cu un singur cmp) se poate crea o cheie primar format din dou sau mai multe cmpuri. Microsoft Access creeaz n mod automat un index pentru cheia primar dintro tabel i o folosete pentru a gsi nregistrri. Indexul cheie primar cere s fie introdus o valoare n fiecare cmp ce o creeaz i nu permite duplicate. Ordinea cmpurilor dintr-o cheie primar format din mai multe cmpuri determin ordinea implicit de sortare a tabelei. Dac pentru o tabel se salveaz modificrile din Design View fr s posede o cheie primar atunci o fereastr de dialog este deschis pentru a ntreba dac se dorete sau nu crearea unei chei primare. Dac se apas Yes, atunci Microsoft Access introduce un cmp suplimentarde tip AutoNumber (setat pe Increment) ce va constitui cheia primar. Dac apsai No, atunci tabela este salvat fr cheie primar. Apsarea butonului Cancel permite ntoarcerea n fereastra Design View pentru a opera orice alte modificri dorite. O tabel fr Cheie Primar nu poate fi folosit pentru a defini relaii ntre tabele, iar operaiile de sortare i cutare sunt mult ncetinite. O Cheie Primar poate fi setat n trei modaliti: click-dreapta pe cmpul dorit sa fie cheie primar i din meniul afiat se apas Primary Key, sau se selecteaz cmpul respectiv i se apas butonul de Primary Key din meniul Design View, se deschide fereastra de definire a unui index, se creeaz un index cruia i se seteaz proprietatea Primary la Yes.
Gestiunea tabelelor
Se vor prezenta tehnici de: Editare a tabelelor(introducere, stergere ,adaugare de nregistrri)] Editarea cmpurilor(Modificarea, Cutarea i nlocuirea coninutului cmpurilor Copierea, redenumirea i tergerea tabelelor Importul Exportul Legarea
Editare a tabelelor Pentru a putea accesa informaiile stocate ntr-o tabel, aceasta trebuie n primul rnd deschis. Deschiderea unei tabele pentru accesarea informaiilor stocate n ea pentru introducere, modificare i tergere de nregistrri se face astfel : se selecteaz tabela n care utilizatorul dorete s efectueze operaiile respective i apoi se apas butonul Open. Introducerea nregistrrilor de date Se consider o tabel goal, respectiv tabela Catalog, n care se dorete introducerea de nregistrri. Se poate observa focusul poziionat pe primul cmp al primei nregistrri din tabel, respectiv NrCrt. Inregistrrile se pot introduce cmp cu cmp (ntre cmpuri micarea realizndu-se prin apsarea tastei Tab), iar cnd s-a completat i ultimul cmp dintr-o nregistrare se apas nc o dat tasta Tab pentru a se poziiona pe primul cmp al urmtoarei nregistrri. Pentru introducerea unei noi nregistrri, meniul Microsoft Access pune la dispoziia utilizatorului butonul Inregistrare Nou (New Record). Acest buton este disponibil fie n Toolbar-ul din Microsoft Access fie atunci cnd se apas click-dreapta pe o nregistrare existent deja n tabel. La apsarea acestui buton, focusul se poziioneaz pe primul cmp al primei nregistrri vide din tabel. Stergerea nregistrrilor de date Stergerea unei nregistrri se poate realiza dup selectarea acesteia prin una din posibilitile urmtoare: prin apsarea butonul Delete (Sterge) disponibil fie n Toolbar-ul din Microsoft Access, fie n meniul afiat prin click-dreapta pe nregistrarea pe care dorim s o tergem. prin apsarea tastei Delete de pe tastatura utilizatorului. La apsarea butonului Delete sau a tastei Delete, Microsoft Access deschide o fereastr de dialog n care utilizatorul este ntrebat dac este sigur de aciunea pe care urmeaz s o ntreprind deoarece nu exist posibilitatea de refacere a informaiei. La apsarea butonului Yes, tergerea este operat n tabel fr posibilitatea unei refaceri a informaiei terse. n cazul n care avem definite relaii ntre tabele ce implic i tabela curent, trebuie inut cont de aceasta n momentul n care se opereaz tergerea unei
nregistrri. Anumite nregistrri din tabele legate de aceasta pot rmne fr corespondent n momentul unei tergeri necontrolate. Dac de exemplu, exist o tabel de Furnizori i o tabel Produse n care se stocheaz produsele furnizate de acetia, Intre tabela Furnizori i tabela Produse se definete o relaie pentru a ti ce produse aparin unui anumit furnizor. In momentul n care se terge un furnizor din tabela Furnizori, trebuie neaparat terse i produsele corespunzatoare acestui furnizor din tabela Produse, pentru a nu avea n aceast tabel nregistrri fr corespondent n tabela Furnizori. Modificarea coninutului cmpurilor Pentru modificarea coninutului unui cmp este necesar poziionarea: direct, pe cmpul respectiv prin intermediul mouse-ului, prin selectarea unei nregistrri i apoi prin apsarea succesiv a tastei Tab, poziionarea pe cmpul dorit. Dup poziionare se introduc datele n cmpul selectat. Salvarea informaiilor n cmpul modificat se realizeaz la prsirea cmpului. Atunci cnd se ncearc prsirea unui cmp pentru completarea altuia (prin tasta Tab sau prin intermediul mouse-ului) dup introducerea/modificarea informaiilor existente n cmpul curent, Microsoft Access valideaz aceast informaie pentru a fi sigur c valoarea introdus este permis n acest cmp. Dac valoarea introdus nu este permis, Microsoft Access va da un mesaj de alert/eroare. Pentru a prsi cmpul, respectiv a salva informaia stocat n interiorul lui, trebuie modificat informaia ntr-o form ce poate fi acceptat sau trebuie s se revin la valoarea de dinainte de modificare. O valoare poate s nu fie permis ntr-un cmp din una din urmtoarele cauze: valoarea nu este compatibil cu tipul de date al cmpului: dac se ncearc introducerea unei valori ce nu corespunde tipului de date al cpului, Microsoft Access ncearc s realizeze o conversie a informaiilor introduse la tipul de date al cmpului. Oricum anumite informaii nu pot fi convertite la alte tipuri de date (d.e. nu se poate stoca un nume ntr-un cmp de tip Number). Informaia nu respecta proprietatea Regul de Validare a cmpului respectiv. Dac proprietatea Required este setat la Yes i s-a ncercat lsarea unui cmp necompletat. Tipurile de mesaje de alert/eroare date de Microsoft Access sunt prezentate n figura urmtoare: Observaie : dac proprietatea Textul de Validare ar fi fost completat atunci n locul mesajului standard dat de Microsoft Access ar fi aprut acest text. De asemenea, Microsoft Access valideaz informaiile introduse i la prsirea unei nregistrri pentru a se asigura c aceasta nu ncalc Regula de Validare pentru nregistrare. n plus, dac tabela are o cheie primar sau un index unic, la prsirea unei nregistrri Microsoft Access se asigur ca nregistrarea curent nu are aceeai valoare pentru cmpul/cmpurile implicate n cheia primar sau n index ca i o alt nregistrare existent n tabel. Dac o nregistrare nu poate fi salvat din aceste cauze, se introduce informaia permis sau se revine la informaia anterioar modificrilor aduse nregistrrii. Cutarea i nlocuirea coninutului cmpurilor Cutarea unui anume coninut al unui cmp se poate face prin intermediul opiunii Find (Gsete) ce este disponibil :
fie n Toolbar-ul din Microsoft Access fie n meniul Edit opiunea Find din meniul Microsoft Access. Inlocuirea unui anume coninut cu altul se poate face din meniul Edit opiunea Replace (Inlocuiete) din meniul Microsoft Access. Dac se dorete cutarea/nlocuirea unui anume ir de caractere n toat tabela, atunci: trebuie executat click-stnga n colul din stnga sus al tabelei deschise sau selectat opiunea SelectAllRecords din meniul Edit al meniului Microsoft Access i de abia apoi selectat opiunea Find sau opiunea Replace. In cazul n care se caut doar la nivelul unui anume cmp, atunci se poziioneaz cursorul pe coloana din tabel corespunztoare acelui cmp sau se selecteaz coloana executnd click-stnga pe capul de tabel n dreptul numelui cmpului dorit pentru cutare/nlocuire. Dup ce s-a efectuat selecia domeniului de cutare, se apas opiunea Find/ Replace i Microsoft Access deschide una din ferestrele pentru cutare/nlocuire. Cutarea/nlocuirea se vor efectua n interiorul cmpului NumePiesa pentru toate nregistrrile din tabel. Cutarea/nlocuirea propriu-zis se realizeaz n cadrul acestor ferestre n felul urmtor : Textul cutat se introduce n locaia Find What (ceea ce trebuie gsit). Textul pentru nlocuire (nlocuitor) se introduce n locaia Replace With (a se nlocui cu ). Se selecteaz opiunea Search (Caut) n care se stabilete direcia de cutare : All (Tot), Down (Jos) sau Up (Sus), valoarea implicit pentru Search este All. Se poate alege o cutare n care s se fac sau nu diferen ntre literele mici i mari, i.e. Match Case selectat sau neselectat. Se poate face o cutare parial sau total a coninutului unui cmp, i.e. Match Whole Field neselectat sau selectat. Dac se dorete cutarea n toat tabela se poate deselecta Search Only Current Field, opiune care nu apare dac nainte de apsarea opiunii Find/Replace s-ar fi selectat toat tabela pentru cutare/nlocuire. Butoanele din dreapta ferestrei de cutare/nlocuire au semnificaia urmtoare: Find Next (Caut Urmtorul) dac nu se dorete nlocuirea respectivei instane a textului cutat sau dac se dorete gsirea urmtoarei instane (n cazul cutrii simple) Replace (Inlocuiete) a se nlocui instana gsit cu textul de nlocuire Replace All (Inlocuiete Toate) a se nlocui toate instanele fr a se mai parcurge una cte una cum s-ar fi ntmplat dac s-ar fi apsat succesiv butonul Replace Close (Inchide) se renun la cutare/nlocuire. Cutarea/nlocuirea continutului cmpurilor dintr-o tabel este foarte util atunci cnd se lucreaz cu tabele de dimensiuni foarte mari, n care este stocat o cantitate mare de informaie i coninutul anumitor cmpuri necesit o prelucrare identic sau similar.
Importul de informaii creeaz o copie a acestora ntr-o tabel nou n baza de date a utilizatorului; tabela sau fiierul surs nu sunt afectate n timpul acestei operaii. Atunci cnd se import informaii, acestea nu pot fi adugate la o baz de date existent, cu excepia cazului n care se import foi tabelare sau fiiere text. Oricum din momentul n care o tabel s-a importat, se poate crea orice Append Query pentru a aduga informaiile din aceasta la o alt tabel. De asemenea, pot fi importate i alte obiecte dect tabele, cum ar fi forme sau rapoarte, dintr-o alt baz de date Microsoft Access. Pentru automatizarea acestei operaii poate fi folosit codul de Visual Basic. Pentru a importa tabele dintr-o alt baz de date Microsoft Access sunt necesari urmtorii pai : 1. Se deschide o baz de date i se apas butonul Import. 2. La apsarea acestui buton se deschide o fereastr de dialog n care sunt cerute urmtoarele informaii : Look in directorul din care se ia baza de date cutat File name numele fiierului Files of type - tipul fiierului, n acest caz trebuie s fie Microsoft Access Text or Property i Last Modified Advanced, Find, New Search butoane de cutare a fiierelor de tipul selectat mai sus. 3. Obligatoriu este numele fiierului dup care se apas Import pentru continuare sau Cancel pentru renunare. 4. La apsarea butonul Import se deschide o fereastr de tip Database cu titlul Import Objects, din care exist posibilitatea selectrii mai multor obiecte (tabele, interogri, forme sau rapoarte) pentru o aciune de importare. 5. Se selecteaz obiectele dorite i se apas butonul Ok. 6. Dac se dorete importarea numai a definiiilor unei tabele fr informaiilr stocate n aceasta atunci se merge pe butonul Options din dreapta ferestrei i se selecteaz opiunea dorit pentru importare din seciunea Import Tables. Seciunea Import Tables modalitatea de importare a tabelelor: Definiton and Data definiie i date Definition Only - numai definiie. Tot aici exist seciunea Import, obiectele ce se doresc importate n plus: Relationshsips Relaii Menus and Toolbars meniuri i toolbar-uri Import/Export Specs Import/Export specificaii Se pot importa meniuri i toolbar-uri dintr-o baz de date Access. Microsoft Access nu le va importa dac au acelai nume ca unul din baza de date n care se face importul o redenumire este necesar nainte de a se face importul. Seciunea Import Queries prezint modalitatea de import a interogrilor: As Queries sub form de interogri As Tables sub form de tabele La apsarea butonului Ok obiectele selectate pentru importare vor aprea n baza de date curent, cea din care s-a operat Import. Exportul Operaia Export (Export) a informaiilor dintr-o tabel sau interogare se poate face n diferite formate. Aceast operaie se poate realiza din baza de date pe care o folosii ntr-o alt baz de date Microsoft Access. Aceast operaie are n mod efectiv semnificaia copierii obiectelor din baza de date curent n cealalt.
De asemenea, pot fi exportate tabele, interogri, forme sau rapoarte n fiiere HTM, se pot interschimba informaii ntre Microsoft Access i Microsoft Word sau Excel n cteva modaliti. Operaia de export ntr-o alt baz de date Microsoft Access se realizeaz n urmtorii pai: 1.Se selecteaz tabela ce trebuie exportat i apoi din meniul File se apas opiunea Save as/Export. Se selecteaz opiunea To an External File or Database (Intr-un Fiier sau Baz de Date Extern) i apoi butonul Ok. Dac se dorete renunarea se apas butonul Cancel. La apsarea butonului Ok, se deschide o fereastr de dialog pentru selectarea bazei de date n care se export: este selectat baza de date n care se efectueaz exportul i se apas Ok. In acest moment se deschide fereastra pentru stabilirea condiiilor de export. In aceast fereastr se cer urmtoarele : Export Numetabela to - Numele sub care se efectueaz exportul Export Tables Tipul de export Definition and Data Definiie i informaii Definition Only numai Definiia Prin apsarea butonului Ok se execut operaia, iar prin Cancel se poate renuna la aceasta. Observaie: aceast operaie, Export, se poate realiza pentru un singur element la un moment dat: o tabel, o interogare etc. Dac se dorete exportul mai multor elemente, o operaie mai eficienta consta n intrarea n baza de date n care se dorete efectuarea exportului i efectuarea n acel loc a operaiei de Import. Legarea Operaia de legare (link) se realizeaz prin apsarea butonului Leag tabele (Link Tables) din acelai meniu cu butonul Import. Se pot lega aceleai tipuri de fiiere care sunt posibile i la operaia Import Tabelele i listele HTML se pot lega att timp ct ele rezid pe calculatorul local, pe un server de reea sau pe un server Internet. Legarea tabelelor de informaii d posibilitatea citirii i n majoritatea cazurilor modificrii datelor din sursele externe de informaii fr a mai fi nevoie de operaia de importare. Formatul sursei externe nu este alterat ceea ce permite continuarea utilizrii fiierului modificat cu programul care l-a creat , dar se pot aduga, terge sau edita informaiile din acest fiier folosind Microsoft Access. Paii pentru legarea unei tabele sunt similari celor de la punctul 3.3.1. Microsoft Access folosete icon-uri diferite pentru tabelele legate i pentru tabelele existente n baza de date. Dac o tabel legat se terge, atunci se terge i legtura cu sursa sa, nu ns i fiierul extern care a fost legat. Observaii: 1. Dac se import o tabel ce a fost deja legat, Microsoft Access nu realizeaz importul, n schimb leag tabela cu sursa sa de informaie (i.e. copiaz informaia de legare) 2. Dac baza de date ce se dorete importat sau legat este protejat prin intermediul unei parole, atunci aceast parol trebuie furnizat pentru a se putea continua Importul sau Legarea. Legarea de tabele din acest tip de baz de date poate avea consecine neprevzute.
3. Dac se leag dou tabele din aceeai baz de date Microsoft Access, orice relaie ce fusese stabilit ntre acestea rmne valabil.
OPERATORII ARITMETICI (+ - * / )
Operatorul + Acest operator este folosit pentru efectuarea unei adunri. Sintax : Rezultat = expresie1+expresie2 Observaie: Atunci cnd se folosete acest operator, nu se tie a priori ce operaie se efectueaz: de adunare sau de concatenare. Din acest punct de vedere sunt respectate urmtoarele reguli : Dac ambii operanzi sunt valori numerice atunci operaia efectuata este adunarea Dac ambii operanzi sunt iruri de caractere atunci operaia efectuat este concatenarea Dac un operand este valoare numeric i celalalt un ir de caractere atunci apare o eroare de tipul Type Mismatch (Nepotrivire de tip). Operatorul Acest operator este folosit pentru a efectua diferena ntre dou valori numerice sau pentru a indica valoarea negativ a unei expresii numerice. Sintax 1: Rezultat = numr1 numr2 Sintax 2: numr Observaie: In sintaxa 1 operatorul este operatorul aritmetic de scdere folosit pentru a calcula diferena ntre dou numere, iar n sintaxa 2 operatorul este folosit ca un operator unar de negare pentru a indica valoarea negativ a unei expresii. Operatorul *
Acest operator este folosit pentru nmulirea a dou numere. Sintax: Rezultat=numr1*numr2 Operatorul / Acest operator este definit pentru a efectua mprirea a dou numere. Sintax: Rezultat = numr1/numr2 Tipul de date al rezultatului este de obicei Double. Observaii: 1. Pentru toi operatorii prezentai, dac unul din operanzi are valoarea Null atunci i rezultatul va avea tot valoarea Null. 2. Tipul de date al rezultatului este de obicei acela al expresiei cu tipul cu precizia cea mai mare. Ordinea tipurilor din punct de vedere al preciziei este urmtoarea: Byte, Integer, Long, Single, Double, Currency, i Decimal. Calculele cu data i ora (+ -) Variabilele de tip dat/or sunt de tipul Date. Pentru operatorul + : o valoare de tip Date adunat cu o valoare de orice tip are ca rezultat ntodeauna o valoare de tip Date. Pentru operatorul : Rezultatul diferenei dintre dou valori de tip Date este ntotdeauna de tip Double. Rezultatul diferenei dintre o valoare de tip Date i o valoare de orice alt tip este ntotdeauna de tip Date. Operatorii de comparare: = < > <= >= <> Aceti operatori sunt folosii pentru a compara expresii. Sintax: Rezultat = expresie1 opComparatie expresie2 Between ...AND..(ntre ... i...) Acest operator determin dac valoarea unei expresii intr n intervalul dintre cele dou valori specificate. Sintax: expresie [Not] Between valoare1 And valoare2 Intre Between Si And Dac valoarea expresiei este ntre valoare1 i valoare2 atunci operatorul ntoarce adevrat, altfel ntoarce fals. Se poate include i operatorul logic Not pentru a evalua opusul condiiei (n acest caz ntoarce adevrat dac expresia este n afara intervalului celor dou valori i fals dac este ntre cele dou valori). Este Null / Nu Este Null Funcia Este Null (IsNull) ntoarce o valoare boolean care indic dac o expresie nu conine date valide (Null). Sintax: IsNull(expresie) Argumentul cerut este un Variant ce conine o expresie numeric sau o expresie de tip ir de caractere. Observaii:
1. IsNull ntoarce True dac expresia este Null, altfel ntoarce False. Dac expresia const din mai mult de o singur variabil, atunci apariia lui Null n orice variabil constituent foreaz apariia rezultatului True. 2. Valoarea Atunci Dac expresia este: Null indic dac rezultatul este: Variantul nu conine date Aderat Fals valide. Null nu este Fals Adevrat acelai lucru cu Empty, care indic dac o Null Null variabil nu a fost nc iniializat. Nu este de asemenea acelai lucru cu un ir de lungime zero (), la care se face referin cteodat ca la un ir nul. 3. Se recomand utilizarea acestei funcii pentru a determina dac expresia conine o valoare Null. Nu se pot realiza comparaii de tipul : If Var = Null sau If Var <> Null deoarece acestea vor avea ntotdeauna valoarea False n caz ca Var conine valoarea Null. Aceasta se ntmpl pentru c o expresie coninnd Null este ea nsi Null i deci False 4. IsNull se folosete i n crearea unei interogri . In tabelul de design al unei interogri n celula Criteria, pentru un anume cmp, se poate introduce isNull sau is Not Null, pentru a selecta numai acele nregistrri ce au valoarea cmpului Null , respectiv diferit de Null. Operatorii logici AND (Si logic) Acest operator este folosit pentru a efectua o operaie de conjuncielogic a dou expresii. Sintax: Rezultat = Expresie1 And Expresie2 In tabelul urmtor este prezentat rezultatul acestui operator n funcie de valorile expresiilor: OR(Sau logic) Acest operator este folosit pentru a efectua o operaie de disjuncie logic a dou expresii. Sintax: Rezultat = Expresie1 Or Expresie2 In tabelul urmtor este prezentat rezultatul acestui operator n funcie de valorile expresiilor: NOT(Nu logic) Acest operator realizeaz negarea logic a unei expresii. Sintax: Rezultat = Not Expresie In tabelul urmtor este prezentat rezultatul acestui operator n funcie de valoarea expresiei: Concatenrile Operatorii de concatenare sunt & i +. Operatorul & se folosete pentru forarea concatenrii sub form de iruri de caractere a dou expresii. Sintax: Rezultat = expresie1 & expresie2
Observaii: a. Dac o expresie nu este de tipul String (ir de caractere)atunci aceasta este convertit la un variant String. Tipul de date al rezultatului este String doar dac ambii operanzi sunt de tipul String, altfel rezultatul este un variant String. b. Dac ambele expresii sunt Null atunci i rezultatul are aceeai valoare. c. Totui dac doar una dintre expresii are valoarea Null atunci aceasta este tratat ca un ir de caractere de lungime 0 i se efectueaz o concatenare ntre expresie i irul . Orice expresie care este goal este tratat ca un ir de caractere de lungime 0. Funcii Date(), Now() Funcia Date() Dat ntoarce un variant de tip Date ce conine data sistemului. Funcia Now() Acum ntoarce un variant de tip Date ce conine data i timpul exact n conformitate cu data i ora sistemului calculatorului folosit de utilizator. Sum(), Avg() Funia Sum() ntoarce suma unei mulimi de valori coninute ntr-un cmp specificat sau ntr-o interogare. Sintax: Sum(expr) unde expr reprezint un ir de caractere de identificare a cmpului ce conine datele numerice ce vor fi adunate sau o expresie ce efectueaz un calcul folosind informaiile stocate n acel cmp. Operanzii n expresie pot include numele unui cmp de tabel, o constant sau o funcie. Funcia Avg() calculeaz media aritmetic a unui set de valori coninute ntrun cmp specificat ntr-o interogare. Sintax: Avg(expr) unde expr reprezint o expresie tip ir de caractere ce identific acel cmp ce conine valorile numerice ce trebuiesc mediate sau o expresie ce efectueaz un calcul folosind datele din acel cmp. Operanzii din Expr pot include numele cmpului din tabel, o constant sau o funcie (ce poate fi i definit de utilizator). Observaii: 1. media calculat cu aceast funcie este o medie aritmetic (suma valorilor mprite la numrul valorilor). S-ar putea folosi Avg de exemplu pentru a calcula costul mediu. 2. Aceast funcie nu include cmpuri de valoare Null n calcul. 3. Funcia se poate folosi ntr-o interogare. Min(), Max() Aceste dou funcii returneaz valoarea minim i maxim a valorilor coninute ntr-un cmp specificat sau ntr-o interogare. Sintax: Min(expresie) Max(expresie) Expresia reprezint un ir de caractere de identificare a cmpului ce conine datele ce vor fi evaluate sau o expresie ce efectueaz un calcula, sau o funcie.
Observaii: 1. Se pot folosi aceste dou funcii pentru a determina cea mai mic i cea mai mare valoare dintr-un cmp calculat sau dintr-o grupare. 2. Funciile se pot folosi de asemenea ntr-o expresie sau ntr-o interogare. Formatarea datelor . Sunt prezentate unele formatri predefinite, precum i posibilitatea de creare de formaari definite de utilizator. Selectarea unor formate predefinite Formate predefinite pentru tipul Number Formatele predefinite n acest caz sunt enumerate n cele ce urmeaz: General Number Afieaz numrul fr separatorul de mie Currency Afieaz numrul cu separator de mie, dac se poate i dou cifre dup separatorul zecimal. Fixed Afieaz cel puin o cifr n stnga i dou cifre n dreapta separatorului zecimal. Standard Afieaz numrul cu separator de mie i cel puin o cif n stnga i dou cifre n dreapta separatorului zecimal. Percent Afieaz numrul multiplicat cu 100 cu un semn de procent (%) adugat n dreapta ntotdeauna se afieaz dou cifre dup separatorul zecimal. Scientific Folosete notaia tiinific standard Yes/No Afieaz No dac numrul este 0 i Yes altfel. True/False Afieaz False dac numrul este 0 i True altfel. On/Off Afieaz Off dac numrul este 0 i On altfel. Formate predefinite pentru tipul Date/Time General Date Afieaz o dat sau un timp. Pentru numere reale, afieaz o dat sau un timp.: Dac nu exist o parte fracionar, atunci se afieaz numai o dat. Dac nu exist o parte ntreag atunci afieaz numai un timp. Long Date Afieaz o dat n conformitate cu formatul lung de dat al sistemului. Medium Date Afieaz o dat folosind formatul mediu de dat al versiunii de limbaj al aplicaiei gazd. Short Date Afieaz o dat folosind formatul scurt de dat al sistemului. Long Time Afieaz un timp n conformitate cu formatul lung de timp al sistemului, include orele, minutele i secundele.
Medium Time Afieaz timpul n formatul 12 ore folosind orele i minutele i AM/PM. Short Time Afieaz un timp folosind formatul 24 de ore. Precizarea zecimalelor Aceast proprietate se poate folosi pentru a specifica numrul de zecimale afiate ntr-un cmp de tip Number sau Currency i poate fi setat din Design View. Astfel aceast proprietate este preluat de cmp atat n cazul unei interogri ct i n controalele create ntr-o form bazat pe acest cmp, atta timp ct aceste controale au fost create dup setarea acestei proprieti. Uneori exist posibilitatea s se doreasc setarea acestei proprieti diferit pentru o form fa de Proprietatea DecimalPlaces (Locurile pentru zecimale) furnizeaz o setare implicit Auto, i opiunea de a specifica de la 0 pn la 15 zecimale. Atunci cnd este setat pe Auto, cmpurile cu format Currency, Fixed, Standard, Percent i Scientific afieaz dou zecimale. Aceast proprietate nu are efect dac proprietatea Format nu este setat. Observaie: Proprietatea Locuri pentru zecimale afecteaz numrul de zecimale ce sunt afiate i nu numrul de zecimale ce se stocheaz. Astfel, dac se seteaz aceast proprietate pentru un cmp de tip Number care are proprietatea FieldSize setat la Integer, atunci se va afia un numr cu dou zecimale, dar datorit faptului c numarul este ntreg atunci locurile celor dou zecimale vor fi completate cu zerouri. Pentru a modifica numrul de zecimale care sunt stocate efectiv n cmp trebuie modificat proprietatea FieldSize. Crearea formatelor de ctre utilizator Locaii pentru numere ( 0 # , . ) Pentru crearea formatelor definite de utilizator sunt prezentate n continuare caracterele ce pot fi folosite n acest scop. Nici unul Afieaz un numr fr formatare (0)-Inlocuitor de cifr Afieaz o cifr sau un 0. Dac expresia are o cifr n poziia n care apare (0) n irul de formatare o afieaz, altfel afieaz 0 n acea poziie. (#) Inlocuitor de cifr. Afieaz o cifr sau nimic. Dac expresia are o cifr n poziia n care acest caracter apare atunci o afieaz, altfel, nu afieaz nimic. Acest caracter funcioneaz la fel ca i (0) cu excepia faptului c nu se afieaz zerouri la nceputul i sfritul numrului dac exist mai puine cifre n numr dect caractere (#). (.) Reprezint separatorul zecimal. In anumite formate locale este folosit virgula pe post de separator zecimal. (%) Caracterul de procentaj Expresia este multiplicat cu 100. Acest caracter este inserat n poziia n care apare n irul de formatare. (,)
Separatorul de mie. In anumite formate locale, se folosete punctul pe post de separator de mie. Acest caracter separ miile de sute ntr-un numr care are 4 sau mai multe locuri la stnga separatorului zecimal. (:) Acesta este separatorul de timp. In anumite formate locale se pot folosi alte caratere pentru acest separator. Acest caracter separ orele, minutele i secundele atunci cnd se afieaz valori de timp. Caracterul folosit efectiv depinde de setrile sistemului. (/) Separatorul de dat. In anumite formate locale, pot fi folosite alte caractere pentru a reprezenta acest separator. Acest caracter separ ziua, luna i anul atunci cnd se afieaz valori de tip dat. Caracterul folosit efectiv depinde de setrile sistemului. (E- E+ e- e+) Formatul tiinific. Dac expresia de formatare conine cel puin un caracter pentru cifr (0 sau #) n stnga lui E-, E+, e- sau e+, numrul este afisat ntr-un format tiinific i E sau e sunt inserate ntre numr i exponentul su. Numrul de caractere pentru cifre de la dreapta determin numrul de cifre din exponent. Se folosesc E- sau e- pentru a plasa un semn lng valorile negative ale exponentului i E+ sau e+ s afieze i semnul+ lng valorile pozitive ale exponentului. -+$() Afieaz un caracter literal. Pentru a afia un carater altul dect cele listate, atunci trebuie precedat de backslash (\) sau trebuie nchis ntre ghilimele (.). (\) Afieaz urmtorul caracter n formatul ir de caractere. Pentru a afia un caracter literal ce are o semnificaie special pe post de caracter literal atunci trebuie precedat de un astfel de caracter. (\) nu este afiat. Are acelai efect ca i cum am fi nchis caracterul literal ntre ghilimele. Pentru a se afia un backslash se vor introduce dou astfel de semne n expresia de formatare (\\). (ABC) Afieaz irul de caractere din interiorul ghilimelelor. Data i ora In continuare este prezentat lista caracterelor folosite pentru afiarea tipurilor Date/Time: (:) Acesta este separatorul de timp. In anumite formate locale se pot folosi alte caratere pentru acest separator. Acest caracter separ orele, minutele i secundele atunci cnd se afieaz valori de timp. Caracterul folosit efectiv depinde de setrile sistemului. (/) Separatorul de dat. In anumite formate locale, pot fi folosite alte caractere pentru a reprezenta acest separator. Acest caracter separ ziua, luna i anul atunci cnd se afieaz valori de tip dat. Caracterul folosit efectiv depinde de setrile sistemului. c - Afieaz data ca ddddd i timpul ca ttttt, n aceast ordine. d - Afieaz ziua ca un numr fr vreun zero la nceput (ntre 1 i 31) dd- Afieaz ziua ca un numr cu un zero la nceput (ntre 01 i 31) ddd- Afieaz ziua ca o abreviere (Sun Sat) dddd - Afieaz ziua ca un nume ntreg (Sunday Saturday)
ddddd-Afieaz data ca o dat complet (incluznd ziua, luna i anul), t t t t t-Afieaz timpul ca un timp complet (incluznd ora, minutul i secunda), formatate folosind separatorul de timp al sistemului. Un zero la neput este afiat dac valoarea afiat este mai mic dect 10:00 AM sau PM. AM/PM; am/pm; A/P;a/p Folosete ceasul cu 12 ore i afieaz AM/A sau PM/P n funcie de valoarea orei. Text descriptiv Pentru formatarea irurilor de caractere se pot folosi oricare din caracterele urmtoare pentru a formata o expresie: @ Tine locul unui caracter. Afieaz un caracter sau un spaiu. Dac irul are un caracter n poziia n care expresia de formatare are un astfel de caracter atunci l afieaz, altfel afieaz un spaiu. & Tine locul unui caracter. Afieaz un caracter sua nimic. < Foreaz folosirea literelor mici. Afieaz toate caracterele cu litere mici. > Foreaz folosirea literelor mari. Afieaz toate caracterele cu litere mari. ! Foreaz completarea nlouitorilor dela stnga la dreapta; de obicei se completeaz de la dreapta la stnga.
Crearea unei legturi implicite Pentru crearea unei legturi implicite sunt necesari a fi parcuri urmtorii pai: 1. Se poziioneaz utilizatorul pe fereastra Database. Se poate apsa tasta F11 pentru a se poziionaza pe fereastra Database din orice alt fereastr. 2. Se apas butonul Relationships (Relaii) din Toolbar pentru a deschide fereastra Relationships. 3. La deschiderea acestei ferestre, dac nu exist relaii ntre tabele se va deschide fereastra Show Table (v. punctul 4.1.). Aceast fereastr mai poate fi deschis i n cazul n care exist deja relaii ntre tabele dar s-a mai adugat o tabel nou i se dorete i legarea acesteia. Se selecteaz tabelele/tabela ce se doresc adugate n fereastra Relationships, se pas Add i apoi Close. 4. Dup ce tabelele au fost adugate n fereastra Relationships, se creeaz o legtur n aceeai modalitate ca cea dintr-o interogare. Atunci cnd s-a creat legtura, fereastra de definire a legturii implicite se deschide. In aceast fereastr se afieaz : Numele cmpurilor implicate n relaie (partea de sus a ferestrei) se pot modifica dac nu sunt corecte. Tipul relaiei Relationship Type, n acest caz One-To-Many. i se poate stabili : dac se foreaz sau nu integritatea referenial Enforce Refrential Integrity i modalitatea de extragere a datelor din aceste tabele Join Type. 5. Se apas Create pentru crearea relaiei sau Cancel pentru anularea aciunii. Observaii: 1. Butonul Join Type nu va fi activ dac tabelele sunt legate. Dac tabelele sunt de tip Microsoft Access atunci se poate deschide baza de date n care sunt stocate i se poate defini acolo Join Type. 2. Definirea unui Join Type pentru o relaie n fereastra Relationships nu afecteaz relaia n sine, ci va stabili modalitatea de extragere a datelor atunci cnd aceste tabele sunt inclus ntr-o interogare. Se poate redefini Join Type ntotdeauna atunci cnd se creeaz o interogare. Tipuri de relaii (relaia 1:1, relaia 1:n ) Intr-o relaie 1:1 (one-to-one una-la-una), fiecare nregistrare din tabela A are o singur nregistrare corespondent n tabela B i invers. Acest tip de relaie nu este comun., deoarece majoritatea informaiei ntr-o astfel de relaie ar fi ntr-o singur tabel. O relaie 1:1 s-ar putea folosi la mprirea unei tabele cu multe cmpuri n dou tabele cu mai puine cmpuri, pentru: A se izola o parte din informaii din motive de securitate A stoca informaii care se aplic numai unei submulimi din principala tabel. O relaie 1:n (one-to many una-la-mai-multe) este cel mai comun tip de relaie. Intr-o astfel de relaie, o nregistrare din tabela A poate avea mai multe nregistrri corelate n tabela B, dar o nregistrare din tabela B poate avea doar o singur nregistrare corespondent n tabela A. Intr-o relaie n:n (many-to-many mai-multe-la-mai-multe) o nregistrare din tabela A poate avea mai multe nregistrri corelate n tabela B, iar o nregistrare din
tabela B poate avea mai multe nregsitrri corelate din tabela A. Acest tip de relaie este posibil prin definirea unei a treia tabele (tabel de jonciune) a crei cheie primar const n dou cmpuri, chei din tabelele A i B. O relaie n:n reprezint de fapt dou relaii 1:n. Integritate referenial Integritatea referinial este un sistem de reguli folosit de Microsoft Acces pentru a se asigura c relaiile ntre tabele sunt valide i c nu se terg sau modic accidental datele n legtur. Integritatea referenial se poate seta atunci cnd toate condiiile urmtoare sunt ndeplinite : Cmpul n relaie din tabela principal este cheie primar sau are un index unic Cmpurile n relaie au acelai tip de date (cu dou excepii AutoNumber Number, Long Integer i AutoNumber, replication ID Number, replication ID). Ambele tabele aparin aceleiai baze de date Microsoft Access (dac tabelele sunt legate din alt baz de date de tip Microsoft Access atunci se deschide acea baz de date pentru forarea integritii refereniale). Atunci cnd integritatea referenial este setat sunt valabile urmtoarele reguli: Nu se poate introduce o valoare n cmpul n legtur fr ca aceast valoare s nu existe n tabela principal din relaie. Nu se poate terge o nregistrare dintr-o tabel principal dac nregistrrile corelate exist n tabela secundar. Nu se poate schimba valoarea unei chei primare n tabela principal, dac acea nregistrare are nregistrri corelate n tabela secundar. Dac se ncalc regulile de mai sus, Microsoft Access afieaz un mesaj i nu permite acea modificare. Aceste reguli pot fi nclcate dac se selecteaz n fereastra Relationships: Cascade Update Related Fields o schimbare a cheii primare se va face i n nregistrrile corelate i Cascade Delete Related Records dac se terge o nregistrare din tabela principal se vor terge i cele corelate. Proprietile de legare Din meniul afiat pentru o relaie, ntr-o interogare la apsarea butonului Join Properties (Proprieti de legare) se deschide o fereastr din care se pot selecta proprietile unei relaii. In fereastra Relationships, dup crearea unei relaii, se deschide fereastra din care, la apsarea butonului Join Type se poate selecta felul in care vor fi extrase datele din tabele. Pentru o relaie folosit ntr-o interogare, sau pentru o relaie definit n fereastra Relationships exist urmtoarele opiuni de includere a nregistrrilor n rezultatul interogrii: numai acele nregistrri n care cmpurile din legtur coincid (ID i IDFurnizor). toate nregistrrile din Furnizori i numai acele nregistrri din PreturiIntrare n care cmpurile din legtur coincid.
toate nregistrrile din PreturiIntrare i numai acele nregistrri n care cmpurile din legtur coincid. Legarea tabelelor n cadrul interogrii Puterea interogrilor const n capabilitatea de a aduce la un loc sau de a executa o (anumit) aciune asupra informaiilor din mai mult dect o tabel (v. exemplul de mai sus). Atunci cnd se adaug mai mult de o singur tabel ntr-o interogare, trebuie ca ntre listele de cmpuri s existe o legtur astfel nct Microsoft Access s tie cum s conecteze informaia. Dac tabelele dintr-o interogare nu sunt legate una de alta fie direct (n interogare), fie indirect (prin legtur implicit), Microsoft Access nu tie care nregistrri sunt asociate cu care i astfel afieaz toate combinaiile de nregistrri (produs cartezian) dintre cmpurile celor dou tabele. De aceea, dac fiecare tabel conine cel puin 20 nregistrri, rezultatul interogrii va conine 400 de nregistrri (20X20). De asemenea, durata de generare a interogrii va putea fi mai mare i va putea produce rezultate nesemnificative. Dac s-au creat nainte relaii ntre tabele n fereastra Relationships, Microsoft Access va afia n mod automat liniile de legtur pe msur ce tabelele sunt adugate n fereastra Design View a interogrii. Dac integritatea referenial este setat, Microsoft Access afieaz 1 de partea liniei de legtur one i simbolul de partea liniei de legtur corespunztoare prii many. Chiar dac nu existau relaii ntre tabele, Microsoft Access creeaz n mod automat o legtur n momentul adugrii a dou tabele, dac tabelele au fiecare un cmp cu acelai tip de date sau un tip compatibil i dac unul din cmpuri este cheie primar. In acest caz simbolurile pentru one i many nu sunt afiate, pentru c integritatea referenial nu este forat. In cazul n care Microsoft Access a adugat o legtur incorect din punctul de vedere al informaiei stocate atunci aceste legturi se terg i se creeaz cele corecte. Modalitatea de tergere a unei relaii este urmtoarea: Se selecteaz relaia Se apas click-dreapta i din meniul aprut se apas butonul Delete. Aceste relaii sunt create de exemplu prin click pe cmpul ID din Furnizori i apoi tras acest cmp peste cmpul IDFurnizor din tabela PreturiIntrare. Cteodat tabelele adugate n interogare nu includ toate cmpurile care pot fi de legtur ntre tabele. In aceast situaie trebuie adugate une sau mai multe tabele sau interogri n plus pentru a folosi numai pe post de legtur ntre tabelele necesare interogrii propriu-zise. Din momentul n care tabelele i interogrile sunt legate i s-au adugat cmpurile din ambele tabele/interogri n tabelul de design, legtura implicit foreaz interogarea s verifice valorile care coincid n cmpurile de legtur. Atunci cnd se gsesc interogarea combin cele dou nregistrri i le afieaz n conformitate cu tabelul de design ntr-o singur nregistrare. Dac nu se gasete nici o coniciden a cmpurilor de legtur atunci interogarea nu va ntoarce nici o nregistrare. Dac se dorete ca toate nregistrrile dintr-o tabel s fie afiate indiferent dac se gsete vreo legtur sau nu n cealalt tabel atunci aceasta se poate seta din fereastra de proprieti a legturii.
LECIA 5. Interogri
n aceast lecie se prezint tehnici pentru a crea i a concepe interogri. . Se dezvolt noiunile de : 1. Interogarea de selecie 2. Interogri parametrizate 3. Interogri de tip funcie (interogri de sumar, crosstab) 4. Interogri de aciune O interogare de selecie poate fi creat ntr-una din urmtoarele modaliti: Poziionare n fereastra Interogri (Queries) i apsare buton New. n meniul Microsoft Access, meniul Insert opiunea Query Din Toolbar-ul din Microsoft Access Dup ce s-a executat una din aceste modaliti, se va deschide fereastra n care se va alege varianta de creare a unei interogri. In continuare se va considera modalitatea Design View: se alege Design View i se apas butonul Ok, iar n cazul n care se dorete renunarea la aceast aciune se apas butonul Cancel Rezultatele unei interogri se obtin prin apsarea unuia din butoanele View sau Run(!) din Toolbar-ul din Microsoft Access
Se selecteaz unul sau mai multe cmpuri din tabela existent sau adugat i se adaug n tabelul din partea de jos a ferestrei. Pentru a selecta un singur cmp se execut click pe numele cmpului respectiv. Pentru a selecta un bloc de cmpuri se execut click pe primul cmp din bloc, se ine apsat tasta Shift i apoi se execut click pe ultimul cmp din blocul dorit. Pentru selecia mai multor cmpuri dar nesituate ntr-un bloc atunci se execut click pe fiecare dintre ele inndu-se apsat tot timpul tasta Ctrl. Pentru selecia tuturor cmpurilor se execut dublu-click pe bara de titlu a tabelei sau se execut un singur click pe asterix (*). Observaii: 1. Dup ce au fost selectate cmpurile dorite n interogare ele trebuiesc trase n tabelul din partea de jos a ferestrei. 2. Dac se adaug mai multe cmpuri n tabel, Microsoft Access poziioneaz fiecare cmp ntr-o coloan. Dac se adaug asterix n tabel atunci Microsoft Access pune numele tabelei i i adaug un punct i un asterix (d.e. Catalog.*). 3. In locul seleciei i adugrii se poate selecta direct n tabelul din partea de jos a ferestrei cmpul dorit n interogare din lista pus la dispoziie de Microsoft Access pe linia Field. 4. Folosirea asterixului ntr-o interogare are fa de selecia manual a tuturor cmpurilor avantajul c interogarea include automat toate cmpurile din tabela respectiv chiar i cele adugate dup crearea interogrii i le exclude pe cele terse dup crearea interogrii. Dac se folosete asterixul nu se pot folosi cmpuri din aceast tabel la sortare sau pentru criterii specifice dect dac aceste cmpuri sunt specificate explicit n tabel. Dac se dorete tastarea asterixului fr a-l mai selecta din tabela din partea de sus a ferestrei atunci trebuie specificat i numele tabelei n faa acestuia (d.e. Catalog.*). Ascunderea cmpurilor In interogare se pot folosi cmpuri doar pentru calcule sau pentru sortri fr ca fie necesar afiarea acestora n rezultatul interogrii. Cmpurile sunt folosite pentru rezultatul interogrii, dar ele sunt ascunse. In tabelul din partea de jos a ferestrei Interogare exist o linie numit Show (Arat) al crui check box poate fi selectat pentru afiarea cmpului respectiv n rezultatul interogrii sau poate fi neselectat pentru a nu se afia cmpul (i.e. ascunderea cmpului). Observaie: Atunci cnd se nchide o interogare, Microsoft Access mut toate cmpurile ascunse n partea cea mai din dreapta a tabelului de design. Sortarea interogrilor Inainte de a se efectua o sortare exist cteva considerente ce trebuiesc luate n considerare: sortrile sunt salvate odat cu tabela, interogarea sau forma. Dac se creeaz o form sau raport pe baza unei tabele sau a unei interogri ce are o cerere de sortare salvat atunci forma.raportul motenete aceast cerere de sortare. Microsoft Access va sorta pn la 255 de caractere, ntr-unul sau mai multe cmpuri, n rezultatele unei interogri. Rezultatul sortrii depinde de setarea de limbaj specificat n fereastra de dialog Options la momentul crerii bazei de date. Pentru a verifica sau
modifica aceast setare se deschide aceast fereastr din meniul Tools, butonul Options i se acceseaz prin apsarea Tab-ului General opiunea New Database Sort Order. Dac tabelul de design al interogrii conine elementul asterix (*) atunci nu se poate specifica o sortare dect dac se adaug explicit acele cmpuri pentru care se dorete realizarea sortrii. Pentru sortarea datelor i timpului, se utilizeaz ordinea cresctoare (Ascending) i cea descresctoare (Descending), i.e. de la mai trziu la mai devreme. Numerele stocate n cmpuri nenumerice sunt sortate ca irurile de caractere, nu ca valori numerice. Totui pentru a le sorta n ordine numeric toate irurile de tip text trebuie s fie de aceeai lungime, avnd numerele mai mici completate cu zerouri n fa: pentru ordonarea cresctoare a irului 1,2,11, 22 se va obine urmtorul rezultat : 1,11,2,22. Pentru a putea avea rezultatul conform unei sortri numerice irul acesta trebuie transformat n urmtorul: 01,02,11,22. Cea mai simpl cale pentru obinerea unei sortri corecte din punct de vedere numeric n cazul cmpurilor care stocheaz DOAR valori numerice va fi definirea tipului acelui cmp ntr-un tip de date numeric (Number sau Currency). Atunci cnd se sorteaz un cmp n ordine cresctoare, toate nregistrrile n care acel cmp este vid (conine valoarea Null) sunt poziionate la nceputul listei. Dac exist i nregistrri ce au cmpul cu iruri de lungime zero atunci acestea sunt poziionate imediat dup cele cu valoarea Null. Nu se pot sorta cmpurile de tip Memo sau Hyperlink. Paii pentru realizarea unei sortri sunt urmtorii : 1. Se deschide o interogare n Design View pentru o tabel. 2. Pentru o sortare dup mai multe cmpuri, n primul rnd se aranjeaz cmpurile n tabelul de design n ordinea n care se dorete executarea sortrii. Microsoft Access sorteaz din partea stnga n primul rnd i apoi nainteaz spre dreapta cu fiecare cmp. 3. In celula Sort a fiecrui cmp de sortare din tabelul de design se alege o opiune din cele prezente : Ascending, Descending sau [not sorted] aceasta fiind opiunea implicit. 4. Pentru vizualizarea rezultatelor se apas butonul View sau Run (!)din Toolbar. Criteriul de selecie Criteriile de selecie (Criteria) sunt restricii plasate ntr-o interogare pentru a identifica acele nregistrri specifice cu care se dorete a se lucra. Astfel, n locul vizualizrii tuturor furnizorilor din tabela Furnizori se poate dori doar vizualizarea acelora din Bucureti. Pentru a realiza aceasta se specific un criteriu de selecie care limiteaz rezultatele numai la nregistrrile care au valoarea cmpului Ora egal cu Bucureti. Pentru a specifica un criteriu de selecie pentru un anumit cmp n tabelul de design se introduce o expresie n celula Criteria (Criteriu) a acelui cmp. Expresia n exemplul de mai sus ar fi Bucuresti. Se pot utiliza i expresii mai complicate cum ar fi Between 100 and 200 (Intre 100 i 200), etc.
Se pot specifica mai multe criterii de selecie fie pentru un singur cmp fie pentru mai multe, Microsoft Access combinndu-le folosind fie operatorul And (Si) fie operatorul Or (Sau). Dac expresiile pentru criteriile de selecie sunt pe aceeai linie n tabelul de design atunci Microsoft Access folosete operatorul And, adic vor fi returnate numai nregistrrile ce ndeplinesc toate criteriile. Dac expresiile sunt n linii diferite ale tabelului de deisgn atunci Microsoft Access folosete operatorul Or, adic vor fi returnate acele nregistrri ce ndeplinesc cel puin unul dintre criteriile de selecie. Se pot aduga criterii de selecie i pentru afectarea rezultatelor unor calcule. Prin adugarea unui astfel de criteriu se pot limita: grupurile pe care se efectueaz calculele, nregistrrile ce particip la calcule sau chiar afiarea rezultatelor dup efectuarea calculelor. Paii pentru introducerea unui criteriu de selecie sunt urmtorii: 1. se deschide o interogare pentru o tabel n Design View 2. se execut click pe prima celul Criteria a cmpului pe care se dorete aplicarea acelui criteriu (d.e. NumePiesa) 3. se introduce o expresie prin tastare sau utiliznd fereastra Expression Builder (Constructor de expresii). Expression Builder se deschide prin executarea unui click-dreapta pe celula Criteria i apoi prin apsarea opiunii Build (Construiete). 4. dup introducerea unui criteriu se apas unul din butoanele View sau Run pentru vizualizarea rezultatelor. Valoarea maxim sau minim O interogare poate afia numai valoarea maxim a unui cmp dintr-un grup de nregistrri. Grupul poate fi reprezentat din ntreaga tabel sau numai dintr-un grup selectat printr-un criteriu de selecie. Valoarea maxim se poate calcula folosind opiunea Max (Maxim) din celula Totals (Totaluri) a cmpului pe care se dorete gsirea valorii maxime. In mod similar se poate gsi valoarea minim prin intermediul opiunii Min (Minim) din aceeai celula Totals. Dac celula Totals nu este disponibil n tabelul de design atunci ea poate fi accesat prin intermediul butonului Totals din Toolbar-ul din Microsoft Access. Observaii : 1. rezultatul interogrii este format dintr-o singur linie, iar capul de tabel pentru coloana Pret este numit MaxOfPret (Maximul cmpului Pret). 2. criteriul de selecie Ascending selectat pentru acelai cmp nu mai are nici o valoare, permite doar calculul maximului pe cmpul respectiv. 3. Dei n tabel exist valori mai mari pentru cmpul Pret dect cea din rezultat acesta este rezultatul corect al interogrii datorit criteriului de selecie impus pentru cmpul NumePiesa. Se iau valoarea maxim a cmpului Pret din nregistrrile ce ndeplinesc criteriul NumePiesa=P3, respectiv 3; nu conteaz ordinea n care cele dou cmpuri apar n tabelul de design, rezultatul interogrii este acelai. Cmpurile calculate Un cmp calculat (calculated field) este un cmp definit ntr-o interogare care afieaz rezultatul unei expresii mai degrab dect informaii stocate. Valoarea este recalculat de fiecare dat cnd o valoare din expresie se schimb.
Un cmp calculat se folosete atunci cnd se efectueaz un calcul definit de utilizator, ce nu foloseste funciile de calcul predefinite din celula Totals, calcul care se efectueaz pe fiecare nregistrare folosind unul sau mai multe cmpuri. Un astfel de cmp trebuie creat direct n tabelul de design pentru a se executa acest tip de operaii de calcul. Aceste cmpuri se pot folosi nu numai la afiarea unor rezultate, ci i la definirea unor criterii de selecie sau pentru a determina asupra cror nregistrri s se execute o aciune. Se poate crea un cmp nou pentru afiarea rezultatelor dintr-un calcul definit printr-o expresie; n acest scop sunt necesari urmtorii pai : 1. Se deschide o interogare pentru o tabel n Design View. 2. La acest pas se poate realiza una din aciunile urmtoare: se introduce o expresie n interiorul unei celule goale n linia Field. Dac expresia include un nume de cmp din tabel atunci acesta trebuie pus ntre paranteze ptrate (d.e. [Pret]). dac se dorete ajutor n crearea unei expresii se poate deschide Expression Builder. Dup ce se apas Enter sau se efectueaz o mutare pe alt celul, Microsoft Access introduce un nume implicit pentru acest cmp, respectiv ExprN, unde N este un ntreg incrementat pentru fiecare cmp calculat nou din interogare. Acest nume va fi afiat naintea expresiei introduse urmat de semnul : i de expresie (d.e. Expr1: [Pret]+2). La afiarea rezultatelor interogrii acest nume este numele coloanei pe care sunt afiate valorile cmpului calculat. Se poate selecta acest nume, ExprN i se poate introduce unul mai sugestiv (d.e. PretNou). 3. Dac expresia conine una sau mai multe funcii agregate (Sum, Avg, Count, Min, Max, StDev, sau Var), i dac n tabelul de design exist i un alt cmp dup care se dorete gruparea atunci n linia Totals a acelui cmp, iar n cmpul calculat se schimb Group by cu Expression. 4. Pentru a completa interogarea, se pot aduga criterii de selecie sau sortri, sau se pot seta proprietile cmpului (d.e. Format) din moment ce nu este un cmp luat dintr-o tabel ale crui proprieti le-ar fi preluat. Proprietile unui cmp calculat se acceseaz prin click-dreapta pe linia Field i apoi Properties.
Interogri parametrizate
O interogare parametrizat este o interogare n care una sau mai multe valori ale criteriilor de selecie sunt specificate n mod interactiv. O interogare parametrizat nu este n mod strict, un alt tip de interogare, ci mai degrab extinde flexibilitatea interogrilor de selecie. O interogare parametrizat este o interogare care atunci cnd este rulat afieaz propria ei fereastr de dialog pentru a cere o informaie, cum ar fi un criteriu de selecie pentru extragerea nregistrrilor sau o valoare ce trebuie s fie inserat ntrun cmp. Se pot crea interogri care sa cear mai mult de o singur informaie, de exemplu, se pot realiza o interogare care s cear dou date. Microsoft Access poate atunci s extrag toate acele nregistrri care au un anume cmp ntre cele dou date. Interogrile paramterizate sunt foarte uor folosite ca baz pentru forme sau rapoarte. Astfel, dac se dorete un raport pentru o activitate lunar, se poate baza
acest raport pe o interogare parametrizat care s cear luna pentru care se dorete acel raport. Se poate crea i o fereastr de dialog proprie utilizatorului pentru folosirea n locul celei afiate de Microsoft Access. Pentru crearea unei parametrizri simple se fac urmtorii pai: 1. Se creeaz o interogare de selecie 2. In fereastra Design View se selecteaz i se adaug n tabelul de design cmpurile dorite 3. In cmpul Criteria al fiecrui cmp dorit ca paramteru se tasteaz un mesaj ntre paranteze ptrate. Microsoft Access va afia acest mesaj de fiecare dat cnd aceast interogare este rulat. Textul mesajului trebuie s fie diferit de numele cmpului, totui poate s l conin. Pentru un cmp de tip Date/Time se poate tasta urmtorul mesaj [Introducei data de nceput], sau n celula Criteria se poate introduce de exemplu : Between [Introducei data de nceput] and [Introducei data de sfrit]. 4. Pentru a vizualiza rezultatele acestei interogri se apas butonul View sau Run. Pentru ntoarcerea n Design View se apas din nou butonul View.
1. Atunci cnd se folosete o funcie pentru un cmp Microsoft Access combin numele acestei funcii cu numele cmpului pentru a obine numele coloanei din tabela rezultat al interogrii. 2. dac se adaug un cmp calculat care conine una sau mai multe funcii n care se calculeaz asupra tuturor nregistrrilor atunci trebuie setat linia Totals la opiunea Expressions. Interogri grupate Pentru realizarea unor interogri grupate paii sunt aceiai cu cei de mai sus Excepie: nu se selecteaz pentru toate cmpurile o funcie n celula Totals, ci rmn anumite cmpuri cu opiunea Group by, i.e. acele cmpuri dup care se realizeaz gruparea. De exemplu, se realizeaz o interogare grupat dup cmpul Produs, calculul efectundu-se pe cmpul Pret, respectiv calculul valorii maxime prin intermediul seleciei funciei Max din celula Totals. Evaluri statistice Evalurile statistice se pot realiza prin intermediul urmtoarelor dou funcii: StDev sau Var. Aceste funcii sunt disponibile n celula Totals. Astfel, StDev are semnificaia de Standard Deviation (deviaia standard), iar Var are semnificaia de Variance (varian).
Interogri de aciune
Access ne ofer posibilitatea de a terge i de a modifica nregistrri de date, de a crea tabele noi precum i de a aduga nregistrri n tabele existente prin utilizarea interogrilor cu aciuni. O interogare cu aciune este o interogare care realizeaz modificri asupra mai multor nregistrri din una sau mai multe tabele ntr-o singur operaie. Exist patru tipuri de astfel de interogri i anume: Interogri cu actualizare Interogri cu adugare Interogri cu tergere Interogri cu creare de tabele Interogri cu actualizare O interogare cu actualizare (Update Query) realizeaz modificri asupra unui grup de nregistrri ntr-una sau mai multe tabele. Astfel, prin intermediul unei astfel de interogri se pot mri toate preurile dintr-o tabel cu 10 %, sau se pot mri comisioanele furnizorilor dintr-un anume ora cu 5 %. Prin intermediul unei interogri cu actualizare se pot modifica informaiile dintr-o tabel existent. Interogrile cu actualizare se pot selecta din Toolbar, butonul Query Type. Opiunile din Toolbar sunt aceleai cu cele de la interogrile de selecie, prezentate la punctul anterior, i.e.: View, Save, Query Type, Run, Show Table, Properties, Build i Database window, cu excepia butonului Totals, care pentru interogrile cu actualizare nu mai este disponibil.
Paii pentru realizarea unei interogri cu actualizare sunt urmtorii : 1. Dup ce se creeaz o interogare, se adaug tabelele i se selecteaz cmpurile ce se doresc actualizate, se stabilesc criteriile de selecie pentru acestea; dac exist atunci se apas butonul Update Query din meniul Query Type din Toolbar. 2. In celula Update To (Actualizeaz cu) se introduce expresia ce va calcula noua valoare pentru cmpurile afectate de interogare. 3. Pentru a vizualiza nregistrrile ce vor fi afectate de actualizare se apas butonul View, iar pentru a crea noua tabel se apas butonul Run. Observaie : Pentru a opri o interogare dup ce a fost demarat se apas Ctrl+break. Considerm exemplul urmtor : tabela Produse i tabelul de design al interogrii cu actualizare, prin care se intenioneaz mrirea preurilor cu 10 %. Prin apsarea butonului View se vor vizualiza nregistrrile ce vor fi afectate de aceast interogare, iar prin Run se vor efectua modificrile. Interogri cu adugare Prin intermediul interogrilor cu adugare (Append Query) se realizeaz adugarea unui grup de nregistrri din una sau mai multe tabele la sfritul uneia sau mai multor tabele. Astfel, n ipoteza c se achiziioneaz mai muli furnizori noi i o baz de date ce conine o tabel cu informaiile despre acetia. Pentru a evita introducerea manual a unei mari cantiti de informaie, ar fi de preferat ca aceste nregistrri corespunztoare furnizorilor noi sa fie adugate la tabela Furnizori. Interogrile cu adugare mai pot realiza i urmtoarele aciuni : Adugarea de cmpuri bazndu-se pe un criteriu. Adugarea de nregistrri atunci cnd anumite cmpuri dintr-o tabel nu exist n alt tabel. O interogare cu adugare va aduga informaiile din cmpurile care coincid ingnorndu-le pe celelalte. Paii necesari pentru realizarea unei interogri cu adugare sunt urmtorii : 1. Se creeaz o interogare ce conine tabela ale crei nregistrri trebuie adugate alteia. 2. In Design View se apas n Toolbar butonul Query Type i apoi Append Query, fereastra Append deschizndu-se. 3. In aceast fereastr sunt cerute urmtoarele informaii : Table Name Numele tabelei la care se adaug nregistrrile Current Database - se selecteaz dac tabela este n baza de date curent Another Database se selecteaz dac tabela este n alt baz de date File Name este numele bazei de date externe (dac e cazul), se introduce i calea ctre acest fiier de tip Microsoft Access. Se pot folosi i ci ctre Microsoft FoxPro, Paradox sau baz de date dBASE. 4. Dac se dorete continuarea aciunii, se apas butonul Ok, pentru renunare se apas Cancel. 5. Se adaug n tabelul de design cmpurile ce se doresc adugate sau orice alte cmpuri ce sunt necesare pentru setarea criteriilor de selecie. Se poate aduga Cheia Primar dac este de tipul AutoNumber. Dac toate cmpurile din ambele tabele au acelai nume, atunci n tabelul de design se adaug doar elementul asterix (*) 6. Dac se selecteaz cmpuri cu acelai nume n ambele tabele Microsoft Access completeaz n mod automat numele identic n linia Append To. Dac se
selecteaz cmpuri ce au nume diferite n cele dou tabele, n linia Append To trebuie adugate numele cmpurilor din tabela n care se adaug. 7. In celula Criteria pentru cmpurile din tabelul de design se introduc criteriile de selecie pentru care se va realiza adugarea. 8. Pentru vizualizarea nregistrrilor ce vor fi adugate, se apas View n Toolbar. 9. Pentru executarea adugrii se apas butonul Run. La apsarea acestui buton Microsoft Access deschide o fereastr n care este verificat dac aceasta este aciunea pe care dorii s o ntreprindei, deoarece nu exist posibilitatea refacerii informaiei originale dup rularea interogrii. Observaie : In funcie de modalitatea de creare a unei interogri cu adugare, Microsoft Access poate n mod automat aduga noi valori pentru un cmp de tip AutoNumber sau sa extrag valori din tabela original. Pentru ca Microsoft Access s adauge valori ale cmpului AutoNumber, atunci nu se adaug acest cmp n tabelul de design atunci cnd se creeaz interogarea. Prin aceast metod Microsoft Access adaug nregistrri i insereaz n mod automat valori noi pentru AutoNumber. Prima nregistrare inserat are o valoare ce este mai mare dect cea mai mare valoare ce a fost vreodat introdus n cmpul de tip AutoNumber (chiar dac acel cmp ce a coninut aceast cea mai mare valoare a fost ters). Pentru a pstra valorile din tabela original ale acestui cmp de tip AutoNumber atunci se adaug i acesta n tabelul de design al interogrii. Dac acest cmp AutoNumber n tabela n care se efectueaz adugarea este Cheie Primar i ntre tabela original i cea n care se adaug exist posibilitatea existenei unor duplicate atunci este mai sigur s se foloseasc prima variant. De exemplu, se realizeaz o interogare de aciune unde s-a folosit o tabela intermediara numit Produse_Append ce contine Produs3, Produs4 si Produs5 cu preturile lor. S-a creat o interogare cu adaugare pentru a adauga inregistrarile din aceasta tabela n tabela Produse. Interogri cu tergere O interogare cu tergere (Delete Query) realizeaz tergerea unui grup de nregistrri dintr-una sau mai multe tabele, d.e., s-ar putea folosi o astfel de interogare pentru a elimina crile dintr-o tabel bibliotec al cror an de apariie este mai mic dect un anume an. Observaie: Nu se pot terge doar cmpuri izolate, n mod obligatoriu se terg nregistrri ntregi. Se folosete o singur interogare cu tergere pentru a realiza tergerea unor nregistrri dintr-o singur tabel, din mai multe tabele ntr-o relaie una-la-una, sau din mai multe tabele ntr-o relaie una-la-mai-multe, dac tergerile n cascad sunt active (de exemplu se terg toi furnizorii din Bucureti i produsele lor). Informaii asupra consecinelor utilizrii unei interogri cu tergere : Dup rularea unei interogri cu tergere pentru tergerea unor nregistrri nu se mai poate reface informaia. Stergerea este definitiv i informaia este pierdut. De aceea nainte de a rula interogarea ar fi de preferat s se vizualizeze nregistrrile ce se vor terge, prin intermediul butonului View din Toolbar.
Ar trebui s existe copii ale informaiilor din tabele n orice moment. Dac se terg din greeal nregistrri ce nu trebuiau terse, acestea se pot extrage din copiile executate la un moment anterior de timp. In anumite cazuri, rularea unei interogri cu tergere ar putea s tearg nregistrri din tabele relaionate, chiar dac acestea nu sunt incluse n interogare. Aceasta se poate ntmpla dac interogarea conine numai tabela ce este de partea una a unei relaii una-la-mai-multe i dac tergerile n cascad sunt activate. Stergerile n cascad activate au ca efect faptul c dac se terge o singur nregistrare din baza de date principal (de partea una) atunci se terg din tabela relaionat cu aceasta de partea mai-multe, tabela secundar, toate nregistrrile corespunztoare acelei unice nregistrri terse din tabela principal (execuia instruciunii are loc deoarece nu este de preferat s existe n tabela secundar nregistrri fr corespondent n tabela principal). Dac se starteaz o interogare cu tergere pe o tabel Paradox, dBASE sau FoxPro ce este legat la baza de date curent, aceasta nu se poate anula. Paii necesari pentru realizarea unei interogri cu tergere sunt urmtorii : 1. Se creeaz o interogare ce conine tabelele din care se vor terge nregistrri. 2. Se selecteaz tipul interogrii la Delete Query din meniul Query Type din Toolbar. 3. Din tabelele din care se va executa tergerea se adaug n tabelul de design asterix (*), iar n celula Delete va aprea clauza From. 4. Avnd n vedere c trebuie s fie terse doar anumite nregistrri ce ndeplinesc anumite criterii se adaug n tabelul de design acele cmpuri asupra crora se va stabili criteriul de selecie. In celula Delete a acestor cmpuri va aprea clauza Where. 5. In celula Criteria se introduce criteriul de selecie. 6. Pentru vizualizarea nregistrrilor ce vor fi terse se apas butonul View din Toolbar. 7. Pentru rularea interogrii se apas butonul Run din Toolbar. Prin rularea acestei interogri pentru tabela Produse se anuleaz efectul rulrii interogrii cu adugare de la punctul precedent, adic vor fi terse inregistrrile corespunzatoare produselor Produs3, Produs4 si Produs5. Interogri cu creare de tabele O interogare cu creare de tabele (Make-tables Query) creeaz o tabel nou prin selecia unor cmpuri dintr-una sau mai multe tabele. Utilitatea unei astfel de interogri const n: Crearea unei tabele pentru exportul ntr-o alt baz de date Microsoft Access. Crearea unor rapoarte ce afieaz informaia de la un anume moment de timp. Realizarea unei copii de siguran a unei tabele Crearea unei tabele ce va conine numai nregistrri vechi. Imbuntirea performanelor formelor i rapoartelor bazate pe interogri din mai multe tabele. In cazul folosirii unei interogri cu creare de tabel aceasta se ruleaz o singur dat, iar formele i rapoartele se vor baza pe tabela creat n loc s ruleze interogarea de fiecare dat. Trebuie notat faptul c informaiile din tabel sunt cele din momentul rulrii interogrii.
Paii urmrii pentru realizarea unei interogri cu creare de tabele sunt urmtorii : 1. se creeaz o interogare nou care s conin tabelele din ale cror cmpuri se va crea noua tabel. 2. Se selecteaz tipul interogrii la Make-Table Query din meniul Query Type din Toolbar, deschizndu-se ferestra Make-Table. 3. Informaiile cerute n aceast fereastr sunt similare celor cerute n fereastra Append (v. punctul 5.1.2. Pasul 3). 4. Dac se dorete continuarea aciunii se apas butonul Ok, dac se renun se apas butonul Cancel. 5.Se adaug n tabelul de design cmpurile ce se doresc n noua tabel. 6. Se adaug n celula Criteria pentru fiecare din aceste cmpuri criteriul de selecie 7. Pentru vizualizarea nregistrrilor ce vor aprea n noua tabel creat se apas butonul View din Toolbar. 8. Pentru rularea interogrii se apas butonul Run din Toolbar. Dup rularea interogrii n fereastra Tables apare tabela nou creat.
LECIA 7. Formulare
Crearea automat a formularelor Pentru a putea crea o form se selecteaz n primul rnd Tab-ul Forms (Forme) din fereastra Database i apoi se apas butonul New. La apsarea acestui buton se deschide fereastra New Form (Form Nou) n care se poate alege modalitatea de creare a unei forme. Pentru crearea automat a unei forme, n primul rnd este obligatoriu de ales tabela pe baza creia va fi creat forma (n combo-box-ul din partea de jos a ferestrei numit Choose the table or the query where the objects data comes from (Selectai tabela sau interogarea din care informaiile obiectului vor proveni)). In acest combo-box exist listate toate tabelele i interogrile existente n baza de date curent. Observaie: Numai interogrile de selecie sunt adugate n aceast list. Considerm pentru exemplificare alegerea tabelei Furnizori. Pentru creare automat se poate alege una dintre opiuni: AutoForm : Columnar AutoForm : tabular AutoForm : Datasheet Pentru toate tipurile de forme create, toate datele din tabela selectat sunt aduse n form, iar micarea ntre nregistrri sau adugarea uneia noi este realizat prin intermediul butoanelor din partea de jos a formei. Toate text-box-urile de pe form sunt legate direct la tabel astfel nct orice modificare adus valorilor din ele se transmite direct n tabel. Aceasta se ntmpl numai dac modificrile aduse nu ncalc vreuna din restriciile impuse din Design View al tabelei, tip cheie primar, indexare (fr duplicate), Regula de validare etc. Astfel, s-a ncercat adugarea inregistrrii cu numarul 5 n care valoarea cmpului ID indexat fr a permite duplicate este 2, aceast valoare existnd deja n tabel.
La ncercarea de salvare a acestei nregistrri (prin apsarea tastei Enter sau poziionare pe alt nregistrare) Microsoft Access a afiat un mesaj de eroare. Crearea formularelor utiliznd generatorul O form mai poate fi creat de ctre utilizator fie direct, fie prin utilizarea Form Wizard (Generatorul) din Microsoft Access . Generatorul mrete viteza procesului de creare a unei forme deoarece el realizeaz toat munca de baz n locul utilizatorului, n cazul n care forma ar fi fost creat exclusiv de acesta. Atunci cnd se folosete generatorul, Microsoft Access cere utilizatorului anumite informaii i creeaz forma bazndu-se pe rspunsurile acestuia. Chiar dac utlizatorul are o experien ndelungat n crearea de forme, acest generator ar putea fi totui folosit pentru a realiza toate aciunile de baz dup care utilizatorul poate intra n Design View pentru a particulariza forma n conformitate cu dorinele acestuia. La apsarea butonului New pentru crearea unui obiect de tip form n fereastra New Form se alege opiunea Form Wizard. Selectarea cmpurilor Dup apsarea butonului Ok din aceasta fereastra se deschide generatorul la prima pagin a sa care permite utilizatorului selecia cmpurilor ce vor aprea pe form. Prima pagin din Form Wizard permite utilizatorului urmatoarele: Combo Tables/Queries : selecia tabelei/tabelelor, interogrii/interogrilor cu care se va lucra n form. Available Fields : afiarea cmpurilor disponibile n tabela/interogarea selectat. - selecia pentru folosire n form a cmpului selectat n lista cmpurilor disponibile >> - selecia tuturor cmpurilor disponibile din lista cmpurilor disponibile < - eliminarea unui cmp din cmpurile selectate pentru a fi folosite n form << - eliminarea tuturor cmpurilor selectate pentru a fi folosite n form In partea de jos a ferestrei exist urmtoarele butoane: Cancel anuleaz ntreaga aciune. Back permite ntoarcerea n pagina anterioar a generatorului (n prima pagin a acestuia butonul Back nu este disponibil). Next permite naintarea la pagina urmtoare a generatorului. Finish termin crearea formei i realizeaz ieirea din generator. Tipuri de formulare La apsarea butonului Next se ajunge n pagina a doua a Generatorului n care trebuie selectat tipul formei. In dreapta ferestrei sunt afiate cele 4 tipuri de forme, iar n sub-ferestra din stnga este prezentat modalitatea de afiare a text-box-urilor pe form n funcie de tipul selectat. Opiunea implicit este Columnar. Mai sunt disponibile tipurile Tabular, Datasheet, Justified. Dac se selecteaz una din opiuni i se apas butonul Finish rezultatul crerii acestei forme prin intermediul generatorului va avea acelai rezultat dac s-ar fi
folosit direct modalitile de creare automat a unei forme (v. punctul 9.1.), fr a se permite alegerea unui stil, stilul folosit la crearea formei fiind cel implicit. 9.2.3. Stilul unei forme Dup ce se apas butonul Next se va deschide pagina urmtoare a generatorului care permite alegerea stilului unei forme. Stilurile unei forme sunt afiate n partea dreapt a ferestrei, iar la selecia unuia dintre ele n imaginea din partea stng se va afia imaginea stilului ales. Stilul ales este International. La apsarea butnoului Cancel se anuleaz crearea acestei forme, Back permite ntoarcerea n paginile anterioare ale generatorului pentru eventuale modificri, Next permite naintarea pe pagina urmtoare, iar Finish creeaz forma n conformitate cu informaiile introduse de utilizator pn la acest pas. La apsarea butonului Next, se intr n ultima pagin a generatorului n care se vor mai cere utilizatorului cteva informaii necesare finalizrii crerii unei forme. In aceast fereastr utilizatorul trebuie s introduc/selecteze urmtoarele elemente: What title do you want for the form? numele sub care forma va fi salvat Open the form to view or enter information dac se dorete deschiderea formei pentru vizualizarea sau introducerea de informaii Modify the forms design dac se dorete deschiderea formei n Design View pentru eventuale particularizri Display Help when working with the form? dac se dorete utlizarea sistemului de Help De asemenea, semnificaia butoanelor este urmtoarea: Cancel anularea crerii acestei forme Back ntoarcerea pe paginile anterioare pentru eventuale modificri, informaiile selectate aici nu se pierd. Next nu este disponibil aceasta fiind ultima pagin din generator Finish creeaz forma i realizeaz ieirea din generator. In cazul n care utilizatorul a apsat Finish n alta fereastra decat in ultima atunci Microsoft Acces va salva forma sub numele tabelei care a fost selectat pentru a i se folosi cmpurile pe form.
LECIA 8. Rapoarte
n acest lecie se prezint tehnicinile de realizare a rapoartelor, i anume: Formatarea raportului Stilul raportului Stabilirea seciunilor raportului(antete i subsoluri de raport, pagin igrup , a seciunii de etichete i detaliu) Etichete cu adresei de cmp Sortarea Listarea raportului Crearea unui raport de tip tabel utiliznd generatorul Un raport se poate crea (la fel ca i o form) direct de ctre utilizator sau utiliznd un generator (Report Wizard). Un astfel de generator mrete viteza procesului de creare a unui raport, iar dac e cazul, utilizatorul poate intra n Design View pentru a particulariza aceast form final a raportului.
Pentru a crea un raport utiliznd generatorul, trebuie n primul rnd s se mearg n fereastra Reports (Tab-ul Reports) i s se apese butonul New (similar ca n cazul crerii de forme). La apsarea butonului New se deschide fereastra din care se selecteaz opiunea Report Wizard. Coninutul coloanelor Dup apsarea butonului Ok, n fereastra de mai sus se deschide prima pagin a generatorului cu care se lucreaz n mod similar ca n pagina de selecie a cmpurilor din generatorul de forme(v. punctul 9.2.1.). Gruparea n interiorul raportului La psarea butonului Next se intr n pagina a doua a generatorului de rapoarte care permite gruparea n interiorul raportului. Aceast fereastr prezint n partea stng cmpurile disponibile n raport i n dreapta o list ce poate fi modificat n funcie de preferinele utilizatorului. Lista implicit de grupare este n ordinea introducerii cmpurilor n lista de coloane de pe raport.
Sortarea raportului
La apsarea butonului Next din aceasta fereastra se intr n pagina a treia a generatorului de rapoarte de unde este permis ordonarea nregistrrilor ce vor fi extrase n raport. In partea stng a acestei ferestre este afiat forma pe care o va avea raportul, iar n partea dreapt exist posibilitatea seleciei de cmpuri pentru sortare. Dup ce s-a introdus un cmp pentru sortare, se activeaz i al doilea combo ce conine cmpurile selectate n prima pagin a acestui generator. Ordinea de sortare este stabilit prin butonul existent n dreapta fiecrui combo. Orientarea tip portret i tip peisaj La apsarea butonului Next se deschide a patra pagin a generatorului de rapoarte n care este permis selectarea orientrii raportului n format portret (Portrait) sau peisaj (Landscape). Orientarea raportului se selecteaz din partea dreapta a ferestrei, grupul de opiuni Orientation (Orientare). Selectarea implicit este Portrait. La selectarea opiunii Landscape vom avea raportul va fi afisat . Planul general al raportului Planul general al raportului se selecteaz din aceeai pagina 4 a generatorului de rapoarte din grupul de opiuni Layout. Opiunile disponibile sunt : Columnar, Tabular i Justified. Opiunea implicit este Tabular. Pentru opiunea Columnar imaginea din stnga paginii se schimb conform noului plan general selectat. Limea raportului Limea raportului se selecteaz din aceeai pagina 4 a generatorului de rapoarte prin check-box-ul Adjust the field width so all the fields fit on the page. Stilul raportului La apsarea butonului Next din pagina a patra a generatorului se deschide pagina numrul 5 a acestuia din care este permis selecia stilului raportului. In aceast fereastr sunt disponibile stilurile din imagine din care poate fi selectat cel ce ndeplinete cel mai bine cerinele utilizatorului. Stilul implicit este cel din imagine, respectiv Corporate.
Utilizatorul alege stilul potrivit i apas butonul Next pentru a ajunge la ultima pagin din generatorul de rapoarte n care este cerut numele raportului. Pentru introducerea numelui se recomand alegerea unui un nume sugestiv pentru ceea ce este prezent n raport. Numele implicit pus de generator este cel al tabelei/interogrii selectate n prima pagin a generatorului, n acest caz Query6. Se menioneaz faptul c, n oricare din paginile generatorului pot fi utilizate butoanele: Cancel anuleaz aciunea de generare a unui raport Back permite ntoarcerea pe paginile anterioare pentru eventuale modificri fr ase pierde seleciile fcute pe pagina curent Finish permite nchiderea generatorului cu crearea raportului cu seleciile realizate pn atunci i cu seleciile implicite dac nu s-au modificat. Etichete cu adrese Pentru crearea unui raport de tip etichete cu adrese trebuie selectat opiunea Label Wizard (generatorul de etichete) i apoi apsat butonul New. Pentru selecia acestui tip trebuie introdus din combo-ul prezent n partea de jos a acestei ferestre tabelul/interogarea pe baza creia se va genera acest raport. Mrimea etichetelor La apsarea butonului Ok se va afia prima pagin a acestui generator care va permite selecia mrimii etichetelor. In afar de dimensiunea etichetelor pe aceasta pagin se vor mai putea seta : Unitile de msur (Units of Measure) : English sau Metric. Tipul etichetei (Label Type) : Sheet feed sau Continuos. Dac tipurile etichetelor nu sunt agreate de utilizator, atunci se poate apsa butonul Customize (Particularizeaz). La apsarea butonului Next de pe aceast pagin, se intr n pagina urmtoare. In aceast fereastr se poate selecta fontul, mrimea acestuia, dimensiunea i culoarea textului. De asemenea, se mai poate selecta modul de scriere: Italic sau Underline. In pagina urmtoare a generatorului se pot realiza etichetele de cmp. In aceast ferestr sunt disponibile cmpurile tabelei ce a fost selectat ca baz pentru acest raport i prin acionarea butonului central (>) se pot selecta n lista din dreapta. Nu exist nici o etichet setat implicit. Sortarea etichetelor se face n pagina urmtoare a generatorului de etichete. In lista din stnga imaginii sunt disponibile cmpurile din tabela selectat ca baz a acestui raport, iar n lista din stnga imaginii pot fi selectate cmpurile pentru sortare (prin intermediul butoanelor : >, >>). In ultima pagin a raportuluis e introduce numele acestuia, valoarea implicit fiind aceea de Labels + numele tabelei.interogrii selectate la nceputul generrii. In aceast fereastr mai pot fi selectate urmtoarele opiuni: vizualizarea etichetelor aa cum vor fi tiprite modificarea design-ului etichetelor asistarea de ctre sistemul de Help al sistemului atunci cnd se lucreaz cu etichetele De asemenea, pe paginile generatorului sunt prezente tot timpul butoanele :
Cancel anuleaz aciunea de generare a unui raport Back permite ntoarcerea pe paginile anterioare pentru eventuale modificri fr a se pierde seleciile fcute pe pagina curent Finish permite nchiderea generatorului cu crearea raportului cu seleciile realizate pn atunci i cu seleciile implicite dac nu s-au modificat.
Listarea raportului
Pentru listarea unui raport, n primul rnd trebuiesc setate marginile, orientarea i celelalte condiii de structura vizual. Astfel, paii ce trebuiesc executai sunt urmtorii : 1. Se selecteaz un raport din fereastra Database, sau se deschide un raport n Design View, Print Preview sau Layout Preview. 2. In meniul File se apas butonul Print (Listeaz). 3. Se intr setrile dorite n fereastra de dialog Print: se specific o imprimant se specific numrul paginilor ce trebuie listate se specific numrul copiilor ce trebuie listate 4. Apoi se apas butonul Ok. Domeniul de listare Pentru domeniul de listare se seteaz dimensiunea paginii, tipul paginrii (Portrait sau Landscape) i imprimanta. Marginile raportului se seteaz n aa fel nct datele tiprite s aib loc n dimensiunile paginii (mai puin dimensiunile marginilor.
Pentru crearea unei etichete ataat unui element de control nu se face altceva dect crearea elementului de control, iar Microsoft Access ataeaz o etichet acestuia cu ocazia crerii lui . O etichet de sine stttoare este o etichet ce nu este ataat nici unui alt element de control i este creat din Toolbox, i.e. elementul Label. Astfel de etichete se folosesc pentru informaii de tipul unui titlu al formei sau al raportului, sau pentru alte texte descriptive. Pentru crearea unei etichete de sine stttoare se parcurg urmtorii pai: 1. Se deschide forma sau raportul n Design View. 2. Se apas Label n Toolbox. 3. Pe form sau raport, se execut un click acolo unde se dorete poziionarea etichetei i apoi se introduce textul ce va fi afiat. Observaii: 1. Dac se dorete afiarea unui text ntr-o etichet pe mai mult de o singur linie, atunci se poate redimensiona eticheta dup introducerea ntregului text sau se poate apsa Ctrl+Enter la sfritul primei linii din text pentru a se introduce un CR (carriage return). Limea maxim a etichetei este determinat de lungimea primei linii din text. 2. Dac se dorete utilizarea ampersantului (&) n etichet atunci trebuie introduse dou astfel de simboluri, deoarece Microsoft Access utilizeaz acest simbol pentru a defini tastele de acces. Cmpul de tip text Cmpurile de tip text (Text Box) se folosesc pe o form sau un raport pentru a afia datele dintr-o tabel sau interogare. Acest tip este numit cmp de tip text legat deoarece este legat la informaiile dintr-un cmp. Cmpurile de tip text pot fi i nelegate cum ar fi, cele n care se afieaz rezultatul unui calcul sau un cmp n care se introduce text de ctre utilizator. Informaia dintr-un cmp nelegat nu este stocat. Crearea unui cmp de tip text depinde n primul rnd de tipul de cmp ce se dorete: legat, nelegat sau calculat. Crearea unui cmp legat: 1. Se deschide o form sau un raport n Design View. 2. Se apas Field List (Lista de cmpuri) din Toolbar pentru a afia lista cmpurilor. Dac acest buton nu este valabil, atunci va fi necesar s se lege forma sau raportul la o surs de nregistrri folosind proprietatea de RecordSource (Sursa de Inregistrri). 3. Se selecteaz unul sau mai multe cmpuri din lista de cmpuri; n acest scop se parcurg paii urmtori: Unui cmp se execut click pe cmp Unui bloc de cmpuri se execut click pe primul cmp din bloc, se ine apsat tasta Shift i apoi se execut click pe ultimul cmp din bloc. Unor cmpuri neadiacente se ine apsat tasta Ctrl i apoi se execut click pe fiecare cmp dorit pentru selecie. Toate cmpurile se execut dublu-click. 4. Se trage cmpul (cmpurile) din lista de cmpuri i se poziioneaz pe form sau raport. Observaii:
1. Trebuie s se execute tragerea cmpului din lista de cmpuri pe form; dac s-ar executa click pe cmp i apoi click pe form Microsoft Access nu va crea elementul de control. 2. Microsoft Access va crea cte un element de tip text (pe form sau raport) pentru fiecare cmp selectat din lista de cmpuri. Fiecare element de tip text este legat de unul din cmpurile din sursa de date a formei/raportului. Fiecare element de tip text are de asemenea ataat o etichet implicit. 5. Se dimensioneaz cmpul de tip text astfel nct s aib dimensiunea potrivit informaiei ce trebuie afiat. 6. Se schimb textul etichetei dac este necesar. 7. Se poate testa elementul de control prin intermediul Form View. Observaie: Pentru elementele de tip text pe forme ce au multe linii de text, se poate dori adugarea unei bare de navigare vertical. Cmpul de tip opiune (Check box) Un cmp de tip opiune (Check Box) se poate folosi pe o form sau pe un raport ca un control de sine stttor pentru a afia o valoare de tip Yes/No. Atunci cnd se selecteaz / deselecteaz un cmp de tip opiune care este legat de un cmp Yes/No dintr-o tabel sau interogare, Microsoft Access afieaz valoarea n tabela/interogarea respectiv n concordan cu setarea proprietii Format a cmpului respectiv (Yes/No, True/False, sau On/Off). Aceste tipuri de cmpuri se pot folosi i n grupuri de opiuni ce afieaz valorile din care trebuie fcut o alegere. De asemenea un astfel de cmp se poate folosi nelegat de nici un cmp din vreo tabel/interogare n scopul introducerii unei opiuni de ctre utilizator n cazul unei ferestre de dialog. Paii necesari pentru crearea unui astfel de cmp sunt urmtorii : 1. Se deschide o form sau un raport n Design View. Se execut un click n Toolbox pe butonul corespunztor cmpului de tip opiune. Dac nu se cunoate cu exactitate care este acest buton, atunci se poziioneaz mouse-ul pe fiecare din butoanele disponibile n fereastra Toolbox pn cnd se gsete acel buton n dreptul cruia este afiat cuvntul Check Box Tip (Indiciu). 2. Pe form/raport se execut un click acolo unde se dorete inserarea elementului de control nelegat. Dac se dorete poziionarea elementului de control ntr-un grup de opiuni, atunci Microsoft Access lumineaz grupul de opiuni atunci cnd mouse-ul este deasupra lui pentru a arta c acest element de control va face parte din grupul de opiuni. Listele i cmpurile combinate In cele mai multe dintre cazuri, este mult mai repede i mult mai uor s se selecteze o valoare dintr-o list dect s se aminteasc valoare ce trebuie introdus. O list a valorilor posibile (un cmp combo) ajut de asemenea pentru a se asigura c valoarea ce este introdus ntr-un cmp este corect. In general, o list const n linii de date. Liniile pot avea una sau mai multe coloane, care pot aprea cu sau fr capete de coloan. Dac o list cu mai multe coloane este legat la o tabel sau interogare, Microsoft Access va stoca valorile din una din coloane.
Se poate folosi o list nelegat pentru a depozita o valoare care va fi folosit ntr-un alt element de control. De asemenea se poate folosi o list nelegat pentru a gsi o nregistrare bazat pe valoarea selectat n list. Dac nu exist spaiu n form pentru a afia coninutul listei sau dac se dorete a se tasta valori noi, atunci se poate folosi un cmp combo. Pentru a decide ntre o list sau un cmp combo, trebuie stabilit modalitatea de apariie i de folosire a acestui element de control deoarece fiecare dintre aceste tipuri de elemente de control ofer anumite avantaje: Avantajele unei liste lista apare n orice moment i valoarea elementului de control este limitat la mulimea alternativelor din list. Pentru a se executa rapid micarea pe o valoare care ncepe cu o anumit liter se poate apsa acea liter. Dac forma se folosete la adugare sau editare atunci n list se pot introduce valori. Avantajele unui cmp combo din moment ce lista nu este afiat dect atunci cnd este deschis, acest element de control folosete mai puin din spaiul formei. Se pot tasta primele carectere dintr-o valoare pentru ca aceast valoare s fie gsit mai repede. De asemenea se poate controla dac poate fi introdus orice valoare n list sau se limiteaz doar la valorile existente n list. Dreptunghiul, linia Pentru crearea unui element de control de tipul dreptunghi sau linie sunt necesari urmtorii pai: 1. Se deschide forma/raportul n Design View 2. Se execut click pe unealta Dreptunghi (Rectangle) sau pe Linie (Line) n Toolbox. 3. Apoi se execut click acolo unde se dorete poziionarea elementului de control, de dimensiune implicit sau dup creare/selectare se trage pentru a obine dimesniunea dorit a elementului de control. Observaii: 1. Pentru a schimba grosimea bordurii dreptunghiului se poate apsa sgeata din partea dreapt a butonului Grosime Linie/Bordur (Line/Border Width) din Toolbar i apoi se selecteaz grosimea dorit. Pentru a schimba stilul liniei sau bordurii dreptunghiului (punctat, cu liniue etc), se execut un click pe dreptunghi/linie apoi Properties din Toolbar i apoi se selecteaz un stil de bordur (Border Style). 2. Pentru a realiza mici ajustri ale lungimii sau unghiului liniei, se selecteaz linia, se ine tasta Shift apsat, i apoi se apas una dintre sgei. Pentru a face mici ajustri asupra poziiei linie se ine apsat tasta Ctrl i apoi se apas una dintre sgei. tergerea elementelor de control Pentru tergerea unui element de control trebuie s fie parcuri paii urmtori: 1. Se deschide o form/raport n Design View. 2. Se selecteaz elementul de control. 3. Se apas tasta Del (Delete). Observaie: Dac acest element de control are ataat o etichet atunci Microsoft Access va terge elementul de control i eticheta sa. Dac se dorete doar tergerea etichetei atunci se selecteaz eticheta i se apas tasta Del (Delete).
Stilul, mrimea fontului i culoarea fontului Proprietaie stilul fontului (FontName) i mrimea fontului (FontSize) se folosesc pentru a specifica fontul i pentru a stabili dimensiunea fontului n urmtoarele situaii: Atunci cnd se afieaz sau se tipresc elementele de control n forme sau rapoarte. Atunci cnd se folosete metoda Print (Tiprete) pentru un raport. Proprietatea FontName conine numele fontului n care textul va fi afiat. Proprietatea FontSize are una din urmtoarele setri: 8 este valoarea implicit pentru toate rapoartele i elementele de control cu excepia butoanelor de comand. 10 valoarea implicit pentru butoanele de comand. Alte valori textul va fi de aceast dimensiune. Pentru elementele de control din forme/rapoarte acaste proprieti pot fi setate n urmtoarele variante din tabelul de proprieti sau din Visual Basic. prin butoanele Font sau FontSize din Toolbar-ul de formatare. prin alegerea proprietilor implicite. Observaie: Disponibilitatea fonturilor depinde de sistem i de imprimant. Dac se selecteaz un font ce nu poate fi afiat de sistem sau nu este instalat, atunci Windows va substitui acest font cu un font similar. Proprietatea culoarea fontului (ForeColor) specific n ce culoare va fi afiat textul ntr-un element de control. Aceasta se folosete pe o form/raport pentru a le face mai uor de citit sau pentru a sublinia o semnificaie mai special. De asemenea, aceast proprietate poate fi folosit pentru a crea efecte vizuale speciale pe rapoarte n cazul n care se utilizeaz o imprimant color. Proprietatea ForeColor conine o expresie numeric ce reprezint valoarea culorii textului din elementul de control. Se poate folosi ColorBuilder pentru a seta aceast proprietate prin apsarea butonului Build. In acest fel, utilizatorul i poate crea propriile lui culori. Pentru elementele de control setarea acestei proprieti se poate realiza dintrunul din cele dou butoane din Toolbar Font/Fore Color, din tabelul de proprieti sau din Visual Basic. Observaii: 1. Pentru un cmp de tip text, etichet sau buton de comand ce conine un hyperlink, Microsoft Access seteaz n mod automat ForeColor la culoarea specificat n hyperlink. Dac hyperlink-ul se terge, atunci se revine la setarea din proprietile implicite. 2. Pentru butoanele de comand, ForeColor are efect doar dac acest buton conine o captur mai degrab dect o imagine. Mrimea cmpului (limea, nlimea) Proprietile lime (Width) i nlime (Height) sunt folosite pentru a dimensiona un obiect. Acest fapt poate fi folositor de exemplu dac se dorete creare unor obiecte de aceeai dimensiune sau care au aceeai lime sau nlime. Observaii: 1. Proprietatea Height se plic numai seciunilor de form/raport, nu i formelor sau raportului. 2. proprietatea Width se aplic numai formelor/rapoartelor nu i seciunilor de form/raport.
3. Ambele proprieti se aplica elementelor de control din forma/rapoarte. Setarea acestor proprieti se realizeaz prin introducerea unei valori numerice pentru ltimea/nlimea dorit n unitile de msur ale sistemului (v. Regional Settings). Setarea pentru lime poate fi ntre 0 i 55,87 cm. Observaii: 1. Microsoft Access seteaz n mod automat Height i Width atunci cnd se creeaz un element de control. 2. Inlimea seciunilor i limea formelor i rapoartelor sunt msurate de la bordurile lor, pe cnd limea i nlimea elementelor de control sunt masurate din centrul bordurilor lor, astfel nct elemente de control cu grosimi diferite ale bordurilor s se alinieze corect. Alinierea textului (stnga, la centru, dreapta) Proprietatea LabelAlign (Alinierea Etichetei) specific alinierea textului n etichetele ataate noilor elemente de control. Proprietatea TextAlign (Alinerea textului) specific alinierea textului n noile elemente de contro. LabelAlign folosete urmtoarele setri: General setarea implicit. Textul etichetei va fi aliniat la stnga. Left Stnga. Textul etichetei se aliniaz la stnga. Center Centru. Textul etichetei este centrat. Right Dreapta. Textul etichetei este aliniat la dreapta. Pentru setrile proprietii TextAlign exist o singur diferen fa de cele ale proprietii LabelAlign i anume: pentru setarea General, textul se aliniaz la stnga numerele i datele la dreapta. Observaie: Atunci cnd se creeaz un element de control, dac proprietatea AutoLabel este setat pe Yes atunci se creeaz i o etichet. Evidenierea (ngroare, italic, subliniere) Se poate folosi proprietatea FontBold pentru a specifica dac un font apare ntr-un stil ngroat n urmtoarele situaii: Atunci cnd se afieaz sau se tipresc elemente de control pe forma/rapoarte. Atunci cnd se utilizeaz proprietatea Print pe un raport. Setarea acestei proprieti se face n felul urmtor: True (-1) Textul este ngroat False (0) Valoarea implicit. Textul nu este ngroat. Proprietatea FontBold poate fi setat numai utiliznd codul de Visual Basic. Proprietile FontItalic i FontUnderline se folosesc pentru a specifica dac un text este italic sau subliniat. Aceste proprieti au urmtoarele setri posibile: Yes textul este italic/subliniat No Valoarea implicit.Textul nu este italic/subliniat. Umplerea / culoarea de fundal Proprietatea BackColor se folosete pentru a meniona culoarea din interiorul unui element de control sau seciuni. Aceast proprietate conine o expresie numeric
ce corespunde culorii folosite pentru a umple interiorul unui element de control sau al unei seciuni. De asemenea aceast proprietatea se poate seta folosind butonul Fill/Back Color din Toolbar-ul de formatare. Dac se folosete proprietatea BackColor, atunci proprietatea BackStyle, dac exist, trebuie setat la Normal. Limea liniei / bordurii Proprietatea BorderStyle este utilizat pentru a specifica tipul bordurii i elementele de bordur (bara de titlu, meniul de control, butoanele de minimizare i maximizare sau butonul de nchidere). In cazul elementelor de control, aceast proprietatea seteaz bordura de afiare. Proprietatea BorderStyle dispune de urmtoarele setri posibile: Transparent Transparent. Valoare implicit numai pentru etichet sau subraport. Solid Solid. Valoare implicit. O linie solid. Dashes Liniue. Linie ntrerupt. Short dashes Linue scurte. Linie ntrerupt cu liniue scurte. Dots Puncte. Linie punctat. Sparse dots Puncte distanate. Linie punctat cu puncte spaiate mult. Dash dot Liniu Punct. Linie cu o combinaie linu punct. Dash dot dot Liniu Punct Punct. Linie cu o combinaie Liniu Punct Punct
TESTE
-11. Deschideti aplicatia de baze de date. 2. Creati o baza de date noua in directorul1. Salvati-o cu nou 1. mdb. 3. Creati o tabela cu urmatoarele campuri : CNP Number-Integer Nume Text de demensiune 75 Data Date/Time-Short Date 4. Salvati tabela cu numele Candidat. 5. Creati un formular nou asupra tabelei Candidat. 6. Salvati formularul cu denumirea Formular Candidat. 7. Introdudceti doua inregistrari in tabela Candidat cu ajutorul formularului creat. CNP 102 98 Nume Alina Maria Data 7/17/94 2/18/02
8. Utilizati instrumental de cautare pentru a gasi inregistrarea cu CNP-ul 102. 9. Modificati numele persoanei in Andreea. 10. Salvati modificarile facute si inchideti aplicatia de baze de date.
1. Deschideti baza de date 1.mdb. 2. Adunati urmatorul atribut Numar_telefon tabelei Autor. 3. Stergeti tabela Campuri din baza de date. 4. Modificati lungimea coloanei Nume in tabela Autor la 100 de caractere. 5. Creeati o interogare asupra tabelei Carte in care sa afisati doar cartile ce au codurile mai mare de 100. 6. Creati un raport asupra tabelei Autor. 7. Introduceti in antetul raportului o imagine. 8. Mutati imaginea in partea stanga a antetului. 9. Salvati raportul cu denumire Raport autor. 10. Salvati modificarile facute si inchideti aplicatia de baze de date. -21. Deschideti aplicati de baze de date. 2. Creati o baza de date noua cu numele baza de date in directorul 2. 3. In baza de date nou creeata, construiti o tabela cu urmatoarele atribute : Oras Data examinarii Nume Centru Numar Curent Text-dimensiune 20 Date/Time-Short Date Text-de dimensiune 30 Autonumber
4. Stabiliti atributul Nume Centru fiind indexat cu duplicate 5. Mutati atributul Numar Curent astfel incat sa devina primul atribut din tabela. 6 Creati o regula de validare pentru atributul Numar Curent,astfel incat sa nu primeasca valori mai mari de 256. 7. Introduceti in tabela creeata 5 inregistrari. 8. Imprmati toate inregistrarile din tabela. 9. Salvati toate datele. 10. Inchideti aplicatia de baze de date.
1. Deschideti baza de date 2.mdb. 2. Creati un filtru de tipul Filter By Form pentru tabela Universitate in modul urmator : afiati ecanul corespunztor 3. Sortati datele din tabela Profesor in ordine descrescatoare dupa cimpul Cod_profesor. 4. Aplicati filtrul creeat asupra tabelei Universitate . 5. Deschideti formularul Profesor. 6. Cu ajutorul formei selectati inregisrtarea si modificati numele profesorului din Vasile in Marian 7. Stergeti inregistrae cu numarul 2 din tabela. 8. Deschideti raportul Profesor. 9. Modificati dimensiunea pagini din A4 in Letter. 10. salvati modificarile facute si inchideti aplicatia de baze de date.
-31. Deschideti aplicatia de baza de date. 2. Creeati o baza de date noua si salvati-o in directorul 3 3. Utilizati functia Help pentru a cauta informatii despre tabele. 4. Creeati o tabela noua si denumiti-o Informatii . 5. Inytroduceti in tabela 3 atribute. 6. In tabela creata stabiliti primul camp ca fiind cheie primara 7. Creati un raport asupra acestei tabele. 8. Grupati datele din raport in functie de al doilea atribut 9. Salvati raportul cu numele Raport 10. Inchideti baza de date create. 1. Deschideti aplicatia de baze de date. 2. Deschideti baza de date 3.mdb 3. Stergeti tabela Informatii din baza de date 4. Modificati tipul atributului Cantitate din tabela Produs,din Text in Number. 5. Deschideti formularul Produs. 6. Adaugati numele dumneavoastra in antetul formularului Produs. 7. Creati o interogare cu date din tabelele Produs si Comenzi,in care sa afisati din tabela Produs campurile Nume_produs si Unitate_de_masura,iar din tabela Comenzi campurile Nume_firma si Cantitate_ceruta,pentru acele inregistrari pentru care cod_produs din tabela Produs este egal cu cod _produs din tabela Comenzi. 8. Salvati interogarea cu numele Query. 9. Rulati interogarea creata. 10. Salvati modificarile facute si inchideti aplicatia de baze de date.
-41.Deschideti aplicatia de baze de date. 2.Creati o baza de datenoua cu numele dumneavoastre pe directorul C. 3.Afisati pe ecran bara de instrumente Database. 4.Creati o tabela cu urmatoarele atribute : Atribut 1 Atribut 2 Atribut 3 Numeric-Byte Text-dimensiune 15 caractere Currency-Euro
5.Creati o noua tabela cu urmatoarele attribute: Atribut 1 Atribut 4 Atribut 5 Numeric-Byte Text-dimensiune 20 Text-dimensiune 25
6.Stabiliti in prima tabela ca cheie primara Atribut 1. 7.Creati o legatura intre cele 2 tabele dupa campul Atribut 1. 8.Salvati modificarile facute. 9Mutati in tabela 2 campul Atribut 5 inaintea campului Atribut 4.
10.Inchideti aplicatia de baze de date. 1.Deschideti o aplicatie de baze de date. 2.Deschideti baza de date 4.mdb. 3.Modificati lungimea coloanei Marca la 25 in tabela Masini. 4.Cautati inregistrarea cu marca Audi si modificati Tip_masina in tip sport. 5.Creati o interogare, cu date din tabela Masini, in care afisati doar masinile din arce Mercedes. 6.Sortati datele din tabela Masini dupa campul Marca, in ordine alfabetica. 7.Creati un raport asupra tabelei Masini Disponibile. 8.Modificati orientarea paginii. 9.Imprimati toate datele obtinute in raportul anterior creat. 10.Salvati toate modificarile facute si inchideti baza de date. -51.Deschideti o aplicatie de baze de date. 2.Creati o baza de date noua in directorul C 3.Creati o tabela in care introduceti 5 campuri.Dintre acestea 2 vor fi de tip Text, 2 vor fi numerice si unul de tip data calendaristic. 4.Creati un formular nou asupra tabelei create anterior. 5.Cu ajutorul noului formular introduceti in tabela 5 inregistrari. 6.Adaugati numele dumneavoastra in antetul formei. 7.Creati o interogare care sa contina numai campurile 1 si 2. 8.Rulati interogarea creata. 9.Imprimati doar inregistrarile selectate din tabela creata. 10.Salvati toate datele si inchideti aplicatia de baze de date. 1.Deschideti baza de date 5.mdb. 2.Deschideti tabela Caseta imprumutate si introduceti atributul Data_imprumut de tip Date. 3.Stergeti legatura dintre tabelele Casete si Casete imprumutate. 4.Sortati datele din tabela Casete in ordine descrescatoare dupa atributul Actor. 5.Creati un raport asupra tabelei Casete. 6.Introduceti in antetul raportului numele dumneavoastra si data curenta. 7.Grupati datele din raport dupa atributul Tip_film. 8.Modificati tipul paginii din Letter in A4 9.Imprimati raportul la o imprimanta disponibila. 10.Salvati modificarile facute si inchideti aplicatia de baze de date.
SQL este deseori folosit n combinaie cu limbajele procedurale sau orientate spre obiecte menionate anterior pentru a manipula stocarea i extragerea datelor, folosind instruciuni din limbajul de programare cu destinaie general pentru alte sarcini de programare, precum prezentarea datelor pe o pagin web sau furnizarea rspunsurilor la informaiile introduse de utilizatori de la tastatur sau mouse. Atunci cnd este necesar interacionarea cu baza de date, instruciunile din limbajul procedural formeaz instruciunea SQL, o transmit ctre SGBDn vederea prelucrrii, primesc rezultatele returnate de SGBDi le prelucreaz ntr-un mod corespunztor. Folosind SQL putei transforma ntrebri obinuite :Din ce oras sunt studentii notri? n instruciuni pe care le nelege soft-ul pentru baze de date: SELECT oras FROM studenti . Aceste informaii se pot extrage din bazele de date prin utilizarea unui instrument grafic de interogare, dar pe msur ce ce intrebrile devin mai complexe, aceste instrumente devin limitate i greoaie i acesta este momentul cnd intr n aciune limbajul SQL. SQL se poate folosi nu numai pentru interogare, dar i pentru a aduga, a modifica sau a terge nregistrri din bazele de date. Majoritatea SGBD-urilor populare, ca de exemplu Microsoft Accsess, Oracle i MySQL , asigur suport pentru SQL, chiar dac acest nivel de suport difer de la produs la produs.
n funcie de interfaa cu utilizatorul de pe staia de lucru client, clienii SQL sunt clasificai n trei categorii: n linia de comand, grafici i bazai pe web. O interfa n linia de comand se bazeaz exclusiv pe intrri i ieiri de tip text, cu comenzile introduse de la tastatur i rspunsurile afiate ca mesaje de tip text. Principalul avantaj al interfeelor n linia de comand este c pot fi rulate pe aproape orice sistem de operare. O interfa grafic cu utilizatorul (GUI - graphical user interface) ruleaz sub un tip oarecare de sistem bazat pe ferestre, cum ar fi X Window System, Mac OS sau Microsoft Windows, i afieaz datele sau opiunile comenzilor folosind elemente grafice, precum pictograme, butoane i casete de dialog. O interfa bazat pe web ruleaz pe serverul de baze de date, folosind un browser web de pe staia de lucru client pentru a interaciona cu utilizatorul bazei de date. Din punct de vedere tehnic, un client SQL bazat pe web nici nu este o aplicaie client, deoarece nu exist nici o component software specific productorului SGBD rulat pe staia de lucru a clientului. Totui, aproape ntotdeauna exist componente furnizate de productorul SGBDcare sunt descrcate n fundal de browser-ul web pentru a asista n procesul de reprezentare grafic a formularelor web folosite pentru introducerea instruciunilor SQL i afiarea rezultatelor. Tabelul urmtor prezint clieni SQL oferii de diferii productori SGBD . Nu avem suficient spaiu n aceast carte pentru a prezenta toate detaliile referitoare la fiecare client SQL pe care ai putea s-1 folosii, aa c v rog s consultai documentaia productorului SGBD pentru informaii despre instalarea i utilizarea clienilor SQL disponibile pentru sistemul SGBD pe care-1 folosii.
Productor DBMS Client SQL Descriere Microsoft Access este o baz de date de uz personal, cu clientul SQL integrat n Microsoft Access Nu exist DBMS, toate fiind rulate local pe staia de lucru a utilizatorului. Client SQL care ruleaz ca aplicaie n Microsoft SQL Server iSQL linia de comand ntr-un nucleu de comenzi Microsoft Windows. Microsoft SQL Server Query Analyzer Client SQL care ruleaz ca aplicaie Microsoft Windows. Client SQL care ruleaz ca aplicaie n linia de comand MySQL MySQL MySQL sub diferite sisteme de operare, inclusiv Microsoft Windows, Linux, Mac OS X i diferite implementri Unix. Client SQL bazat pe web Oracle Oracle iSQL*Plus acceptat n versiunile Oracle 9i si mai noi.
Client SQL care ruleaz ca aplicaie Microsoft Windows sau ca aplicaie n linia de comand Oracle Oracle SQL*Plus sub diferite sisteme de operare, inclusiv Microsoft Windows, Linux, Mac OS X, diferite implementri Unix i altele. Client SQL scris n Java Oracle Oracle SQL Worksheet disponibil n Oracle 8i i 9i, dar nlocuit de iSQL*Plus n Oracle 10g. Clientul SQL care ruleaz ca aplicaie n linia de comand ntr-un nucleu de comenzi Microsoft Windows. Asemnrile Sybase Sybase iSQL cu Microsoft SQL Server nu sunt ntmpltoare - primele versiuni Microsoft SQL Server erau bazate pe sistemul SGBDSybase.
mai trziu, au fost publicate primele specificaii ale standardului, numite SQL-89. Dup trei ani, specificaiile originale au fost extinse, sub forma standardului SQL-92, care avea aproximativ 600 de pagini. A treia generaie a fost numit SQL-99 sau SQL3. Cele mai multe produse SGBDsunt construite pe baza standardului SQL-92 (numit acum SQL2). SQL3 include multe caracteristici obiectuale, necesare pentru folosirea limbajului SQL cu o baz de date relaional orientat spre obiecte, precum i extensii de limbaj care fac din SQL un limbaj de programare complet (adugnd cicluri, ramificri i construcii de comutare, de tip case). Cea mai recent generaie, numit SQL:2003, introduce caracteristici legate de XML i alte mbuntiri. Aceste standarde nu sunt gratuite. Standardul SQL:2003 poate fi cumprat de la ISO (www.iso.org) sau ANSI (webstore.ansi.org). Pentru cei care au un buget mai restrns, este disponibil o versiune apropiat de cea final la Whitemarsh Information Systems Corporation (www.wiscorp.com/SQLStandards.html). Aproape toi furnizorii au adugat extensii la dialectul" SQL propriu, n parte deoarece doreau s diferenieze produsele proprii i n parte deoarece cerinele pieei i forau s implementeze caracteristici nainte a aprea standarde pentru acestea. Un astfel de exemplu este acceptarea tipurilor de date TIMESTAMP i DATE. Datele calendaristici sunt foarte importante pentru prelucrarea datelor comerciale, dar dezvoltatorii produselor SGBD originale erau academicieni i oameni de tiin, nu specialiti n prelucrri comerciale, aa c aceast cerin nu a fost anticipat. Ca rezultat, primele dialecte SQL nu asigurau un suport special pentru datele calendaristice. Pe msur ce au aprut produsele comerciale, furnizorii au rspuns cererilor lansate de clienii importani i au adugat n grab suportul pentru date calendaristice. Din nefericire, din cauza grabei fiecare a fcut-o n felul propriu. Ori de cte ori migrai instruciuni SQL de la produsul unui furnizor la altul, inei seama de diferenele dintre dialecte. Codul SQL este foarte compatibil i portabil ntre produsele diferiilor furnizori, dar sistemele complete de baze de date pot fi rareori transferate far anumite ajustri.
un alt caracter. Mai mult, unele implementri, cum ar fi cea din Oracle, nu execut o instruciune SQL creia-i lipsete delimitatorul de sfrit, n timp ce alte implementri consider acest delimitator opional. Instruciunile sunt construite ntr-o manier similar cu propoziiile din limba englez, cu unul sau mai multe spaii pentru separarea elementelor de limbaj. Un element de limbaj, asemntor cu un cuvnt dintr-o propoziie, poate fi un cuvnt cheie (SELECT, FROM, WHERE), numele unui obiect al bazei de date (FILM, FILM_ID, TITLU_FILM), un operator (=) sau o constant ('PG') care apare ntr-o instruciune. Instruciunile sunt scrise ntr-o form liber, ceea ce nseamn c nu exist reguli stricte privind poziia elementelor de limbaj pe o linie sau locul n care se poate face trecerea la o linie nou. Totui, n general nu este o idee bun s mprii un element de limbaj pe mai multe linii. Din punct de vedere logic, instruciunea de mai jos este identic cu cea prezentat la nceputul acestei seciuni, dar nu este la fel de uor de citit i de neles: SELECT FILM_ID, TITLU_FILM FROM FILM WHERE MPAA_RATING_COD ='PG'; Instruciunile sunt organizate ntr-o serie de clauze i, de obicei, clauzele trebuie s apar ntr-o anumit ordine atunci cnd sunt folosite (multe clauze sunt opionale). n exemplul nostru, exist trei clauze, fiecare ncepnd cu un cuvnt cheie (SELECT, FROM, WHERE). Elementele de limbaj SQL pot fi scrise cu litere mari, cu litere mici sau n combinaii. Totui, n majoritatea implementrilor i n conformitate cu standardele ANSI/ISO, toate minusculele sunt transformate n majuscule n vederea prelucrrii. Aceasta nu nseamn c datele nu pot conine litere mici, ci c numele obiectelor din baza de date (tabele, coloane etc.) i comenzile trebuie s fie scrise cu litere mari. Excepii notabile sunt Microsoft SQL Server i Sybase, care permit modul de lucru cu diferenierea literelor mari de cele mici, caz n care numele de obiecte scrise diferit sunt tratate ca nume diferite. n MySQL, diferenierea literelor mari de cele mici n numele obiectelor este legat de capacitatea sistemului de operare de a face aceast difereniere. Virgulele sunt folosite pentru separarea articolelor dintr-o list. n exemplul nostru, numele a dou coloane sunt specificate ntr-o list separat prin virgule (FILM_ID, TITLU_FILM). Spaiile care urmeaz dup virgule sunt opionale - putei aduga orice numr de spaii, inclusiv zero. irurile de caractere care apar n instruciunile SQL trebuie s fie ncadrate cu apostrofuri (unele implementri SQL permit i folosirea ghilimelelor). Constantele numerice nu sunt niciodat ncadrate cu apostrofuri. Dac n irul de caractere trebuie s apar un caracter apostrof, sunt inserate dou apostrofuri unul lng cellalt. De exemplu, dac vrei s gsii n baza de date un film numit Sophie's Choice, vei scrie clauza WHERE astfel: WHERE TITLU_FILM = 'Sophie''s Choice' Numele obiectelor bazei de date sunt formate folosind numai litere, cifre i liniue de subliniere. Caracterul underscore (liniua de subliniere) este folosit, de obicei, ca separator ntre cuvinte, pentru mbuntirea lizibilitii. Aa cum am menionat anterior, unele implementri permit folosirea numelor care fac diferena ntre literele mari i cele mici, cum ar fi PersonMiddleName, un stil numit deseori scriere de tip cmil", dar acest stil nu este recomandabil dac dorii ca instruciunile
SQL s fie portabile pe alte implementri. n definitiv, un nume precum PERSONMIDDLENAME" nu este foarte uor de citit. In fiecare implementare SQL este definit un set de cuvinte rezervate, care sunt cuvinte cu o semnificaie specific pentru procesorul SQL al sistemului SGBD i, care urmare, nu trebuie folosite ntr-un alt context - de exemplu ca nume pentru obiectele bazei de date. Scopul acestei restricii este de a evita interpretarea greit a instruciunilor SQL de ctre SGBD. Aa cum probabil bnuii, lista cuvintelor rezervate difer semnificativ de la o implementare SQL la alta, aa c este bine s consultai documentaia implementrii pe care o folosii pentru a v familiariza cu aceste cuvinte. Un comentariu pe o singur linie ncepe cu dou liniue de desprire (--). Cele dou liniue se pot afla la nceputul unei linii, ceea ce nseamn c ntreaga linie este considerat comentariu, sau oriunde n cadrul liniei, caz n care restul liniei, pn la sfrit, este considerat comentariu. De exemplu: -- Acesta este un comentariu pe o singur linie n SQL. Un comentariu pe mai multe linii ncepe cu combinaia dintre o diagonal la dreapta (slash) i un asterisc (/*) i continu pn la ntlnirea combinaiei invers (*/). Avei grij s terminai corect comentariile, altfel multe linii SQL pe care le-ai scris vor fi tratate de ctre SGBDca i cum ar fi comentarii. Iat un exemplu de comentariu pe mai multe linii: /* Acesta este un comentariu pe mai multe linii. Continu pn la ntlnirea combinaiei de caractere care marcheaz sfritul comentariului. */
Limbajul de interogare a datelor (DQL) Limbajul de interogare a datelor (DQL - Data Query Language) include instruciuni SQL care permit obinerea datelor din baza de date. Dei reprezint o parte foarte important a limbajului SQL, DQL este format din instruciuni care folosesc o singur comand: SELECT. Unii furnizori i autori clasific instruciunile DQL i DML n aceeai categorie. Limbajul de manipulare a datelor (DML) Limbajul de manipulare a datelor (DML - Data Manipulation Language) include instruciuni SQL care permit utilizatorului bazei de date s adauge date n baza de date (sub forma rndurilor din tabele), s tearg date i s modifice datele existente n baza de date. Instruciunile SQL care folosesc comenzile INSERT, UPDATE i DELETE sunt considerate parte a DML. Limbajul pentru controlul datelor (DCL) Limbajul pentru controlul datelor (DCL Data Control Language) include instruciuni SQL care permit administratorilor s controleze accesul la datele din baza de date i folosirea diferitelor privilegii ale sistemului DBMS, cum ar fi privilegiul de oprire i pornire a bazei de date. Instruciunile SQL care folosesc comenzile GRANT si ALTER sunt considerate parte a DCL.
ntrebri
Alegei rspunsurile corecte pentru fiecare din urmtoarele ntrebri cu rspunsuri multiple. ntrebrile pot avea mai multe rspunsuri corecte. 1. SQL este a. Un limbaj orientat spre obiecte b. Un limbaj procedural c. Un limbaj nonprocedural d. Un limbaj declarativ e. Un limbaj standard 2. ntr-un aranjament client/server a. Componentele software DBMS ruleaza pe server b. Componentele software DBMS ruleaza pe client c. Componentele software ale clientului SQL ruleaza pe client d. Componentele software ale clientului SQL ruleaza pe server
3. Un client SQL in linia de comanda a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afieaz datele i opiunile de comand folosind caracteristici grafice e. Afieaz rspunsurile la comenzi sub form de mesaje de tip text 4. Un client SQL cu interfata grafica (GUI) a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afieaz datele i opiunile de comand folosind caracteristici grafice e. Afieaz rspunsurile la comenzi sub form de mesaje de tip text 5. Un client SQL bazat pe web a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afieaz datele i opiunile de comand folosind caracteristici grafice e. Afieaz rspunsurile la comenzi sub form de mesaje de tip text 6. Clienii SQL oferii de Oracle sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet 7. Clienii SQL oferii de Microsoft sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet 8. Extensiile SQL create de furnizori a. Cresc portabilitatea codului SQL b. Scad portabilitatea codului SQL c. Contribuie la diferenierea produselor oferire de diferii productori d. Au fost bazate pe cererile pieei e. Sunt compatibile ntre implementrile diferiilor productori 9. Instruciunile SQL a. ncep cu un cuvnt cheie reprezentnd o comand b. Se termin cu un cuvnt cheie reprezentnd o comand c. ncep cu un delimitator, cum ar fi caracterul punct i virgul d. Se termin un delimitator, cum ar fi caracterul punct i virgul e. ncep cu o parantez deschis
10. Elementele limbajului SQL includ a. Cuvinte cheie b. Nume ale obiectelor din baza de date c. Operatori d. Restricii e. Constante 11. Elementele limbajului SQL sunt separate prin a. Virgule b. Exact un spaiu c. Unul sau mai multe spaii d. Linie nou e. Liniue de subliniere 12. Numele obiectelor bazei de date pot include a. Paranteze b. Liniue de subliniere c. Numere d. Litere e. Virgule 13. Instruciunile SQL pot li mprite n urmtoarele categorii a. Limbajul dc definire a datelor (DDI, - Data Definition Language) b. Limbajul dc selectare a datelor (DSL - Dala Selection Language) c. Limbajul dc replicare a datelor (DRL - Dala Replication Language) d. Limbajul pentru controlul datelor (DCL - Data Control Language) e. Limbajul dc manipulare a datelor (DML - Data Manipulation Language) Limbajul de definire a datelor (DDL - Data Definition Language) include urmtoarele instruciuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE Limbajul de interogare a datelor (DQL - Data Query Language) include urmtoarele instruciuni: a. SELECT b. INSERT c. CREATE d. UPDATE e. DELETE 16. Limbajul de manipulare a datelor (DML - Data Manipulation Language) include urmtoarele instruciuni: a. SELECT b. INSERT c. CREATE d. UPDATE e. DELETE 15. 14.
Convenii de sintax
Instruciunile SQL DDL au mai multe opiuni dect alte instruciuni SQL. Urmtoarele convenii sunt pentru a prezenta sintaxa instruciunilor DDL: Cuvintele cheie i cuvintele rezervate din SQL sunt scrise cu majuscule, cum ar fi CREATE TABLE. Informaiile pe care ar trebui s fie furnizate la scrierea instruciunilor sunt scrise cu italic, cum ar fi nume_coloan. Elementele opionale sunt ncadrate n paranteze ptrate, cum ar fi [WITH TIME ZONE]. Opiunile dintr-o list de elemente posibile sunt separate de o bar vertical (simbolul logic pentru sau"), cum ar fi TABLE | VIEW | INDEX. Se pot ntlni uneori ca list de elemente opionale, cum ar fi [NULL | NOT NULL]. Elementele de grup care sunt explicate sau analizate ulterior pe componente (de obicei dup descrierea unui tip principal de instruciune) sunt ncadrate de caracterele mai mic dect" i mai mare dect", cum ar fi <specificaii_pentru_coloan>. Un element care se poate repeta este urmat de trei puncte, cum ar fi. [,<restricie_pentru_tabel>...]. Toate celelalte simboluri, n special virgulele i parantezele, fac parte din sintaxa SQL obligatorie i, ca urmare, trebuie s fie incluse aa cum sunt scrise aici.
Tipuri de date
O coloan este cea mai mic unitate denumit care poate fi referit ntr-o baz de date relaional. Fiecare, coloan trebuie s aib asociate un nume unic i un tip de date. Un tip de date este o categorie pentru formatul folosit de o anumit coloan. Tipurile de date asigur cteva avantaje importante: Restricionarea, datelor din coloana respectiv la caracterele care au sens pentru tipul de date specificat. Asigurarea unor comportamente utile pentru utilizatorul datelor. De exemplu, dac se scade un numr dintr-un alt numr, se obine ca rezultat un numr; dar dac se scade o dat dintr-o alt dat, se obine ca rezultat diferena n zile dintre cele dou date calendaristice. Creterea eficienei sistemului SGBD la stocarea datelor din coloane. SQL accept trei categorii de tipuri de date: tipuri predefinite, tipuri construite i tipuri definite de utilizator. Tipurile de date predefinite sunt cele furnizate de ctre productor ca parte nativ a sistemului SGBD(vor fi tratate n continuare).
Tipurile de date construite, cunoscute i ca tipuri de colecii, conin matrice sau seturi de tipuri de date predefinite, n scopul reprezentrii n SGBD a construciilor de date orientate spre obiect. Tipurile de date definite de utilizator permit utilizatorului bazei de date s defineasc propriile tipuri de date, adaptate unor scopuri specifice. Ultimele dou tipuri de date nu vor fi tratate , fiind prea complicate pentru inteniile cursului. Tipuri de date predefinite din standardul SQL:2003 Se vor prezenta fiecare tip de date n seciuni separate, pentru evitarea confuziilor. Tipuri de date pentru caractere Tipurile de date pentru caractere conin iruri de caractere, adic litere, cifre i alte simboluri permise de sistemul de calcul pe care se afl baza de date. Tipurile de date stardard pentru caractere sunt: Caracter cu lungime fix - Un ir de caractere cu lungime finit. Sintaxa SQL este: CHARACTER(lungime) | CHAR(lungime) Exemplu: NUMAR_SECURITATE CHAR(9) Caracter naional - Acest tip de date poate fi folosit pentru traducerea irurilor de caractere n diferite limbi. Sintaxa SQL este: NATIONAL CHARACTER(lungime) | NCHAR(lungime) Exemplu: TITLU_FILM NCHAR(100) Caracter variabil - Un ir de caractere cu lungime variabil, specificnd lungimea maxim a irurilor de caractere stocate. Sintaxa SQL este: CHARACTER VARYING(lungime_maxim) | VARCHAR(lungime_maxim) Exemplu: NUME_CLIENT VARCHAR(125) Caracter naional variabil O variant a tipului de date pentru iruri de caractere cu lungime variabil, stocata ntr-un set de caractere al unei anumite limbi. Sintaxa SQL este: NATIONAL CHARACTER VARYING( l u n g i m e _ m a x i m ) | NVARCHAR (lungime_maxim) Exemplu: TITLU_FILM NVARCHAR(100)
DECIMAL(precizie, scal) Exemplu: PLATA_PE_ORA_ANGAJAT DECIMAL(5,2) ntreg - Un tip numeric exact care include numai precizia, scris INTEGER sau INT. Numerele ntregi nu au cifre zecimale, aa c scala nu este necesar, deoarece este ntotdeauna zero. Sintaxa SQL este: INTEGER (precizie) | INT (precizie) Exemplu: ID_CONT_CLIENT INTEGER ntreg mic - O variant a tipului INTEGER, scris SMALLINT, care stocheaz numere mai mici i, ca urmare, ocup mai puin spaiu. Sintaxa SQL este: SMALLINT (precizie) Exemplu: ID_CONT_CLIENT SMALLINT ntreg mare - O variant a tipului INTEGER, scris BIGINT, care stochez numere mai mari i ocup mai mult spaiu. Sintaxa SQL este: BIGINT (precizie) Exemplu: ID_CONT_CLIENT BIGINT Numr n virgul mobil - Un tip numeric aproximativ, cu precizia mai mare sau egal cu precizia specificat. Specificarea preciziei este opional. Este scris FLOAT. Sintaxa SQL este: FLOAT (precizie) Exemple: RATA_DOBANDA FLOAT(16) RATA_DOBANDA FLOAT Numr real - Un tip numeric aproximativ, cu precizie definit de implementare. Sintaxa SQL este: REAL Exemplu: RATA_DOBANDA REAL Numr real cu precizie dubl - Un tip numeric aproximativ, cu precizie definit de implementare, dar mai mare sau egal cu precizia definit pentru tipul REAL. Sintaxa SQL este: DOUBLE PRECISION | DOUBLE Exemplu: RATA_DOBANDA DOUBLE PRECISION Tipuri de date temporale Aceste tipuri (numite i tipuri pentru date i ore) stocheaz date care msoar timpul, ntr-un mod oarecare. Tipurile de date temporale conin urmtoarele componente, numite de standard, cmpuri (fields) : Numele cmpului (cuvnt cheie Definiie SQL) Anul calendaristic, pe dou sau YEAR patru cifre MONTH Luna din an DAY Ziua din lun HOUR Ora din zi MINUTE Minutul din or SECOND Secunda din minut Valoarea orei cu diferena de TIMEZONE_HOUR fus orar Valoarea minutului cu diferena TIMEZONE_MINUTE de fus orar
Cmpurile TIMEZONE_HOUR i TIMEZONE_MINUTE sunt incluse n toate tipurile de date temporale pentru care este specificat cuvntul cheie WITH TIMEZONE. Tipurile de date temporale sunt: Data - O dat calendaristic, incluznd cmpurile YEAR, MONTH i DAY. Sintaxa SQL este: DATE [WITH TIMEZONE] Exemplu: DATA_INSCRISA DATE Ora - Un tip de date pentru or, incluznd cmpurile HOUR, MINUTE i SECOND. Sintaxa SQL este: TIME [WITH TIMEZONE] Exemplu: TIMPUL_INSCRIS TIME Marc temporal - Un tip de date combinat pentru dat i or, incluznd cmpurile YEAR, MONTH, DAY, HOUR, MINUTE i SECOND. Sintaxa SQL este: TIMESTAMP [WITH TIMEZONE] Exemplu: DATA_TIMP_ INSCRIS TIMESTAMP Interval - Un interval de timp, incluznd cmpurile specificate printr-un calificator de interval (internal qualifier), care reprezint precizia intervalului. Sintaxa SQL este: INTERVAL cmp_de_start TO cmp_de_sfrit|INTERVAL cmp Exemple: TIMP_LUCRU INTERVAL HOUR TO MINUTE ZILE_INCHIRIERE INTERVAL DAY
Tipurile de date acceptate de Microsoft Access sunt: Text - Echivalent cu tipul de date standard VARCHAR. Poate stoca pn la 255 de caractere. Memo - Conine iruri cu cel mult 65535 de caractere, dar este definit fr specificarea unei dimensiuni. Number - Echivalent cu tipul de date standard NUMERIC, dar precizia i scala sunt stabilite folosind meniul derulant Field Size (Mrimea cmpului). Numerele ntregi pot fi definite alegnd valoarea zero (0) pentru parametrul Decimal Places (Poziii zecimale). Date/Time - Aproximativ echivalent cu tipul de date standard TIMESTAMP, dar poate stoca orice date i or valide ntre anii 100 i 9999. Currency - Un tip de date numeric echivalent cu tipul NUMERIC (19,4), adic un numr cu 15 cifre n stnga punctului zecimal i cel mult 4 cifre n dreapta punctului zecimal. AutoNumber - Un cmp pe 4 sau 16 octei (n funcie de valoarea Field Size) incrementat automat cu o unitate de fiecare dat cnd n tabel este inserat un nou rnd. Yes/No - Aproximativ echivalent cu tipul de date standard BOOLEAN. Totui, Microsoft Access permite ca acest tip de date s fie formatat ca Yes/No, On/Off sau True/False. OLE Object - Similar cu tipul de date standard BLOB, acest tip de date permite stocarea unui obiect Microsoft OLE cu dimensiunea maxim de 1GB (gigaoctet). Hyperlink Un tip de date specializat care poate conine o adres web din Internet. Lookup wizard - Un tip de date specializat care creeaz o legtur ntre o coloan din tabelul curent i coninutul unei coloane dintr-un alt tabel. Acest tip de date poate fi folosit pentru legarea dinamic a tabelelor la crearea formularelor n Microsoft Access. Oracle Oracle SQL accept urmtoarele tipuri de date standard: BLOB - Obiecte binare mari, cu dimensiunea maxim de (4GB-1) x (dimensiunea unui bloc din baza de date). CHAR - iruri de caractere cu lungime fix, coninnd cel mult 2000 de octei. CLOB - Obiecte de tip caracter mari, cu dimensiunea maxim de (4GB- 1) x (dimensiunea unui bloc din baza de date). DATE - Funcioneaz ca tipul standard de date DATE, dar din punct de vedere tehnic seamn mai mult cu tipul DATETIME, deoarece poate stoca att data, ct i ora. Accept date de la 1 ianuarie 4712 .e.n. la 31 decembrie 9999 e.n. Opional, poate fi inclus i ora, n ore, minute i secunde. Dac partea opional este omis, este stocat cu valoarea zero, echivalent cu miezul nopii. DECIMAL - Implementat ca NUMBER(precizie,scal). DOUBLE PRECISION - Implementat ca NUMBER. FLOAT - Implementat ca NUMBER. INTEGER - Implementat ca NUMBER(38). INTERVAL - Un interval de timp, dar sunt acceptate din standard numai variantele INTERVAL YEAR TO MONTH i INTERVAL DAY TO SECOND.
NCHAR - iruri de caractere cu lungime fix ntr-o limb naional, cu dimensiunea maxim de 2000 de octei. NCLOB - iruri de caractere cu lungime fix ntr-o limb naional, cu dimensiunea maxim de (4GB-1) x (dimensiunea unui bloc din baza de date). NUMERIC - Implementat NUMBER(precizie,scal). NVARCHAR - Date de tip caracter cu lungime variabil ntr-o limb naional, cu dimensiunea maxim de 4000 de octei . REAL - Implementat ca NUMBER. SMALLINT - Implementat ca NUMBER(38). TIMESTAMP - Data i ora n ani, luni, zile, ore, minute i secunde. VARCHAR - Date de tip caracter cu lungime variabil, coninnd cel mult 4000 de caractere. Oracle ofer urmtoarele extensii la tipurile de date standard: BFILE - O valoare de localizare a unui fiier binar de dimensiuni mari, stocat n afara bazei de date. LONG - Date de tip caracter cu lungime variabil, cu dimensiunea maxim de 2GB. LONG RAW - Date binare, cu dimensiunea maxim de 2GB. NUMBER - Date numerice, cu cel mult 38 de cifre. Poate stoca valori ntregi sau n virgul mobil. NVARCHAR2 - Identic cu NVARCHAR. RAW - Date binare, cu dimensiunea maxim de 2000 de octeli. ROWID - ir de caractere codat Base 64*, reprezentnd adresa unic a unui rnd n tabelul din care face parte. UROWID - ir de caractere codat Base 64, reprezentnd adresa logic a unui rnd ntr-un tabel indexat. VARCHAR2 - Identic cu VARCHAR, dar Oracle recomand folosirea folosirea acestui tip n loc de VARCHAR, deoarece Oracle e posibil s schimbe la un moment dat implementarea tipului VARCHAR. Valori NULL i logica bazat pe trei valori La definirea coloanelor din tabelele bazei de date, se afl opiunea de a specifica dac valorile nule (null) sunt permise n coloana respectiv. O valoare nul ntr-o baz de date relaional este un cod special care poate fi plasat pe o coloan pentru a indica faptul c valoarea pentru coloana respectiv nu este cunoscut. O valoare nul nu este ace1ai lucru cu un spaiu, un ir vid sau valoarea zero este un cod special care nu are nici o alt semnificaie n baza de date. n Microsoft Access, restricia NOT NULL este controlat de opiunea Required din panoul de proiectare a tabelului. n SQL DDL, se specific cuvintele cheie NULL sau NOT NULL, n definiia coloanei (n dreapta tipului de date al coloanei). n Oracle, DB2 i majoritatea celorlalte baze de date relaionale, dac se omite specificarea acestei restricii, valoarea prestabilit este NULL, ceea ce nseamn c n coloana respectiv sunt valori nule. Pe de alt parte, n Microsoft SQL Server i Sybase Adaptive Server este exact invers: dac se omite specificarea acestei restricii, valoarea prestabi1it este NOT NULL, ceea ce nseamn ca n coloana respectiv nu pot fi valori nule.
ID_CONT_CLIENT INTEGER NOT NULL, CLIENT_CONT_STARE CHAR(1) DEFAULT N NOT NULL, CHECK (CLIENT_CONT_STARE IN (Y, N)),//restr. coloana DATA_INSCRIERE DATE NOT NULL, DATA_INCHEIERE DATE NULL, //NULL daca contul e activ SUMA_DEPOZIT_CLIENT NUMERIC(5,2) NULL, CREDIT_CARD_IND CHAR(1) NOT NULL, CHECK (CREDIT_CARD_IND IN (Y, N)), //restric coloana IND_PERMIS_INCHIRIERE_COPIL CHAR(1) NOT NULL, CHECK(IND_PERMIS_INCHIRIERE_COPIL IN(Y,N PRIMARY KEY (ID_CONT_CLIENTINTEGER ) //restr. tabel );
Componentele din definiia unei coloane sunt: Numele coloanei - Numele coloanei trebuie s fie unic n cadrul tabelului. Tipul de date - Tipul de date trebuie s fie un tip de date valid pentru implementarea SGBD Restrictiile coloanei care sunt prezentate n continuare
Restriciile coloanelor
Restriciile unei coloane limiteaz ntr-un mod oarecare valorile ce pot fi stocate ntr-o coloan a unui tabel. Restriciile coloanelor pot avea oricare dintre urmtoarele forme: Clauza DEFAULT - O expresie care este aplicat coloanei atunci cnd n tabel este inserat un nou rnd, care nu conine o valoare explicit pentru coloana respectiv. Expresia poate fi orice expresie valid. Sintaxa SQL cu o clauz DEFAULT este: [DEFAULT expresie] Exemplu: STARE_CONT_CLIENT CHAR(1) DEFAULT 'N' NOT NULL Restricia NULL | NOT NULL - Specificarea cuvntului cheie NULL permite stocarca valorilor nule ntr-o coloan, n timp ce NOT NULL nu permite stocarca valorilor nule n coloana respectiv. O restricie NOT NULL poate fi scris i sub forma unei restricii CHECK cu condiia IS NOT NULL. Sintaxa SQL i cteva exemple: NULL | NOT NULL Exemple: DATA_INSCRIERE DATE NOT NULL DATA_INCHEIERE DATE NULL Restricia CHECK - O restricie de verificare (check) poate fl folosit pentru impunerea unei reguli care poate fi aplicat unei singure coloane a unui tabel. Condiia inclus n restricie trebuie s fie ndeplinit ori de cte ori datele din coloana respectiv a tabelului sunt modificate n caz contrar, sistemul SGBD va respinge modificarea i va afia un mesaj de eroare. Sintaxa restriciei CHECK i un exemplu: [CONSTRAINT nume restricie] CHECK (condiie)
Exemplu: CREDIT_CARD_IND CHAR(1) NOT NULL, CHECK (CREDIT_CARD_IND IN (Y, N)) Clauz NOT NULL poate fi rescris i sub forma unei restricii CHECK: ID_CONT_CLIENT INTEGER CONSTRAINT CK_CUST _ACCT _ID CHECK (ID_CONT IS NOT NULL) Restricia UNIQUE - O restricie UNIQUE impus asupra unei coloane garanteaz unicitatea valorilor din coloana respectiv a tabelului. Sintaxa: [CONSTRAINT nume_restricie] UNIQUE Exemplu: ID_CONT_CLIENT INTEGER NOT NULL UNIQUE Restricia PRIMARY KEY - O restricie de cheie primar (PRIMARY KEY) impus asupra unei coloane declar coloana respectiv ca fiind cheia primar a tabelului, ceea ce nseamn c n coloana respectiv nu pot exista valori nule, iar valorile trebuie s fie unice n cadrul tabelului. Sintaxa : (CONSTRAINT nume_restricie] PRIMARY KEY
EXEMPLU:
ID_CONT_CLIENT INTEGER NOT NULL PRIMARY KEY Restricia referential (FOREIGN KEY) - O restricie referenial impus asupra unei coloane (numit i restricie de cheie extern) definete relaia dintre o cheie extern i o cheie primar. Sintaxa: [CONSTRAINT nume_restricie] REFERENCES nume_tabel(nume_coloan) [ON DELETE CASCADE | ON DELETE SET NULL] Exemplu: MPAA_CODE_RATING din tabelul FILME este cheie extern pentru tabelul MPPA_RATING, care are cmpurile: MPAA_CODE_RATING i MPAA__RATING _DESCRIERE MPAA_COD_RATING CHAR (5) NOT NULL REFERENCES MPPA_RATING(MPAA_CODE_RATING) Clauza opional ON DELETE spune sistemului SGBD ce s fac atunci cnd este ters rndul referit din tabelul printe cu opiunea de a terge toate rndurile care conin cheia extern (CASCADE) sau de a insera valori nule pentru toate cheile externe (SET NULL).
Restriciile tabelelor
Restricia unei coloane poate fi rescris i ca restricie a ntregului tabel, astfel nct clauza care definete restricia s apar n instruciunea CREATE TABLE dup definiiile tuturor coloanelor, nu dup definiia unei coloane. Principalul avantaj al restriciilor la nivelul tabelului este c pot referi mai multe coloane. Restricia CHECK [CONSTRAINT nume_restricie] CHECK (condiie)
Restricia de mai jos mpiedic stocarea unei valori negative n coloana SUMA_DEPOZITE_CLIENT . Operatorul OR permite stocarea valorilor nule , deoarece o valoare nulA nu este mai mare sau egal cu zero. Exemplu: CONSTRAINT CK_SUMA_DEPOZITE_CLIENT CHECK (SUMA_DEPOZITE_CLIENT >= 0 OR SUMA_DEPOZITE_CLIENT IS NULL) Restricia UNIQUE [CONSTRAINT nume_restricie) UNIQUE (nume_coloan [,nume coloan...]) Conform acestei restricii , combinaia de coloane ID_CONT_CLIENT i DATA_INSCRIERE trebuie s fie unic n rndurile din tabel. Exemplu: CONSTRAINT UK_DATA_INSCR_CONT_CL UNIQUE (ID_CONT_CLIENT, DATA_INSCRIERE ) Restricia PRIMARY KEY [CONSTRAINT nume_restricie] PRIMARY KEY (nume_coloan [,nume_coloan...]) Restricia de mai jos este chiar definiia cheii primare din tabelul CONT_CLIENT [ Exemplu: CONSTRAINT PK_CONT_CLIENT PRIMARY KEY (ID_CONT_CLIENT) Restricia referenial (FOREIGN KEY) Spre deosebire de forma pentru restricia referenial a coloanei, aceasta poate referi mai multe coloane. [CONSTRAINT nume_restricie] FOREIGN KEY (nume_coloan [,nume coloan...]) REFERENCES nume_tabel (nume_coloan [,nume_coloan... [ON DELETE CASCADE |ON DELETE SET NULL] Instruciunea CREATE INDEX Indexurile sunt instrumente puternice, deoarece permit sistemului s gasesc datele mult mai repede, tot aa cum indexul unei cri ne permite s gasim mai rapid ceea ce ne intereseaz. De asemenea, indxurile pe coloanele cheilor externe cresc mult peformanele la unirea tabelelor. Sistemul SGBD ntrein automat indexul, dar activitatea de ntreinere consum din resursele calculatorului. Sintaxa de baz a instruciunii CREATE INDEX este: CREATE [UNIQUE] INDEX nume_index ON nume_tabel (nume_coloan [,nume coloan [ASC | DESC] ]); Cuvntul cheie opional UNIQUE definete indexul ca unic, nsemnnd c nu pot exista dou rnduri din tabel cu exact acceai combinaie de valori n coloanele specificate.
Cuvntul cheie opional ASC creeaz indexul n ordine cresctoare, n timp ce DESC creeaz indexul n ordine descresctoare. Dac nu este specificat nici una dintre cele dou opiuni, ordinea prestabilit este cresctoare. Un index trebuie s aib cel puin o coloan, dar, nu exist o limit superioar a numrului de coloane.
Modificarca definiiei unei coloane. Majoritatea SGBD-urilor nu permit s scdei precizia unei coloanedac tabelul conine date i foarte puine permit s se schimbe tipul de date al unei coloane existente. Sunt acceptate creterea preciziei unei coloane, adugarea sau modificarea valorii prestabilite pentru o coloan, i trcerea de la NULL la NOT NULL sau invers. . ALTER TABLE nume_tabel MODIFY [COLUMN] (<definiie coloan> [,<definiie_co1oan> ...]); Exemplu: ALTER TABLE CONT_CLIENT MODIFY (SUMA_DEPOZIT_CLIENT NUMERIC(7,2) DEFAULT 0 NOT NULL); Adugarea unei restricii. Definiia restriciei este identic cu definiia unei restricii care ar putea aprea ntr-o instruciune CREATE TABLE. ALTER TABLE nume_tabel ADD CONSTRAINT <definiie_restricie>; Exemplu: ALTER TABLE CONT_CLIENT ADD CONSTRAINT CK_SUMA_DEPOZIT_CLIENT CHECK (SUMA_DEPOZIT_CLIENT >= 0 OR SUMA_DEPOZIT_CLIENT IS NULL); tergerea cheii primare a unui tabel. Dac cheia primar este referit de restricii refereniale, trebuie mai nti terse restriciile respective. ALTER TABLE nume_tabel DROP PRIMARY KEY; Redenumirea unei coloane. Dintre bazele de date care accept aceast sintax este numai Oracle, ncepnd cu versiunea 8.0 Microsoft SQL Server are o procedur stocat, numit sp_rename, care v pune la dispoziie o modalitate de a redenumi coloanele, tabelele i alte obiecte ale bazei de date. ALTER TABLE nume_tabel RENAME nume_vechi_coloan TO nume _nou_coloan; Instruciunea DROP Instruciunea DROP este cea mai simpl dintre instruciunile DDL. Sintaxa de baz este: DROP <tip_obiect> nume_obiect [<opiuni_de_tergere>] Tipul de obiect specific tipul obiectului care urmeaz s fie ters, cum ar fi INDEX, TABLE sau VIEW. Opiunile de tergere sunt specifice fiecrui SGBD. Sintaxa este diferit de la un productor la altul PostgreSQL i MySQL folosesc n acest scop cuvntul cheie CASCADE, n timp ce n Oracle trebuie s se foloseasc CASCADE CONSTRAINTS. Exemplu:
DROP TABLE COD_CLIENT; DROP TABLE COD_CLIENT CASCADE CONSTRAINTS; (Oracle) DROP TABLE COD_CLIENT CASCADE; (MySQL / PostgreSQL) DROP INDEX IX_TITLU_FILM;
ntrebri i probleme
Alegei rspunsurile corecte pentru fiecare din urmtoarele ntrebri cu rspunsuri multiple. Reinei c ntrebrile pot avea mai multe rspunsuri corecte. 1. Tipurile de date ofer urmtoarele avantaje a. Respect standardele publicate b. Ofer un set de comportamente utile pentru utilizatorii bazei c. Asigur independena fa de date d. Restricioneaz datele din coloane la caractere care au sens n context e. Ajut sistemul DBMS s stocheze mai eficient datele din coloane 2. Tipurile de date pentru caractere a. Sunt mai flexibile dect tipurile de date numerice b. Accept att date cu lungime fix, ct i date cu lungime variabil. c. Necesit ntotdeauna specificarea preciziei i a scalei d. Determin completarea coloanelor pn la lungimea maxim maxim e. Pot stoca iruri de caractere n format specific unei limbi naionale 3. Tipurile de date numerice Sunt mai flexibile dect tipurile de date pentru caractere Restricioneaz valorile din coloane la numere i simboluri nrudite, cum ar fi virgulele i simbolul dolar c. Necesit ntotdeauna specificarea preciziei i a scalei d. Stocheaz valori exacte sau aproximative e. Sunt potrivite pentru a fi folosite n calcule 4. Tipurile numerice standard includ a. INTEGER b. NUMBER c. FLOAT d. BOOLEAN e. INTERVAL 5. Tipurile de date temporale standard includ a. DATETIME b. DATE c. TIMESTAMP d. TIMEZONE e. TIME 6. Valorile NULL a. b. c. d. e. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute nseam acelai lucru ca i spaiile libere Sunt egale cu alte valori NULL Nu sunt egale cu alte valori NULL Sunt ntotdeauna permise n mod prestabilit a. b.
7. Instruciunile DDL includ a. CREATE b. ALTER c. DELETE d. INSERT e. UPDATE 8. Instruciunea CREATE DATABASE a. Funcioneaz exact la fel n toate sistemele DBMS relaionale b. Specifie ntotdeauna numele bazei de date c. Specifie ntotdeauna numele proprietarului bazei de date d. Poate include parametri specifici productorului e. Funcioneaz la fel cu instruciunea CREATE SCHEMA 9. Definiia unei coloane din instruciunea CREATE TABLE poate include a. Numele tabelului b. Numele coloanei c. restricie la nivel de tabel d. clauz DEFAULT e. O clauz NULL sau NOT NULL 10. Numele unei coloane dintr-un tabel a. Trebuie s fie specificat n instruciunea CREATE TABLE b. Trebuie s fie unic n cadrul bazei de date c. Trebuie s fie unic n cadrul tabelului d. Poate fi folosit ntr-un singur index e. Trebuie s fie specificat n instruciunea ALTER TABLE 11. O restricie la nivel de coloan a. Poate referi una sau mai multe coloane b. Poate fi inclus ntr-o instruciune CREATE TABLE sau ALTER TABLE c. Folosete o sintax identic sau aproape identic cu cea a unei restricii de acelai tip la nivel de tabel d. Poate fi folosit oriunde ar putea fi folosit o restricie la nivel de tabel e. Are o sintax care difer de la un tip de restricie la altul 12. Sintaxa corect pentru clauza DEFAULT este a. DEFAULT (precizie, scal) b. DEFAULT [NULL | NOT NULL] c. DEFAULT (expresie) d. DEFAULT (numecoloan) REFERENCES nametabel (nume_coloan.) e. DEFAULT [UNIQUE | PRIMARY KEY] 13. Sintaxa corect pentru o restricie NOT NULL este a. nume_coloan tip--dedate IS NOT NULL b. nume_coloan tipdedate NOT NULL c. DEFAULT [NULL | NOT NULL] d. CREATE NOT NULL INDEX ON nume_coloan e. numecoloan REFERENCES NOT NULL 14. Sintaxa corect pentru o restricie UNIQUE este a. [CONSTRAINT numerestricie] UNIQUE (nume_coloan) b. [CONSTRAINT numerestricie] UNIQUE (nume_tabel) c. DEFAULT UNIQUE (nume_coloan) d. nume_coloan REFERENCES UNIQUE nume_tabel e. DEFAULT [UNIQUE | PRIMARY KEY] 15. Sintaxa corect pentru o restricie referenial este
[CONSTRAINT numerestricie] REFERENCES nume_index [CONSTRAINT numerestricie] REFERENCES nume_tabel FOREIGN KEY nume_coloan REFERENCES nume_tabel (nume_coloan) d. REFERENCES numetabel (nume_coloan) e. nume_coloan REFERENCES UNIQUE nume_tabel 16. Instruciunea CREATE INDEX a. Poate fi folosit pentru crearea restriciilor de unicitate i cheie primar b. Poate include cuvntul cheie UNIQUE c. Trebuie s refere dou sau mai multe nume de coloane d. Poate include cuvintele cheie ASC sau DESC pentru orice coloan e. Poate specifica ordinea ascendent sau descendent pentru una sau mai multe coloane 17. Instructiunea CREATE VIEW a. Stocheaz o interogare n baza de date b. Poate include cuvntul cheie opional CASCADE c. Poate include cuvntul cheie opional OR REPLACE d. Trebuie s conin o comand DMI, valid e. Trebuie s conin o instruciune SELECT valid 18. Utilizrile valide ale instruciunii ALTER TABLE includ a. Adugarea coloanelor b. Modificarea lungimii sau a preciziei coloanelor c. Redenumirea unui tabel d. Eliminarea unei chei primare e. Adugarea unei chei primare 19. O instruciune ALTER TABLE nu poate fi folosit pentru a. Schimbarea tipului de date al unei coloane la un tip numeric dac n coloana respectiv exist date de alt tip b. Redenumirea unei coloane c. Schimbarea unei restricii din NULL n NOT NULL pentru o coloan care conine valori nule d. Eliminarea unei chei exteme care refer o cheie primar e. Eliminarea unei chei primare dac exist chei exteme care refer cheia primar 20. Instruciunea DROP poate fi folosit pentru a terge a. restricie referenial b. Un index c. Un tabel d. coloan dintr-un tabel e. vizualizare
a. b. c.
Ordinea prestabilit pentru fiecare coloan este ascendent, dar se poate aduga cuvntul cheie ASC dup numele coloanei pentru obinerea unei ordonri ascendente sau cuvntul cheie DESC pentru obinerea unei ordonri descendente. Nu este obligatoriu ca numele coloanelor din lista ORDER BY s fie incluse i n lista de rezultate (adic n lista SELECT). Motorul SQL din SGBD va gsi cea mai bun cale de ordonare a coloanelor. n general, sortarea datelor este un proces costisitor din punct de vedere al resurselor de calcul, aa c majoritatea sistemelor SGBD folosesc un index pentru accesul la rnduri n ordinea dorit, presupunnd c exist, i fac o sortare propriu-zis numai ca ultim soluie. Se poate folosi pseudonimele coloanelor n clauza ORDER BY, dar dac se face acest lucru se foreaz motorul SQL s sorteze rezultatele abia dup rularea interogrii. n locul coloanelor, se poate specifica n lista de ordonare poziia relativ a coloanelor. De exemplu, clauza ORDER BY 1,2 va sorta rezultatele n ordine ascendent dup primele dou coloane din setul de rezultate. Numrul specificat nu are nici o legtur cu poziia coloanei n tabelul sau vizualizarea surs. Aceast opiune nu este agreat n programarea SQL formal, deoarece dac ulterior cineva modific interogarea, este posibil s amestece coloanele din lista SELECT, fr s-i dea seama c astfel schimb i coloanele folosite pentru sortarea rezultatelor. SELECT M P AA_ RATING_COD AS RATING, COD_GEN_FILM AS GEN, TITLU_FILM FROM FILM ORDERBY MPAA_ RATING_COD, COD_GEN_FILM Dac dorim s ordonm acum cresctor dup rating i descresctor dup gen, atunci instruciunea de mai sus odificat va fi SELECT M P AA_ RATING_COD AS RATING, COD_GEN_FILM AS GEN, TITLU_FILM FROM FILM ORDERBY MPAA_ RATING_COD ASC, COD_GEN_FILM DESC; Observaie: Oracle va afia titlu de coloana la dimensiunea maxim a valorilor din coloana(de ex. dac n coloana RATING val cea mai mare este de 5 caractere, interogarea va afia RATIN). n noua versiune de SQL produs de Oracle, iSQL*Plus, nu mai prescurteaz.
Operatori de comparare
Operatorii de comparare sunt folosii n clauza WHERE pentru compararea a dou valori, avnd ca rezultat o valoare logic de adevrat" sau fals".
Cele dou valori comparare pot fi constante furnizate n clauza WHERE, valori ale unor coloane din baza de date sau combinaii ale celor dou. Operatorii de comparare care pot fi folosii n clauza WHERE sunt prezentai n tabelul urmtor: Operator = < <= > >= != <> Exemple: S se afieze toate filmele pentru care RATING are valoarea PG-13. SELECT M P AA_ RATING_COD AS RATING, TITLU_FILM FROM FILM WHERE M P AA_ RATING_COD = 'PG-13' ORDER BY TITLU_FILM; S se afieze pentru care RATING are alt valoare dect PG-13. SELECT COD_RATING AS RATING, FILM FROM FILM WHERE COD_RATING <> 'PG-13' ORDER BY TITLU_FILM; S se afieze toate filmele cu preul de vnzare cu amnuntul pentru formatul DVD (DVD Retail Price) mai mic de 19.99, n ordinea descresctoare a preurilor. SELECT PRET_VANZARE_DVD, TITLU_FILM FROM FILM WHERE PRET_VANZARE_DVD < 19.99 ORDER BY PRET_VANZARE_DVD DESC; S se afieze filmele cu preul de vnzare cu amnuntul pentru formatul DVD (DVD Retail Price) de 19.99 sau mai mic. SELECT PRET_VANZARE_DVD, TITLU_FILM FROM FILM WHERE PRET_VANZARE_DVD <= 19.99 ORDER BY PRET_VANZARE_DVD DESC; S se afieze toate filmele cu preul de vnzare cu amnuntul pentru formatul DVD (DVD Retail Price) mai mare de 25.00, n ordinea cresctoare a preurilor. SELECT PRET_VANZARE_DVD, TITLU_FILM FROM FILM WHERE PRET_VANZARE_DVD >= 25.00 ORDER BY PRET_VANZARE_DVD DESC; Descriere Egal cu Mai mic dect Mai mic sau egal Mai mare dect Mai mare sau egal Diferit de Diferit de (standard ANSI)
Operatori conjunctivi
Uneori sunt necesare condiii multiple pentru a ngusta setul de rezultate al unei interogri. Atunci cnd sunt folosite mai multe condiii, ele trebuie s fie combinate din punct de vedere logic n clauza WHERE, iar aceasta este sarcina operatorilor conjunctivi. Aceti operatori sunt: AND (I) - Clauza WHERE este evaluat ca adevrat" dac toate condiiile conectate cu operatorul AND sunt adevrate. OR (SAU) - Clauza WHERE este evaluat ca adevrat" dac oricare din condiiile conectate cu operatorul OR este adevrat. Lucrurile devin complicate dac operatorii AND i OR sunt combinai n aceeai clauz WHERE. Operatorul AND are prioritate mai mare i, ca urmare, este evaluat naintea operatorilor OR. Exemple de folosire a operatorilor conjunctivi: S se afieze toate filmele pentru care categoria RATING este PG-13 i preul de vnzare cu amnuntul pentru formatul DVD este 19.99 sau mai mic, n ordinea cresctoare a preurilor. SELECT COD_RATING AS RATING, PRET_VANZARE_DVD AS PRET, TITLU_FILM FROM FILM WHERE COD_RATING = 'PG-13' AND PRET_VANZARE_DVD <= 19.99 ORDER BY PRET_VANZARE_DVD; S se afieze toate filmele pentru care categoria RATING este PG-13 sau preul de vnzare cu amnuntul pentru formatul DVD este 19.99 sau mai mic, n ordinea cresctoare a preurilor. SELECT COD_RATING AS RATING, PRET_VANZARE_DVD AS PRET, TITLU_FILM FROM FILM WHERE COD_RATING = 'PG-13' OR PRET_VANZARE_DVD <= 19.99 ORDER BY PRET_VANZARE_DVD; S se afieze toate filmele pentru care categoria RATING este PG-13 i sunt din genul dram sau aciune/aventur. SELECT COD_RATING AS RATING, PRET_VANZARE_DVD AS PRET, TITLU_FILM FROM FILM WHERE COD_GEN_FILM= 'ActAd' OR COD_GEN_FILM = 'Drama' AND COD_RATING = 'PG-13' ORDER BY COD_GEN_FILM, COD_RATING; S se adauge parantezele necesare, astfel nct s obinem filmele cu categoria PG-13 i genul aciune/aventur sau dram. SELECT COD_GEN_FILM AS GEN,
COD_RATING AS RATING, TITLU_FILM FROM FILM WHERE (COD_GEN_FILM = 'ActAd' OR COD_GEM_FILM = 'Drama') AND COD_RATING='PG-13' ORDER BY COND_GEN_FILM, COD_RATING;
Operatori logici
Operatorii logici folosesc cuvinte cheie n locul simbolurilor la formarea expresiilor de comparare. La oricare dintre aceti operatori poate fi adugat cuvntul cheie NOT, pentru a inversa valoarea logic a comparaiei. IS NULL Operatorul IS NULL este folosit pentru a determina dac o valoare este nul. Exemple: S se gseasc toate conturile de clieni active, adic toate conturile pentru care coloana DATATERMINATA conine o valoare nul: SELECT ID_CONT_CLIENT FROM CONT_CLIENT WHERE DATA_INCHEIERE IS NULL; S se gseasc toate conturile inactive, adic toate conturile pentru care coloana DATATERMINATA conine o alt valoare dect NULL: SELECT ID_CONT_CLIENT FROM CONT_CLIENT WHERE DATA_INCHEIERE IS NOT NULL; BETWEEN Operatorul BETWEEN este folosit pentru a determina dac o valoare se ncadreaz ntr-un interval special. Intervalul este specificat folosind o valoare minim i o valoare maxim, fiind un interval inclusiv, ceea ce nseamn c include i valori specificate. Exemple: S se afieze toate filmele cu preul de vnzare cu amnuntul pentru formatul DVD ntre 14.99 i 19.99, ordonate cresctor dup pre. SELECT TITLU_FILM, PRET_VANZARE_DVD FORM FILM WHERE PRER_VANZARE_DVD BETWEEN 14.99 AND 19.99 ORDER BY PRER_VANZARE_DVD; S se afieze toate filmele pentru care preul de vnzare cu amnuntul pentru formatul DVD nu este n intervalul 14.99-19.99, ordonate cresctor dup pre. SELECT TITLU_FILM, PRET_VANZARE_DVD FROM FILM WHERE PRET_VANZARE_DVD NOT BETWEEN 14.99 AND 19.99 ORDER BY PRET_VANZARE_DVD; S se afieze toate conturile de clieni n luna ianuarie 2005.
SELECT ID_CONT_CLIENT, DATA_INSCRIERE CONT_CLIENT WHERE DATA_INSCRIERE BETWEEN 2005/01/01 AND 2005/01/31;
LIKE
Operatorul LIKE este folosit pentru a compara o valoare de tip caracter cu un tipar*, returnnd valoarea logic adevrat dac valoarea de tip caracter se ncadreaz n tipar i fals" n caz contrar. Pentru definirea tiparului pot fi folosite dou caractere de nlocuire: Liniua de subliniere (_) - Caracterul liniu de subliniere poate fi folosit drept caracter de nlocuire poziional, ceea ce nseamn c se potrivete cu orice caracter aflat pe poziia respectiv n irul de caractere evaluat. Procent (%) - Simbolul procent (%) poate fi folosit drept caracter de nlocuire nepoziional, ceea ce nseamn c se potrivete cu orice numr de caractere, indiferent de lungime. Microsoft Access ofer o caracteristic similar, dar pentru caracterul de nlocuire poziional este folosit semnul de ntrebare (?), iar pentru caracterul de nlocuire nepoziional este folosit asteriscul (*) aceste caractere corespund conveniilor folosite n DOS si Visual Basic. Exemple de tipare: Tipar %Now Now% %Now% N_w %N-w% Interpretare Se potrivete cu orice ir de caractere care se termin cu Now". Se potrivete cu orice ir de caractere care incepe cu Now". Se potrivete cu orice ir de caractere care confine Now" (1a inceput, la sfrit sau n mijloc). Se potrivete cu orice ir de caractere format din exact trei caractere, care ncepe cu N" i se termin cu w". Se potrivete cu orice ir de caractere care conine litera N", urmat de orice alt caracter, urmat de litera w" (1a nceputul, la sfritul sau undeva n mijlocul irului de caractere)
Datele din bazele de date relaionale fac ntotdeauna diferenierea literelor mari de cele mici. O liter mica din date nit se potrivete cu o liter mare din tiparul unei clauze LIKE, i invers. Exemplu de utilizare a operatorului LIKE: S se afieze toate titlurile de filme care conin irul de caractere on": SELECT TITLU_FILM FROM FILM WHERE TITLU_FILM LIKE '%on%'; Dac se intenioneaz s se gseasc titlurile care conin cuvntul on", nu literele on" din alte cuvinte, ar fi trebuit s includ n tipar i spatiile necesare, ca n exemplul urmtor:
IN Operatorul IN este folosit pentru a determine dac o valoare face parte dintr-o list de valori. Lista poate fi specificat ca valori literale, folosind o list de valori separate prin virgule i ncadrate ntre paranteze, sau poate fi selectat din baza de date folosind o subselecie (o subinterogare), care este o interogare n cadrul unei alte interogri. Exemple de utilizare a operatorului IN: S se afieze toate filmele pentru care COD_GEN_FILM este Drama, Forgn sau Rmce. SELECT COD_GEN_FILM AS GEN, TITLU_FILM FROM FILM WHERE COD_GEN_FILM IN ('Drama','Forgn','Rmce') ORDER BY COD_GEN_FILM, TITLU_FILM; S se afieze toate filmele pentru care descrierea genului conine cuvntul and". Avei nevoie de o subinterogare prin care s gsii toate valorile COD_GEN_FILM care conin cuvntul and" n descriere. Operatorul IN este apoi folosit pentru a gsi filmele care au unul dintre codurile selectate de subinterogare. SELECT COD_GEN_FILM AS GEN, TITLU_FILM FROM FILM WHERE COD_GEN_FILM IN (SELECT COD_GEN_FILM FROM GEN_FILM WHERE GEN_FILM DESCRIPTION LIKE '% and %') ORDER BY COD_GEN_FILM AS GEN, TITLU_FILM; EXISTS Operatorul EXISTS este folosit pentru a detemina dac o subinterogare conine nregistrri. Dac n setul de rezultate al subinterogrii nu exist nici un rnd, operatorul returneaz valoarea false; dac setul de rezultate conine cel puin un rnd, valoarea devine adevrat. Exemple de utilizare a operatorului EXIST: Filmul The Last Samurai se nchiriaz bine att n format DVD, ct i-n format VHS i se dorete s se asigure c n inventarul magazinului exist o copie VHS. Tabelul FILM_COPIAT conine un rnd pentru fiecare copie a unui film din inventarul magazinului, aa c putei folosi o subinterogare pentru a afla dac exist copii VHS ale filmului n inventar. De cele mai multe ori, operatorul EXISTS este folosit in conjuncie cu o form mai complex de subinterogare, numit subinterogare corelat. (correlated subquery),n care valorile datelor din interogarea extern (ID_FILM, n acest caz) sunt comparate cu rndurile din interogarea inten. SELECT ID_FILM, TITLU_FILM FROM FILM m WHERE TITLU_FILM = 'The Last Samurai' AND EXISTS (SELECT ID_FILM FROM FILM_COPIAT c WHERE m. ID_FILM = c. ID_FILM); Dac se inverseaz logica, folosind operatorul NOT EXISTS, putei afia titlul filmului numai dac nu exist o copie VHS n inventar. SELECT ID_FILM, TITLU_FILM
FROM FILM m WHERE TITLU_FILM = 'The Last Samurai' AND NOT EXISTS (SELECT ID_FILM FROM FILM_COPIAT c WHERE m. ID_FILM = c. ID_FILM); Operatori aritmetici n SQL, operatorii aritmetici sunt folositi pentru efectuarea calculelor matematice la fel ca i n formulele dintr-o foaie de calcul tabelar sau ntr-un limbaj de programare, precum Java sau C. Cei patru operatori aritmetici din SQL sunt: Descriere Operator + Adunare Scdere * nmulire / mprire Ca i n cazul operatorilor conjunctivi, dac se amestec operatorii aritmetici n aceeai instruciune SQL fr a folosi paranteze, ordinea n care sunt evaluate operaiile este determinat de prioritatea predefinit. Din fericire, prioritatea operatorilor din SQL este cea pe care o folosim n operaiile matematice obinuite. Exemple de utilizare a operatorilor aritmetici: Ct v-ar costa s cumprai copiile VHS i DVD ale filmului The Last Samurai? SELECT PRET_VANZARE_VHS + PRET_VANZARE _DVD AS COST FROM FILM WHERE TITLU_FILM = 'The Last Samurai'; Ct v-ar costa aceeai achiziie dac ai avea un bon valoric de 5$? SELECT (PRET_VANZARE _VHS + PRET_VANZARE _DVD) - 5 AS COST FROM FILM WHERE TITLU_FILM = 'The Last Samurai'; Dac taxele sunt de 8.25% (0.0825), ct reprezint taxele de vnzare din costul achiziiei anterioare? SELECT (PRET_VANZARE _VHS+ PRET_VANZARE _DVD) * 0.0825 AS TAX FROM FILM WHERE TITLU_FILM = 'The Last Samurai'; Care este costul mediu pentru o copie a filmului The Last Samurai? SELECT (PRET_VANZARE_VHS+PRET_VANZARE _DVD) / 2 AVG_COST FROM FILM WHERE TITLU_FILM = 'The Last Samurai' Funcii SQL elementare O funcie este un tip special de program, care returneaz o singur valoare de fiecare data cnd este apelat. Termenul provine de la conceptul matematic al unei funcii. n SQL, funciile necesit ntotdeauna specificarea unei expresii, care deseori
AS
include numele unei coloane. Cel mai des, funciile sunt folosite n lista de coloane a unei instruciuni SELECT, sunt apelate pentru fiecare rnd prelucrat de interogare i, ca urmare, returneaz o singur valoare pentru fiecare rand din setul de rezultate. Uneori este folosit termenul funcie de coloan, pentru a indica faptul c funcie este aplicat unei coloane dintr-un tabel sau o vizualizare. Un numr de funcii sunt furnizate de productorul DBMS i se pot scrie propriile funcii, folosind un limbaj special livrat mpreun cu sistemul DBMS, cum ar fi PL/SQL pentru Oracle sau Transact SQL pentru Microsoft SQL Server i Sybase Adaptive Server. Funciile pot fi clasificate n multe moduri, dar majoritatea specialitilor le mpart dup ceea ce fac.
Atenie la folosirea funciilor SQL n condiiile WHERE. n cele mai multe situaii, pentru o coloan creia i este aplicat o funcie nu poate fi folosit indexarea. Ca urmare, n cazul tabelelor mari, utilizarea funciilor n condiiile WHERE poate duce la probleme de performan cu adevrat memorabile. LOWER Funcia LOWER este inversa funciei UPPER transform literele dintr-un * de caractere n litere mici. at cteva exemple de utilizare a funciei LOWER: S se afieze comediile (GEN_COD_FILM = 'Comedy') scriind titlurile cu minuscule. SELECT LOWER(TITLU_FILM) AS TITLU_FILM FROM FILM WHERE GEN_COD_FILM = 'Comedy'; Se poate folosi funcia LOWER ntr-o clauz WHERE, atunci cnd nu titi sigur ce tip de litere confine textul pe care vrei s-1 comparai. Afiai toate filmele care au n titlu cuvntul of ", indiferent dac este scris cu litere mari sau mici. SELECT TITLU_FILM FROM FILM WHERE LOWER(TITLU_FILM) LIKE ' % of %' OR LOWER(TITLU_FILM) LIKE 'of % ' OR LOWER(TITLU_FILM) LIKE ' % of '; SUBSTR Funcia SUBSTR spare n majoritatea implementrilor SQL, dar uneori are un nume puin diferit. De exemplu, funcia se numete SUBSTRING n Microsoft SQL Server, Sybase Adaptive Server i MySQL, dar SUBSTR n Oracle i D132. Funcia returneaz o poriune a irului de caractere, n funcie de parametrii furniizai, care specific numele coloanei, poziia de nceput a subirului n datele coloanei i lungimea subirului returnat (numrul de caractere). Dei este o utilizare mai puin obinuit, funcia SUBSTR accept i un ir de caractere literal n locul numelui unei coloane. Iat forma general a funciei, urmat de un exemplu: SUBSTR (numele coloanei, poziia de nceput, lungimea subirului n tabelul PERSON, unele persoane au al doilea nume n ntregime, alii au numai initiale. Afiati numele complet al persoanelor al cror nume de familie ncepe cu litera B", sub forma unui singer ir de caractere care conine prenumele, iniiala i numele de familie. Iat soluia, pentru Oracle: SELECT NUME_PERSOANA || ' ' || SUBSTR(PRENUME_PERSOANA, 1, 1) || ' . ' || NUME_FAMILIE_PERSOANA AS NUME_INTREG FROM PERSOANA WHERE SUBSTR(NUME_FAMILIE_PERSOANA, 1, 1)='B' Observai folosirea funciei SUBSTR n clauza WHERE pentru a elimina din rezultate persoanele al cror nume de familie nu ncepe cu litera B". Ar trebui s v putei deja gndi la alte moduri de a face acest lucru, prin folosirea operatorului LIKE. Iat i versiunea pentru Microsoft SQL Server a exemplului anterior:
SELECT NUME_PERSOANA + ' ' + SUBSTRING(PRENUME_PERSOANA, 1, 1) +' . '+ NUME_FAMILIE_PERSOANA AS NUME_INTREG FROM PERSOANA WHERE SUBSTRING (NUME_FAMILIE_PERSOANA, 1, 1) = 'B' LENGTH Funcia LENGTH returneaz lungimea unui ir de caractere. Microsoft SQL Server i Sybase Adaptive Server folosesc numele LEN pentru versiunea proprie a acestei funcii. Exemple: S se afieze lungimea titlului pentru filmul a crui valoare ID_FILM este 1. Presupunem c folosii o baz de date oracle, DB2 sau MzSQL. SELECT TITLU_FILM, LENGTH (TITLU_FILM) AS LENGTH FROM FILM WHERE ID_FILM = 1; S se afieze lungimea titlului pentru filmul a crui valoare ID_FILM este 1. Presupunem c folosii o baz de date Microsoft SQL Server. SELECT TITLU_FILM, LEN (TITLU_FILM) AS LENGTH FROM FILM WHERE LEN (TITLU_FILM) < 10;
Funii matematice
Funciile matematice manipuleaz valori numerice, n conformitate cu regulile matematicii. ROUND Funcia ROUND rotunjete o valoare la un numr specificat de zecimale. Valoarea numeric este furnizat prin primul parametru, iar numrul de zecimale prin cel de-al doilea. n continuare este prezentat formatul general al funciei ROUND. ROUND (expresie numeric, numr de poziii zecimale) Care este costul mediu al unei copii a filmului The Last Samurai, rotunjit la dou zecimale? SELECT ROUND((PRET_VANZARE_VHS + PRET_VANZARE _DVD) / 2, 2) AS AVG_COST FROM FILM WHERE TITLU_FILM = 'The Last Samurai';
SIN TAN
Sinusul trigonometric al unui unghi specificat n radiani Tangenta trigonometric a unui unghi specificat n radiani
Funcii de conversie Funciile de conversie transform date dintr-un tip de date n altul. CAST Funcia CAST transform date dintr-un tip de date n altul. Iat sintaxa general a funciei CAST, urmat de un exemplu: CAST (expresie AS tip de date) Afiati preul pentru formatul DVD al filmului The Last Samurai, cu un simbol dolar n faa sumei. Valoarea numeric trebuie s fie convertit ntr-un ir de caractere pentru a putea fi concatenat cu o valoare literal coninnd simbolul dolar. SELECT '$' || CAST(PRET_VANZARE _DVD AS VARCHAR(6)) AS PRET FROM FILM WHERE TITLU_FILM = 'The Last Samurai'; CONVERT TO Multe implementri DBMS pun la dispoziie o funcie CONVERT sau CONVERT TO. Totui este recomandat folosirea funciei CAST, deoarece este implementat ntr-un mod mai unitar de ctre diferii productori. Funcii de agregare i gruparea rndurilor O funcie de agregare (aggregate functions) este o funcie care combin mai multe rnduri de date ntr-un singur rnd. Tabelul urmtor prezint funciile de agregare acceptate n majoritatea implementrilor SQL: Descriere Calculeaz valoarea medie pentru o coloan sau o expresie. COUNT Numr valorile dintr-o coloan. MAX Gsete valoarea maxin dintr-o coloan. MIN Gsete valoarea minim dintr-o coloan. SUM nsumeaz valorile dintr-o coloan. Exemple: Care este preul mediu al unui DVD? SELECT ROUND(AVG(PRET_VANZARE _DVD),2) AS AVG_PRET FROM FILM; Cte filme exist n tabelul FILM? SELECT COUNT(*) AS NUM_FILM FROM FILM; Cte genuri diferite de filme sunt reprezentate n tabelul FILM? SELECT COUNT(DISTINCT(COD_GEN_FILM)) AS NUM_GEN FROM FILM; Care sunt lungimea minim i maxim a titlurilor filmelor? SELECT MIN(LENGTH(TITLU_FILM)) AS MIN_LENGTH, MAX(LENGTH(TITLU_FILM)) AS MAX_LENGTH FROM FILM; Funcie AVG
Clauza GROUP BY GROUP BY cere sistemului DBMS s grupeze rndurile selectate de interogare pe baza valorilor din una sau mai multe coloane i s aplice funcia (sau funciile) de agregare fiecrui grup, returnnd un rnd pentru fiecare grup din setul de rezultate. Sistemul DBMS va ordona rndurile selectate de interogare dup coloanele din clauza GROUP BY, aa c grupurile vor fi returnate n ordine ascendent, exceptnd cazul n care se adug o clauz ORDER BY care specific un alt mod de ordonare. Exemplu: Afiati fiecare cod de gen, mpreun cu numrul de filme asociate fiecrui cod. SELECT COD_GEN_FILM AS GEN, COUNT(*) AS COUNT FROM FILM GROUP BY COD_GEN_FILM; Ce se ntmpl dac scoatei clauza GROUP BY din aceast interogare? Sistemul DBMS retumeaz un mesaj de eroare i, din nefericire, mesajul de eroare este deseori destul de criptic. Functia COUNT(*) este o functie de agregare i, n absenta clauzei GROUP BY, retumeaz un singur rnd de date. Operatori pentru interogri compuse Uneori este util s se ruleze interogri multiple i s se combine rezultatele ntr-un singur set de rezultate. UNION Operatorul UNION adaug rndurile din setul de nregistrri al unei interogri la cel al unei alte inregistrri i, n acelai timp, elimin rndurile duplicate, ntr-un mod similar cu cel al cuvntului cheie DISTINCT. Operaia este permis numai dac interogrile sunt compatibile din punctul de vedere al uniunii, ceea ce nseamn c au acelai numr de coloane i c tipurile de date ale coloanelor corespondente sunt compatibile. Exemplu: Afiai pe o singur coloan toate valorile nenule pentru taxa de inchiriere i taxa de ntrziere din tabelul FILM_NCHIRIAT. SELECT INCHIRIAT_FEE AS FEE FROM FILM_INCHIRIAT WHERE INCHIRIAT _FEE IS NOT NULL UNION SELECT LATE_OR_LOSS_FEE AS FEE FROM FILM_INCHIRIAT WHERE LATE _OR_ LOSS FEE IS NOT NULL; UNION ALL UNION ALL funcioneaz la fel ca i operatorul UNION, exceptnd faptul c rndurile duplicate nu sunt eliminate. INTERSECT Operatorul INTERSECT gsete valorile selectate dintr-o interogare, care apar i ntr-o alt interogare. n esen, gsete intersecia valorilor din cele dou interogri. Totui, doar un numr mic de sisteme DBMS (cele mai importance fiind Oracle i DB2) implementeaz acest operator. Nu-1 vei gsi n Microsoft SQL Server sau MySQL.
Exemplu: Exist n tabelul FILM filme pentru care preul pentru DVD este egal cu preul pentru VHS? SELECT INCHIRIAT_FEE AS FEE FROM FILM_ INCHIRIAT WHERE INCHIRIAT _FEE IS NOT NULL INTERSECT SELECT LATE_OR_LOSS_FEE AS FEE FROM FILM_ INCHIRIAT WHERE LATE OR_ LOSS FEE IS NOT NULL EXCEPT EXCEPT este operatorul standard ANSI/ISO care gsete diferenele dintre dou seturi de rezultate, returnnd, n esen, valorile din prima interogare care nu apar n cea de-a doua interogare. Foarte puine sisteme DBMS implementeaz acest operator. n unele implementri, precum Oracle, operatorul se numete MINUS, nu EXCEPT.
ntrebri i Probleme
Alegei rspunsurile corecte pentru fiecare din urmtoarele ntrebri cu rspunsuri multiple. Reinei c ntrebrile pot avea mai multe rspunsuri corecte. 1. O instruciune SELECT fr o clauz WHERE a. Selecteaz toate coloanele din tabel sau vizualizare b. Returneaz un mesaj de eroare c. Selecteaz toate rndurile din tabel sau vizualizare d. Afieaz numai definiia tabelului sau a vizualizrii e. Scrie ntotdeauna rezultatele ntr-un fiier jurnal 2. n SQL, ordinea rndurilor din rezultatele interogrii a. Este specificat de clauza SORTED BY b. Poate fi ascendent sau descendent pentru orice coloan c. n mod prestabilit este descendent, dac nu se specific o alt ordine d. Este imprevizibil dac nu este specificat in interogare e. Poate fi specificat numai pentru coloanele din setul de rezultate al interogrii 3. Operatorul BETWEEN a. Specific un domeniu de valori care include i capetele b. Poate fi rescris folosind operatorii <= i NOT <= c. Poate fi rescris folosind operatorii <= i >= d. Selecteaz rndurile adugate n tabel ntr-un anumit interval de timp e. Nu este inclus n standardul ISO/ANSI 4. Operatorul LIKE standard a. Folosete semne de ntrebare drept caractere de nlocuire poziionale b. Folosete liniue de subliniere drept caractere de nlocuire poziionale c. Folosete liniue de subliniere drept caractere de nlocuire nepoziionale d. Folosete simboluri procent drept caractere de nlocuire poziionale e. Folosete simboluri procent drept caractere de nlocuire nepoziionale 5. O instruciune SQL care confine o funcie de agregare
a. b. c. d. e.
Poate conine i coloane calculate Poate conine i coloane obisnuite Trebuie s includ o clauz ORDER BY Trebuie s includ o clauz GROUP BY Nu poate include, n acelai timp, o clauz GROUP BY i o clauz ORDERBY
6. Cnd operatorii AND i OR sunt combinai n aceeai clauz WHERE a. Sistemul SGBD returneaz un mesaj de eroare b. Operatorul AND are prioritate mai mare dect operatorul OR c. Operatorul AND are prioritate mai mic dect operatorul OR d. Parantezele, sunt obligatorii e. Parantezele sunt opionale 7. Sintaxa corect pentru eliminarea valorilor nule din rezultatele interogrii este a. = NULL b. NOT = NULL c. <>NULL d. IS NULL e. IS NOT NULL 8. Funciile SQL standard pentru iruri de caractere includ a. UPPER b. MIDDLE c. LOWER d. SUBSTR e. EXISTS 9. Funciile, SQL matematice standard includ a. LENGTH b. ROUND c. CAST d. MIN e. ABS 10. Operatorul UNION a. Elimin rndurile duplicate din setul de rezultate b. Include rndurile duplicate n setul de rezultate c. Combin dou interogri ntr-o singur interogare de tip join d. Combin seturile de rezultate a dou interogri ntr-un singur set de rezultate e. Este numit JOIN n unele implementri SQL Scriei instruciunile SQL pentru urmtoarele probleme 1. Gsii toate filmele din tabelul FILM pentru care MPAA_COD_INCHIRIERE are alt valoare dect R". 2. Afiai titlurile i preurile tuturor filmelor pentru care PRET_VANZARE_DVD este cel puin 19.99, dar nu mai mare de 29.99, ordonate cresctor dup pre. 3. Afiai toate filmele pentru care genul (COD_GEN_FILM) este Comdy i categoria MPAA (MPAA _COD_INCHIRIERE) este PG-13, mpreun cu filmele pentru care genul este Drama i categoria este R.
4. 14. Cte nchirieri (tabelul FILM_INCHIRIAT) nu au nici o valoare n coloana LATE_OR_LOSS_FEE? 5. Cte persoane au un nume de familie (NUME_FAMILIE_PERSOANA) care conine litera a", majuscul sau minuscul? 6. Afiai toate titlurile de filme care conin cuvntul the", cu sau fr liter mare. 7. Folosii funcia SUM pentru a afla totalul valorilor din coloana PLATA_INCHIRIAT din tabelul FILM_INCHIRIAT. 8. Afiai primele cinci caractere din numele de familie (NUME_FAMILIE_PERSOANA) din tabelul PERSOANA, dar eliminai toate valorile duplicate din setul de rezultate? 9. Din tabelul FILM, afiai toate genurile (COD_GEN_FILM), mpreun cu media preurilor pentru DVD (PRET_VANZARE_DVD) pentru fiecare gen, rotunjit la dou poziii zecimale. 10. Afiai toate filmele (ID_FILM) care au fost nchiriate (tabelul FILM_INCHIRIAT), cu suma total strns din taxele de nchiriere (PLATA_INCHIRIAT) sau taxele de ntrziere sau pierdere (PLATA_PENALIZARE) pentru filmul respectiv. Sugestie: adunai valorile PLATA_INCHIRIAT i PLATA_PENALIZARE, apoi nsumai (SUM) rezultatul respectiv pentru fiecare valoare ID_FILM. Unele valori din coloana PLATA_PENALIZARE sunt nule, aa c, dac nu avei o funcie care s nlocuiasc valorile nule cu o alt valoare (zero, n acest caz), vei obine valori nule n rezultate. n Oracle, funcia se numete NVL, n Microsoft SQL Server se numete ISNULL, iar n MySQL se numete IFNULL. (Se pare c nu exist o funcie echivalent n D132).
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
ActAd Drama ActAd ActAd Drama Rmce Comedie Comedie Drama Drama Comedie Rmce Drama ActAd Forgn Tabelul FILM (trei coloane)
Pirates of the Caribbean: Trie Curse of the Black Pearl Big Fish Man on Fire Master and Commander The Far Side of the World LosI n Translation Two Weeks Notice 50 First Dates Matchstick Men Cold Mountain Road to Perdition The School of Rock 13 Going on30 Monster The Day After Tomorrow Das Boot
Evident, nu putei afia pe pagina web a magazinului de produse video, tabelul FILM aa cum este prezentat n figura de mai sus - trebuie s obinei descrierea complet a genurilor din tabelul FILM_GEN. Aceasta este ideea capitolului de fa: combinarea datelor din mai multe tabele ntr-o singur interogare. Figura urmtoare prezint un listing al tabelului FILM_GEN. FILM_GEN_COD ActAd Anime ChFam Class Comedie Doc Drama Forgn Hor Indep Music Rmce SciFi Sport Thriller Tabelul FILM_GEN FILM_GEN_DESCRIERE Actiune Animatie Copii i Familie Clasic Comedie Documentar Drama Strain Horror Independent Muzical Romance(Romantic, Idila) Stiintifico-Fantastic Sport Groaza
Uniuni (join)
O uniune (join) este o operaie ntr-o baz de date relaionale care combin coloane din dou sau mai multe tabele n rezultatele unei singure interogri. O uniune apare de fiecare dat cnd clauza FROM a unei instruciuni SELECT specific numele mai multor tabele.
De exemplu: SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM, FILM_GEN ORDER BY FILM_ID; FILM_ID GEN FILM_TITLU 1 Actiune i Aventura Mystic River 1 Animatie Mystic River 1 Clasic Mystic River 1 Documentar Mystic River 1 Strain Mystic River 1 Independent Mystic River 1 Groaza Mystic River 1 Sport Mystic River 1 SF Mystic River 1 Musical Mystic River 1 Horror Mystic River 1 Drama Mystic River 1 Comedie Mystic River 1 Copii i Familie Mystic River 1 Actiune i Aventura The Last Samurai 2 Thriller The Last Samurai 2 Sport The Last Samurai 2 SF The Last Samurai 2 Romantic The Last Samurai 2 Musical The Last Samurai 2 Independent The Last Samurai 2 Horror The Last Samurai 2 Animatie The Last Samurai 2 Copii i Familie The Last Samurai 2 Documentar The Last Samurai 2 Strain The Last Samurai 2 Drama The Last Samurai 2 Comedie The Last Samurai 2 Clasic The Last Samurai .. ... ............... Setul de rezultate al interogrii a fost trunchiat dup primele dou titluri de filme . Problema este c am cerut bazei de date s uneasc tabelele, dar nu i-am spus care este corespondena dintre rndurile celor dou tabele. Rezultatul este cunoscut sub numele de produs cartezian (dup numele filozofului i matematicianului francez Rene Descartes) i, n bazele de date relaionale, este un set de rezultate obinut prin uniunea dintre fiecare rnd al unui tabel cu fiecare rnd dintr-un alt tabel. Soluia este s specificm cum se va face unirea tabelelor. Trebuie indicat ce coloane ar trebui s se potriveasc pentru a uni dou rnduri din cele dou tabele, n mod normal, cele dou coloane vor fi cheia primar dintr-un tabel i cheia extern din cellalt tabel, dar pot exist i excepii. Pentru a realiza acest lucru trebuie s se fac o o uniune standard relaional, cunoscut i sub numele de uniune de egalitate (equijoin).
9 10 11 12 13 14 15 16 17 18 19 20
Actiune i Aventura Drama Romantic Comedie Comedie Drama Drama Comedie Romantic Drama Actiune i Aventura Strain
Master and Commander Lost n Translation Two Weeks Notice 50 First Dates Matchstick Men Cold Mountain Road to Perdition The School of Rock 13 Going on 30 Monster The Day After Tomorrow Das Boot
Folosirea numelor complete ale tabelelor pentru specificarea coloanelor poate fi obositoare i consumatoare de timp, mai ales deoarece numele tabelelor pot avea 30 sau mai multe caractere n sistemele DBMS moderne. Din aceast cauz, n SQL este permis i folosirea pseudonimelor (aliases) pentru numele tabelelor. Acestea funcioneaz la fel ca i pseudonimele coloanelor din clauza SELECT, exceptnd faptul c nu este folosit cuvntul cheie AS" (n cele mai multe implementri SQL) doar lsai un spaiu ntre numele tabelului i pseudonim n lista FROM. Dei unii folosesc mnemonice pentru pseudonimul tabelelor, este mult mai des ntlnit folosirea secvenelor de majuscule (adic A", B,C i aa mai departe). Dup ce asociai un pseudonim unui nume de tabel n clauza FROM, trebuie s folosii pseudonimul n locul numelui de tabel n ntreaga instruciune SQL. Folosirea pseudonimelor n clauza SELECT poate prea puin ciudat la nceput deoarece folosii un pseudonim nainte de a-l defini (clauza SELECT precede clauza FROM i s-ar putea s vi se para mai simplu s completai clauza FROM nainte de a completa lista de coloane din clauza SELECT atunci cnd scriei instruciunile SQL. Exemplul urmtor prezint instruciunea anterioar, dup adugarea pseudonimelor pentru numele tabelelor. Dei nu era necesar, pseudonimele au fost adugate i n lista de coloane din clauzele SELECT i ORDER BY, pentru a va arta cum sunt folosite. SELECT A.FILM_ID, B.FILM_GEN_DESCRIERE AS GEN, A.FILM_TITLU FROM FILM A, FILM_GEN B WHERE A.FILM_GEN_COD = B.FILM_GEN_COD ORDER BY A.FILM_ID;
nume_tabel [INNER) JOIN nume_tabel { ON condiie | USING (nume_coloan [ , nume_coloan...]) } Clauza ON permite specificarea unei condiii similare cu cea din clauza WHERE . Clauza USING specific numele coloanelor folosite pentru legarea rndurilor. Totui, clauza USING acioneaz numai atunci cnd coloanele pe care se face legtur au nume identice n ambele tabele. Exemple: JOIN cu condiie ON: SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM JOIN FILM_GEN ON FILM..FILM_GEN_COD = FILM_GEN.FILM_GEN_COD ORDER BY FILM_ID; JOIN cu pseudonime n loc de nume de tabele: SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM A JOIN FILM_GEN B ON A.FILM_GEN_COD = B.FILM_GEN_COD ORDER BY FILM_ID; JOIN folosind cuvntul cheie USING (n locul condiiei ON) o scurtatur elegant atunci cnd coloanele din cele dou tabele au acelai nume(nu e recunoscut de toate SGBD-urile). SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM JOIN FILM_GEN USING (FILM_GEN_COD) ORDER BY FILM_ID; JOIN cu cheie extern pe mai multe coloane. Aceast interogare afieaz lista cu copiile filmelor din tabelul FILM_COPY care nu au fost vndute (coloan DATA_VANZARE conine o valoare nul dac nu a fost vndut) i care au fost nchiriate (uniune cu tabelul FILM_INCHIRIAT) dar nu au fost nc returnate (coloan RETUR_DATA conine o valoare nul pn la returnarea filmului). A se revedea prezentarea general a bazei de date a magazinului de produse video, pentru a vedea unde se ncadreaz tabelul n modelul general. SELECT FILM_ID, COPY_NUMAR, DATA_RETURNARII FROM FILM_COPY JOIN FILM__INCHIRIAT USING (FILM_ID, COPY_NUMAR) WHERE DATA_VANZARE IS NULL AND RETUR_DATA IS NULL; FILM _ID COPY_NUMAR DATA_RETURNARII
2 3 5 5 10 17
2 2 1 2 1 1
Instruciunile care folosesc clauza JOIN sunt mai scurte , iat interogarea precedent scris folosind condiii de legtur n clauza WHERE. Remarcai c n acest caz trebuie s specificai numele complet al coloanelor FILM_ID i COPY_NUMAR, pentru a evita referirea ambigu a lor. Instruciunea de mai jos afieaz aceleai rezultate ca i instruciunea anterioar. SELECT A.FILM_ID, A.COPY_NUMAR, DATA_RETURNARII FROM FILM_COPY A, FILM_INCH B WHERE A.FILM_ID = B.FILM_ID AND A.COPY_NUMAR = B.COPY_NUMAR AND DATA_VANZARE IS NULL AND RETURN_DATA IS NULL;
Uniuni naturale
O uniune natural (natural join) se bazeaz pe toate coloanele cu acelai nume din dou tabele, n esen, toate uniunile de egalitate sunt uniuni naturale. Totui, sintaxa unei uniuni naturale este mult mai simpl, deoarece nu este necesar s specificai o condiie sau o list de coloane - se nelege de la sine care sunt coloanele folosite. Reinei,nu toate SGBD-urile accept aceast sintax pentru clauza JOIN(accepta sigur Oracle i MySQL ).. Exemplu: uniunea tabelelor FILM i FILM_GEN, rescris sub forma unei uniuni naturale: SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM NATURAL JOIN FILM_GEN ORDER BY FILM_ID; Uniunile pot implica mai mult de dou tabele. Exemplul urmtor prezint o uniune natural care obine coloana FILM_ID din tabelul FILM, coloana FILM_GEN_DESCRIERE din tabelul FILM_GEN i din tabelul MPAA_RATING, coloana MPAA_RATING_DESCRIERE , pentru primele trei filme din tabelul FILM. Folosirea clauzei WHERE permte s se elimine din setul de rezultate rndurile de care nu avem nevoie. Am permis textului din coloana RATING_DESC s treac automat pe linia urmtoare n rezultatele interogrii, din cauza lungimii. Exemplul folosete dou clauze JOIN. Prima clauz JOIN cere motorului SQL s lege tabelele FILM i FILM_GEN, iar a dou clauz JOIN i cere s lege rndurile deja unite (n esen, un set de rezultate intermediar) cu tabelul MPAA_RATING. SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, MPAA_RATING_COD AS RATING, MPAA_RATING_DESCRIERE AS RATING_DESC FROM FILM NATURAL JOIN FILM_GEN NATURAL JOIN MPAA_RATING
WHERE FILM_ID 1 2 3
FILM_ID < 4 ORDER BY FILM_ID; GEN Drama RATING R RATING_DESC Sub 17 ani acompaniati de parinti Sub 17 ani acompaniati de parinti Cu acordul strict a parintilor
Dac se folosete o implementare SQL care nu accept uniunile naturale, aceeai interogare scris folosind cuvintele cheie JOIN i ON este: SELECT A.FILM_ID, B.FILM_GEN_DESCRIERE AS GEN, C.MPAA_RATING__COD AS RATING, C.MPAA_RATING__DESCRIERE AS RATING_DESC FROM FILM A JOIN FILM_GEN B ON A.FILM_GEN_COD = B.FILM_GEN_COD JOIN MPAA_RATING C ON A.MPAA_RATING_COD = C.MPAA_RATING_COD WHERE FILM_ID < 4 ORDER BY FILM_ID;
Uniune extern complet (full outer join). Returneaz toate rndurile din ambele tabele. Acest tip de uniune este cel mai puin probabil s fie acceptat de toate implementari;e SQL. Aceast uniune nu este acelai lucru cu un produs cartezian, care leag fiecare rnd dintr-un tabel cu fiecare rnd din cellalt tabel. O uniune extern complet leag fiecare rnd dintr-un tabel cu zero sau mai multe rnduri corespondente din cellalt tabel. Este folosit mai mult pentru tabelele aflate in relaia m:m Sintaxa general pentru o uniune extern este: nume_tabel {RIGHT | LEFT | FULL} [OUTER] JOIN nume_tabel { ON condiie | USING (nume_coloan [ ,nume_coIoan. ..]) }
USING
50 First Dates Matchstick Men The School of Rock Something's Gotta Give Big Fiah Road to Perdition Mystic River Monster Cold Mountain Lost n Translation Das Boot
SELECT FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM RIGHT OUTER JOIN FILM_GEN ON FILM.FILM_GEN_COD =FILM_GEN.FILM_GEN_COD; Interogarea anterioar, rescris ca uniune extern complet. Deoarece fiecare film trebuie s aib asociat un gen, aceast interogare va produce aceleai rezultate ca i uniunea extern ctre dreapta din interogarea anterioar. Totui, dac genurile filmelor ar fi opionale, uniunea extern complet v-ar fi permis s afiai att genurile care nu au filme asociate, ct i filmele care nu au genuri asociate. SELECT FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM FULL OUTER JOIN FILM_GEN ON FILM.FILM_GEN_COD = FILM_GEN.FILM_GEN_COD; Afiai descrierile genurilor care nu au nume asociate. Exist i alte moduri de a face acest lucru, dar exemplul de fa folosete faptul c rndurile pentru care nu exist legturi returneaz valori nule pentru a selecta numai genurile care nu au nume asociate. SELECT FILM_GEN_DESCRIERE AS GEN FROM FILM RIGHT OUTER JOIN FILM_GEN ON FILM.FILM_GEN_COD = FILM_GEN.FILM_GEN_COD WHERE FILM_TITLU IS NULL; GEN Animatie Copii i Familie Clasic Documentar Horror Independent Musical SF Special Interes Sport Thriller Ca rspuns la cererile clienilor, mai muli productori de baze de date relaionale au introdus uniunile externe inainte de standardizarea clauzei JOIN.
Seciunile urmtoare prezint cteva implementri specifice ale sintaxei uniunii externe. Aceste soluii particulare sunt prezentate aici numai pentru c s-ar putea s le intlnii n instruciuni SQL mai vechi Sintaxa uniunii externe n Oracle Oracle Corporation a decis s foloseasc un semn plus ncadrat de paranteze pentru definirea uniunilor externe. Simbolul ,,(+) este plasat n clauza WHERE n partea opus tabelului din care vrei s fie returnate toate rndurile (indiferent dac exist legturi pentru ele n celalalt tabel). Deoarece datele din cellalt tabel (cel din care sunt returnate numai rndurile pentru care exist legturi) sunt completate cu valori nule atunci cnd nu este gsit un rnd corespondent, este mai uor s reinei c simbolul ,,(+) este plasat n partea clauzei WHERE unde vrei s adugai valori nule. Iat exemplul anterior rescris folosind sintaxa Oracle: SELECT FILM_GEN_DESCRIERE AS GEN FROM FILM A, FILM_GEN B WHERE A.FILM_GEN_COD(+) = B.FILM_GEN_COD AND FILM_TITLU IS NULL; Sintaxa uniunii externe n Microsoft SQL Server Microsoft SQL Server folosete operatorul *=" n condiia WHERE pentru o uniune extern ctre stnga i operatorul =*" pentru o uniune extern ctre dreapta. n ambele cazuri, este obligatoriu ca asteriscul i semnul egal s nu fie separate de spaii. Iat exemplul anterior rescris folosind sintaxa Microsoft SQL Server (ca uniune extern ctre dreapta): SELECT FILM_GEN_DESCRIERE AS GEN FROM FILM A, FILM_GEN B WHERE A.FILM_GEN_COD =* B.FILM_GEN_COD AND FILM TITLU IS NULL;
PERSOANA_ID 1 2 10
SUPERVISOR_PERSOANA_ID 1 1
Aceste date arat c angajaii 2 i l0 sunt subordonai angajatului 1, iar angajatul 1 nu e subordonat nimanui. .
Subinterogri
O caracteristic foarte puternic a limbajului SQL sunt subinterogrile (numite i selecii), care, aa cum sugereaz i numele, se refer la o instruciune SELECT care contine o instruciune SELECT subordonat. De obicei, subinterogrile sunt folosite n clauza WHERE, ca modalitate de limitare a rndurilor returnate n setul de rezultate al interogrii externe. Aceasta poate fi o modalitate foarte flexibil de selectare a datelor. O regul esenial de sintax este ca subinterogarea s fie ncadrat de paranteze. Orice operaie efectuat cu o subinterogare poate fi facut i printr-o uniune.
Subinterogri necorelate
O subinterogare necorelat (noncorrelated subselect) este o subinterogare n care interogarea intern nu face nici o referire la interogarea extern care o conine. Aceasta nseamn c poate fi rulat mai inti interogarea intern, apoi setul de rezultate obinut poate fi folosit n interogarea extern. Exemple: Afiai toate limbile n care nu exist nici un film n inventarul magazinului de produse video. SELECT LIMBA_COD, LIMBA_NUME FROM LIMBA WHERE LIMBA_COD NOT IN (SELECT DISTINCT LIMBA_COD FROM FILM_LIMBA) ORDER BY LIMBA_COD LIMBA_COD LIMBA_NUME
Ja Ko ni ru zh
Interogarea intern returneaz o list cu codurile de limb asociate filmelor n tabelul FILM_LIMBA. Cuvntul cheie DISTINCT elimin rndurile duplicate din setul de rezultate . Interogarea intern rulat independent, pentru a v ajuta s nelegei cum funcioneaz: SELECT DISTINCT LIMBA_COD FROM FILM_LIMBA; LIMBA_COD ------------------------------------------de (Germana) en (Engleza) es (Spaniola) fr (Franceza) Proprietarul magazinului vrea s vad efectul recentei creteri de preuri i are nevoie de o list a tranzaciilor (TRANZACTIE_ID) n care clientul a pltit mai mult dect taxa medie (INCHIRIAT_TAXA) pentru un film. Iat cum arat interogarea: SELECT DISTINCT TRANZACTIE_ID FROM FILM_INCHIRIAT WHERE INCHIRIAT_TAXA> (SELECT AVG(INCHIRIAT_TAXA) FROM FILM_INCHIRIAT) Interogarea intern calculeaz media taxelor de nchiriere, iar interogarea extern gsete apoi toate rndurile din tabelul FILM_INCHIRIAT pentru care valoarea INCHIRIAT_TAXA depete media. Cuvntul cheie DISTINCT elimin tranzaciile duplicate. Rezultatele interogrii anterioare ar fi mai utile pentru proprietarul magazinului dac ar include i data tranzaciei. O modalitate de a realiza acest lucru este i adugm o uniune cu tabelul CLIENT_TRANZACTIE n interogarea extern. Totui, deoarece tocmai ai nvat despre subinterogari, s facem acelai lucru folosind nc o subinterogare. Iat cum arat interogarea: SELECT TRANZACTIE_ID, TRANZACTIE_DATA AS TRANZ_DATA FROM CLIENT_TRANZACTIE WHERE TRANZACTIE_ID IN (SELECT DISTINCT TRANZACTIE_ID FROM FILM_INCH, WHERE INCH_TAXA > (SELECT AVG ( INCHIRIAT_TAXA) FROM FILM_INCHIRIAT) TRANZACTIE_ID TRANZ_DATA 9 03/01/2005 10 03/01/2005
Subinterogri corelate O subinterogare corelat (correlated subselect) este o subinterogare n care interogarea intern refer valorile furnizate de interogarea extern. Aceste subinterogari sunt mult mai puin eficiente dect subinterogrile necorelate, deoarece interogarea intern trebuie s fie apelat pentru fiecare rnd gsit de interogarea extern. Exemplu: Proprietarul magazinului vrea s transmit prin pot un cupon valoric tuturor clienilor care au pltit mai mult de 15$ pentru o singur tranzacie de nchiriere. SELECT DISTINCT CLIENT_CONT_ID FROM CLIENT_TRANZACTIE A WHERE 15 < (SELECT SUM (INCHIRIAT_TAXA) FROM FILM_INCHIRIATB WHERE A.TRANZACTIE _ID = B.TRANZACTIE_ID) CLIENT_CONT_ID 2 7 9 Observai pseudonimele asociate numelor de tabele din interogrile intern i extern, precurn i folosirea acestora n clauza WHERE a interogrii interne. Acesta este elementul de identificare al unei subinterogri corelate. Interogarea extern selecteaz o lista de valori CLIENT_CONT_ID distincte din tabelul CLIENT_TRANZACTIE. Fiecare valoare gsit este transmis interogrii interne, care este rulat pentru a calcula suma taxelor de nchiriere din tranzacia respectiv. Dac suma taxelor de nchiriere este mai mare sau egal cu 15, atunci clauza WHERE din interogarea extern ia valoarea logic adevrat", iar rndul CLIENT_ID este adugat n setul de rezultate.
Vizualizri n linie
Foarte puine implementri, printre care Oracle, permit folosirea unei subinterogri n clauza FROM a unei interogri, ntr-o construcie numit vizualizare n linie (inline view). Aceast construcie permite care setul de rezultate al unei interogri s fie tratat ca i cum ar fi un tabel sau o vizualizare predefinit. Iat un exemplu: Aceast interogare afl numrul maxim de nchirieri ale unui singur film; SELECT MAX(INCHIRIAT_NUMAR) AS MAX_INCHIRIAT_NUMAR FROM (SELECT FILM_ID, NUMAR(*) AS INCHIRIAT_NUMAR FROM FILM_INCHIRIAT GROUP BY FILM_ID) MAX_INCH_NUMAR 5 Interogarea intern calculeaz numrul de nchirieri pentru fiecare valoare FILM_ID. Interogarea extern selecteaz valoarea maxim INCHIRIAT_NUMAR din interogarea intern, tratat ca i cum ar fi o vizualizare predefinit. Nu exist nici
o limit n privina modurilor de utilizare a vizualizrilor n linie - putei chiar s le unii cu alte tabele sau vizualizri.
ntrebri i probleme
Alegei rspunsurile corecte pentru fiecare din urmtoarele ntrebri cu rspunsuri multiple, i reinei c ntrebrile pot avea mai multe rspunsuri corecte. l. O subinterogare a. Poate fi folosit pentru a selecta valorile care vor fi aplicate condiiilor din clauza WHERE b. Poate fi corelat sau necorelat c. Reprezint o cale puternic de calculare a coloanelor d. Trebuie s nu fie ncadrate n paranteze e. Permite selectarea flexibil a rndurilor 2. O uniune (join) fr o clauz WHERE sau o clauz JOIN a. Are ca rezultat un mesaj de eroare b. Nu returneaz nici un rnd din setul de rezultate c. Reprezint o uniune extern (outer join) d. Reprezint o uniune intern (inner join) e. Are ca rezultat un produs cartezian 3. O uniune extern (outer join) a. Poate fi scris n Oracle SQL folosind un simbol (+) n clauza FROM b. Poate fi scris n Microsoft SQL Server folosind operatorul = sau =* n clauza WHERE c. Returneaz toate rndurile doar din unul dintre tabele d. Returneaz toate rndurile din unul sau din ambele tabele e. Poate fi catre stnga, ctre dreapta sau complet 4. O auto-uniune (selfjoin) a. Nu poate avea niciodat ca rezultat un produs cartezian b. Poate fi o uniune intern sau o uniune extern c. Rezolv relaiile recursive d. Poate folosi o subinterogare pentru a limita i mai mult rndurile selectate e. Implic dou tabele diferite 5. O uniune (Join) a. Combin coloanele din dou sau mai multe tabele n rezultatele unei singure interogri b. Combin rnduri din interogari multiple ntr-un singur set de rezultate c. Este realizat ori de cte ori n clauza FROM sunt specificate mai multe tabele d. Necesit folosirea unei clauze JOIN e. Necesit o list de tabele separate prin virgule n clauza FROM 6. O uniune de egalitate (equijoin) a. Este cunoscut i sub numele de uniune extern (outerjoin)
Este cunoscut i sub numele de uniune intern (innerjoiti) Este cunoscut i sub numele de auto-uniune (selfjoin) Realizeaz ntotdeauna legarea rndurilor folosind o condiie de egalitate (=) e. Realizeaz ntotdeauna legarea rndurilor folosind o condiie de inegalitate (<>) 7. Calificatorii numelor de coloane: a. Pot fi nume de tabele b. Pot fi numere care indic poziia relativ a tabelelor dn lista FORM c. Pot fi pseudonime pentru numele de coloane , definite n clauza FORM d. Pot fi pseudonime pentru numele 8.O uniune ncruiat este: a. O uniune Natural b. N produs cartezian c. O uniune extern d. O uniune Intern 9. O clauz JOIN folosind cuvntul cheie USING a. Nu poate fi folosit atunci cnd coloanele prin care se face legarea tabelelor au nume diferite b. Nu poate fi folosit atunci cnd coloanele prin care se face legarea tabelelor au aceleai nume c. Definete o uniune intern d. Definete o uniune extern e. Definete o auto-uniune 10. a. b. c. d. e. O subinterogare corelat Ruleaz mai eficient dect o subinterogare necorelat Ruleaz mai puin eficient dect o subinterogare necorelat Are o interogare intern care refera coloane din interogarea extern Are o interogare extern care refera coloane din interogarea intern Are o interogare intern care nu face nici o referire la coloanele din interogarea extern
b. c. d.
nule), dar care nu au fost cumprate (coloan DATA_VANZARII din tabelul FILM_COPY conine valori nule). 7. Afiai numarul de identificare i titlul filmelor care nu au fost nchiriate niciodat. 8. Folosind subinterogri pentru a filtra rndurile. Afiai titlul filmelor pentru care n inventar exist o copie VHS (MEDIA_FORMAT = V, iar DATA_VANZARII are valoarea NULL) dar pentru care nu exist copii DVD (MEDIA_FORMAT = D ). 9. Rescriei interogarea anterioar folosind o uniune n local unei subinterogri pentru a gsi filmele n format VHS. 10. Afiai toate filmele pentru care n inventar exist mai multe copii n acelai format.
Exemplu care nlocuiete toate liniuele de desprire din numrul de telefon al unei persoane cu puncte (sunt prezentate numai primele dou rnduri din setul de rezultate) SELECT PERSOANA_TELEFON, REPLACE(PERSOANA_TELEFON, '-', '.') AS DISPLAY_TELEFON FROM PERSOANA; PERSOANA_TELEFON 2302298976 4016177297 DISPLAY_TELEFON 230.229.8976 401.617.7297
LTRIM Funcia LTRIM elimin spatiile de la nceputul unui ir de caractere. Sunt eliminate numai spaiile de la nceputul irului, cele din mijlocul i de la sfritul irului sunt lsate ca atare. LTRIM ( String cu spaii ) Returneaz: String cu spaii RTRIM Funcia RTRIM este similar cu LTRIM, dar elimin spatiile de la sfrsitul unui sir de caractere. Daca trebuie sa eliminati att spatiile de la inceputul sirului, cat i pe cele de la sfarsit, puteti imbrica funciile LTRIM i RTRIM, ca n urmatorul exemplu: RTRIM(LTRIM ( String cu spatii ) Returneaz: String cu spatii NOTA: Oracle pune la dispoziie o funcie mai convenabil, numit TRIM, care elimin att spaiile de la nceputul irului, ct i pe cele de la sfrit. . Funcii pentru valori nule (NVL, ISNULL, IFNULL) Oracle, Microsoft SQL Server i My SQL pun la dispoziie o funcie care nlocuiete valorile nule cu o valoare specificat. Din nefericire, fiecare implementare foloseste propriul nume pentru aceast funcie: NVL n Oracle, ISNULL n SQL Server i IFNULL n MySQL. Exemplele urmtoare selecteaz din tabelul FILM_INCHIRIAT, coloana TAXA_INTARZIERE_SAU_PIERDERE(sau redunumit TAXA_PENALIZARE), nlocuind valorile nule cu zero. A fost selectat tranzacia 9 deoarece conine dou filme, dintre care unul are o valoare nul n coloana TAXA_INTARZIERE_SAU_PIERDERE (un exemplu bun, care ilustreaza faptul c valorile nule sunt transformate, n timp ce valorile nenule sunt lsate ca atare.) Oracle:
SELECT NVL(TAXA_INTARZIERE_SAU_PIERDERE, TAXA_INTARZIERE_SAU_PIERDERE FROM FILM_INCHIRIAT WHERE TRANSACTIE_ID=9; TAXA_INTARZIERE_SAU_PIERDERE 0 29.98 2 rows selected. Microsoft SQL Server: SELECT ISNULL(TAXA_INTARZIERE_SAU_PIERDERE, TAXA_INTARZIERE_SAU_PIERDERE FROM FILM_INCHIRIAT WHERE TRANSACTIE_ID=9 ; TAXA_INTARZIERE_SAU_PIERDERE 29.98 .00 (2 rows affected) MySQL: SELECT IFNULL(TAXA_INTARZIERE_SAU_PIERDERE, TAXA_INTARZIERE_SAU_PIERDERE FROM FILM_INCHIRIAT WHERE TRANZACTIE_ID=9; TAXA_INTARZIERE_SAU_PIERDERE 29.98 0.00 2 rows n set (0.16 sec)
0)
AS
0)
AS
0)
AS
Se observ diferena de formatare a rezultatelor pentru clientul MySQL n linia de comand. ASCII Funcia ASCII returneaz valoarea din setul de caractere ASCII (un numar ntre 0 i 255) pentru un ir format dintr-un singur caracter. De exemplu: ASCII( ) eturneaz valoarea 32(codul ASCII pentru spaiu) ASCII(A) eturneaz valoarea 65(codul ASCII pentru caracterul A) ASCII(a ) eturneaz valoarea 97(codul ASCII pentru caracterul a) ASCII(1) eturneaz valoarea 49(codul ASCII pentru caracterul 1) CHAR (CHR) Funcia CHAR (numit CHR n Oracle i DB2) returneaz caracterul corespunzator unei valori ASCII (un numar ntre 0 i 255). Aceast funcie este util n special pentru concatenarea caracterelor care nu pot fi afiate sau sunt greu de manipulat n SQL. De exemplu: CHAR(44) returneaz o virgul
CHAR(50) returneaza 2 Se poate folosi funciile CHAR i ASCII consultnd tabele cu caractere i codurile ASCII corespunztoare uor de gasit n Internet, de exemplu: Valoare ASCII 9 10 13 (CR) 39 Apostrof Amintim c operatorul de concatenare nu este ace1ai pentru toate implementrile SGBD(+ pentru Microsoft SQL Server i || pentru majoritatea celorlalte sisteme). Exemple cu funciile ASCII i CHAR: S se gseasc toate titlurile de filme care conin un caracter Tab: Microsoft SQL Server: SELECT FILM_ID FROM FILM WHERE FILM_TITLU LIKE %+CHAR(9)+%; FILM_ID (0 rows affected) Oracle: SELECT FILM_ID FROM FILM WHERE FILM_TITLU LIKE % || CHR(9) || % ; no rows selected S se gseasc toate titlurile de filme care conin un caracter apostrof: SELECT FILM_ID FROM FILM WHERE FILM_TITLU LIKE %+CHAR(39)+%; FILM_ID are valoarea 3 (Something's Gotta Give). Funcii matematice Funciile matematice returneaz rezultatul unei operaii matematice i, de obicei, accept ca parametru de intrare o expresie numeric, care poate fi o valoare literal, o valoare numeric dintr-o coloan a unui tabel sau orice expresie (inclusiv rezultatul unei alte funcii) care produce o valoarea numeric. SIGN Funcia SIGN primete ca argument o expresie numeric i returneaz una dintre urmtoarele valori, n funcie de semnul numrului de intrare: Valoare returnata Semnificatie Tab Linie noua Retur de car Caracter
Numrul de intrare este Numrul de intrare este Numrul de intrare este Valoarea de intrare este
Exemplu: SELECT TAXA_PENALIZARE, SIGN(TAXA_PENALIZARE) AS TAXA_SIGN FROM FILM_INCHIRIERE WHERE TAXA_PENALIZARE IS NOT NULL; TAXA_PENALIZARE 29.99 4 4 29.98 SQRT Funcia SQRT primete ca argument o expresie numeric i returneaz rdcina ptrat a acesteia. Sintaxa general a funciei este: SQRT (expresie numeric) Vom extrage radacina patrat din valorile TAXA_PENALIZARE nenule pe care tocmai le-am vazut: SELECT TAXA_INTARZIERE_SAU_PIERDERE, SQRT (TAXA_PENALIZARE) AS TAXA_SQRT FROM FILM_INCH WHERE TAXA_INTARZIERE_SAU_PIERDERE IS NOT NULL; TAXA_PENALIZARE 29.99 4 4 29.98 CEILING (CEIL) Funcia CEILING returneaz cel mai mic ntreg mai mare sau egal cu valoarea expresiei numerice furnizat ca parametru de intrare, adic rotunjete numrul prin adugire pn la urmtorul numr ntreg. Exist cteva probleme interesante de compatibilitate legate de denumire ntre implementarile SQL: Microsoft SQL Server folosete numele CEILING, Oracle folosete numele CEIL, n timp ce DB2 i MySQL permite folosirea ambelor nume (CEIL i CEILING). TAXA_SQRT 5.47631263 2 2 5.47539953 TAXA_SIGN 1 1 1 1
Ca exemplu, s aplicm funcia CEILING asupra valorilor din coloana TAXA_PENALIZARE : SELECT TAXA_PENALIZARE, CEILING (PENALIZARE) AS TAXA_CEILING FROM FILM_INCHIRIERE WHERE TAXA_PENALIZARE IS NOT NULL; TAXA_INTARZIERE_SAU_PIERDERE 4.00 4.00 29.99 29.98 TAXA_CEILING 4 4 30 30
FLOOR Funcia FLOOR este inversa logic a funciei CEILING returneaz cel mai mare ntreg mai mic sau egal cu valoarea expresiei numerice furnizat ca parametru de intrare, adic rotunjete numrul prin scdere pn la urmtorul numr ntreg(parte ntreag). Exemplu, n care se aplic funcia FLOOR asupra valorilor din coloana TAXA_PENALIZARE: SELECT TAXA_PENALIZARE, FLOOR(TAXA_INTARZIERE_SAU_PIERDERE) AS TAXA_FLOOR FROM FILM_INCH WHERE TAXA_INTARZIERE_SAU_PIERDERE IS NOT NULL; TAXA_PENALIZARE 4.00 4.00 29.99 29.98 TAXA_FLOOR 4 4 29 29
Funcii pentru dat i or Exist foarte puin consecven n privina funciilor pentru dat i or ntre diferiii productori de sisteme SGBD, motivul este faptul ca productorii au dezvoltat propriile tipuri de date temporale nainte de stabilirea standardelor. Din cauza acestei diversiti, funciile pentru dat i or sunt prezentate pe scurt pentru Microsoft SQL Server Oracle. Termenii scrii cu caractere italice sunt definii n notele care urmeaz dup fiecare tabel, n toat aceast seciune, termenul data_si__ora nseamn un ir de caractere care conine informaii despre dat i or, ntr-un format acceptabil pentru sistemul SGBD ul respectiv. Funcii pentru dat i or n Microsoft SQL Server
NOTA: Valoarea parte_de_dat este un parametru care specific o parte a datei, cum ar fi anul, luna, ziua, ora,minutul, secunda i milisecunda.
Scop Returneaz o nou valoare data_si_ora, adugnd un interval la valoarea parte _de_data furnizata ca parametru Returneaz numrul de intervale data_i_ora trecute ntre dou date Returneaz un nume sub form de text, reprezentnd partea _de_dat selectat pentru valoarea data_si_ora furnizat ca intrare Returneaz o valoare intreaga, reprezentand partea_de_data selectata pentru valoarea data_si_ora furnizata ca intrare Returneaz o valoare intreaga, reprezentand ziua coninuta n valoarea data_si _ora furnizata ca intrare. Returneaz valoarea curenta data_si_ora furnizata de sistem Returneaz valoarea curenta data_si_or UTC (Universal Coordinated Time)
Parametri de intrare parte_de_data, interval, data_si_ora parte _de_data, data de nceput, dat de sfrit porte _de_dat, data_si_ora
GETUTCDATE
MONTH
Returneaz o valoare intreaga, reprezentand luna data_si_ora coninuta n valoarea data_si_ora furnizata ca intrare
Funcii pentru data i or n Oracle Oracle are mai multe de 24 de funcii pentru data i ora. Retinei c Oracle numete acest tip de date DATE i toate datele au o component pentru or, care are valoarea zero (reprezentnd miezul noptii) atunci cnd nu este folosit. Funciile pe care este cel mai probabil s le folosii sunt prezentate n tabelul urmtor:
NOT:
Cuvntul cheie pentru cmpul data_i__ora este un cuvnt cheie care specific unul dintre cmpurile coninute de o dat Oracle, respectiv YEAR, MONTH, DAY, HOUR, MINUTE i SECOND. ir_pentru_formatare este un ir de simboluri care specific formatul folosit pentru dat atunci cnd aceasta este convertit n sau dintr-un ir de caractere. Exist peste 40 de simboluri diferite care pot fi folosite n irurile de formatare (putei gsi lista complet n documentaia Oracle). De exemplu, irul de formatare 'MM/DD/YYYY HH:MI' are ca rezultat o dat, ca ir de caractere, de forma '12/01/2004 11:58, iar irul de formatare 'DD-MON-RR' (formatul Oracle prestabilit) are ca rezultat o dat de forma '01-Dec-04. Funcia TO_CHAR poate fi folosit i pentru transformarea valorilor numerice n iruri de caractere. Funcia TRUNC poate fi folosita i pentru trunchierea valorilor numerice, avnd ca efect tergerea cifrelor din dreapta punctului zecimal.
Funcie ADD_MONTHS
Scop
Parametri de intrare
Data, numarul de luni (o Adauga numarul de luni specificat la data valoare pozitiva sau furnizata ca parametru negativa) Returneaz data curenta n zona orara stabilita CURRENT_DATE Nu are pentru sesiunea bazei de date Extrage campul data_si_ora specificat din data Cuvant cheie pentru EXTRACT furnizata ca intrare data_si_ora, data Returneaz data furnizata, cu ziua inlocuita cu LAST_DAY data ultima zi a lunii respective Returneaz numarul de luni (inclusiv partea fractionara) intre doua date furnizate ca intrare; MONTHS_BETWEEN Prima data, a doua data rezultatul este negativ daca a doua data este inaintea primei SYSDATE TO_CHAR Returneaz valoarea curenta data_si_ora furnizata Nu are de sistem Atunci cand este folosita pentru o data, funcia returneaz un sir de caractere, n formatul specificat de sirul_pentru_formatare Transforma sirul de caractere furnizat ca intrare intr-o data formatata intern de Oracle, folosind sirul_pentru_formatare ca tipar pentru a interpreta coninutul sirului de caractere Trunchiaza o data la unitatea de timp specificata de cuvantul cheie data_si_ora. Daca acest parametru este omis, data este trunchiata la ziua curenta. Data, sir_pentru_formatare
TO_DATE
Data, sir_pentru_formatare
TRUNC
CREATE
[OR
REPLACE]
VIEW
nume_vizualizare
AS
interogare_sql; Exemple: Reguli evidente de confidenialitate oblig administratorul magazinului s in secrete datele de identificare ale angajailor (numerele de asigurri sociale) i salariile. Totui, exist un numr de aplicaii care necesit furnizarea unor informaii despre angajai, cum ar fi numele sau numele efului lor (dac exist), n asemenea situaii, avei nevoie de o vizualizare care s poat fi folosit n siguran de un dezvoltator, fr pericolul de a dezvlui n mod accidental informaii confideniale. Interogarea din vizualizare trebuie s realizeze o uniune (join) cu tabelul PERSOANA pentru a afla numele angajatului i (folosind o uniune extern) numele efului acestuia. Instruciunea SQL folosit pentru crearea vizualizrii: CREATE VIEW ANGAJAT_LISTA AS SELECT A.PERSOANA_ID AS ID, B.PERSOANA_PRENUME AS PRENUME, B.PERSOANA_INITIALA AS INITIALA , B.PERSOANA_NUME_FAMILIE AS NUME, C.PERSOANA_PRENUME AS MANAGER_PRENUME, C.PERSOANA_NUME_FAMILIE AS MANAGER_NUME FROM ANGAJAT A JOIN PERSOANA B ON A.PERSOANA_ID = B.PERSOANA_ID LEFT OUTER JOIN PERSOANA C ON A.SUPERVISOR_PERSOANA_ID = C.PERSOANA_ID View created. Dup crearea vizualizrii, putei s o interogai ca i cum ar fi un tabel. O interogare simpl fcut n vizualizarea pe care tocmai am creat-o: SELECT NUME, MANAGER_NUME FROM ANGAJAT_LISTA ORDER BY NUME; NUME MANAGER_NUME Alexandru Popescu Alexandru Ionescu Alexandru
Pentru crearea unui catalog cu filmele disponibile, avei nevoie de o list cu descrierile categoriilor MPAA i cu descrierile genurilor. Instruciunea SQL folosit pentru crearea vizualizrii: CREATE VIEW FILM_LISTA AS SELECT A.FILM_ID, B.FILM_GEN_DESCRIERE AS GEN, C.MPAA_RATING_COD AS RATING, C.MPAA_RATING_DESCRIERE AS RATING_DESC, A.FILM_TITLU, A.RETAIL_PRET_VHS, A.RETAIL_PRET_DVD, A.ANUL_PRODUCERII FROM FILM A JOIN FILM_GEN B ON A.FILM_GEN_COD = B.FILM_GEN_COD JOIN MPAA_RATING C ON
A.MPAA_RATING_COD = C.MPAA_RATING_COD Exemplu de interogare simpl care folosete vizualizarea n locul tabelelor de baz: SELECT GEN, RATING, FILM_TITLU FROM FILM_LISTA ORDER BY GEN, RATING, FILM_TITLU; GEN Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Comedie Comedie Comedie Comedie Drama Drama Drama Drama Drama Drama Strain Romantic Romantic RATING PG-13 PG-13 PG-13 PG-13 R R R PG-13 PG-13 PG-13 PG-13 PG-13 R R R R R R PG-13 PG-13 FILM_TITLU Master and Commander: The Far Pirates of the Caribbean: The The Day After Tomorrow The Italian Job Kill Bill: Vol. 1 Man on Fire The Last Samurai 50 First Dates Matchstick Men Something's Gotta Give The School of Rock Big Fish Cold Mountain Lot n Translation Monster Mystic River Road to Perdiction Das Boot 13 Going 30 Two weeks notice
Magazinul de produse video ar vrea s instaleze un chioc informatizat n seciunea de filme pentru copii, astfel nct tinerii s poat cuta filmele online. Dorim ca numai filmele din categoriile MPAA G, PG i PG-13 s fie disponibile n acest chioc. n loc s se repete uniunea din vizualizarea FILM_LISTA dac MPAA ar modifica sistemul de clasificare, se poate folosi vizualizarea FILM_LISTA pentru a crea o nou vizualizare (adic se poate folosi o vizualizare pentru a crea o alt vizualizare! Exemplu: CREATE VIEW COPII_FILM_LISTA AS SELECT * FROM FILM__LISTA WHERE RATING IN ('G', 'PG', 'PG-13') Rezultatele obinute, folosind aceeai interogare ca i pentru vizualizarea FILM_LISTA: SELECT GEN, RATING, FILM_TITLU FROM COPII_FILM_LISTA
ORDER BY GEN, RATING, FILM _TITLU; GEN Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Comedie Comedie Comedie Comedie Drama Romantic Romantic RATING PG-13 PG-13 PG-13 PG-13 PG-13 PG-13 PG-13 PG-13 PG-13 PG-13 PG-13 FILM TITLU Master and Commander: The Far Pirates of the Caribbean: The The Day After Tomorrow The Italian Job 50 First Dates Matchstick Men Something's Gotta Give The School of Rock Big Fish 13 Going on 30 Two Weeks Notice
Vizualizarea COPII_FILM_LISTA se bazeaz pe vizualizarea FILM_LISTA i poate s devin invalid sau s nu mai funcioneze corect dac vizualizarea FILM_LISTA este modificat. Vizualizrile sunt instrumente puternice, care nu pot fi ignorate.
Expresia CASE
Expresia CASE este o adugire recent, dar foarte important, la standardul SQL. Pentru prima dat, pri ale instruciunilor SQL pot fi executate condiional. De exemplu, o coloan din rezultatele interogrii poate fi formatat n funcie de valorile coninute pe o alt coloana. Expresia CASE admite dou forme generale: Expresia CASE simpl Sintaxa general pentru forma simpl a expresiei CASE: CASE expresie_ de_ intrare WHEN expresie_de_comparare THEN expresie__rezultat [WHEN expresie de_comparare THEN expresie_rezultat.. ] ELSE expresie_rezultat END not: Fiecare condiie WHEN este evaluat sub forma expresie_de_intrare = expresie_comparare i, dac rezultatul are valoarea TRUE logic, este returnat valoarea expresie_rezultata i nici o alt condiie WHEN nu mai este evaluat. Dac nici una dintre condiiile WHEN nu este evaluat ca adevrat i exista o condiie ELSE, este returnat valoarea expresie_rezultat asociat condiiei ELSE. Dac nici una dintre condiiile WHEN nu este evaluat ca adevrat i nu exist o condiie ELSE, este returnat o valoare nula. De exemplu, se poate folosi expresia CASE pentru a transforma valoarea MPAA_RATING_COD ntr-un mesaj simplu, care poate fi afiat la terminalul de vnzare, pentru a aminti personalului magazinului s verifice vrsta
clienilor n cazul filmelor cu o categorie MPAA mai mare de PG-13. Remarcai plasarea cuvntului cheie AS imediat dup cuvntul cheie END, pentru a asocia un nume coloanei generate n setul de rezultate. Iat exemplul: SELECT FILM_ID, MPAA_RATING_COD AS RATING, CASE MPAA_RATING_COD WHEN 'G' THEN Toate varstele' WHEN 'PG' THEN Acordul parintilor WHEN 'PG-13' THEN 'Peste 13 ani' ELSE 'Peste 17 ani END AS RATING_DESC FROM FILM ORDER BY FILM _ID;
1 2 3 4 5 6 7 8 9 10
FILM ID RATING RATING_DESC R Peste 17 ani R Peste 17 ani PG-13 Peste 13 ani PG-13 Peste 13 ani R Peste 17 ani PG-13 Peste 13 ani PG-13 Peste 13 ani R Peste 17 ani PG-13 Peste 13 ani R Peste 17 ani
Expresia CASE cu cutare Expresie CASE cu cutare (searched CASE) permite folosirea unor condiii de comparare mai flexibile, deoarece fiecare condiie este complet specificat, incluznd i operatorul de comparare. Sintaxa general a expresiei: CASE WHEN condiie THEN expresie_rezultat [WHEN condiie THEN expresie_rezultat. . . ] ELSE expresie_rezultat END not: Fiecare condiie poate fi orice expresie SQL care este evaluat ca adevrata sau fals. Condiiile WHEN sunt evaluate secvenial i, dac una este evaluat ca adevrata, este returnata valoarea expresie_rezultat asociat i nici o alt condiie WHEN nu mai este evaluata. Dac nici una dintre condiiile WHEN nu este evaluat ca adevrat i exist o condiie ELSE, este returnat valoarea expresie_rezultat asociat condiiei ELSE. Dac nici una dintre condiiile WHEN nu este evaluata ca adevrat i nu exiti o condiie ELSE, este returnat o valoare nul.
De exemplu, considerm o interogare care clasific filmele n format VHS, n funcie de pret: SELECT FILM_ID, RETAIL_PRET_VHS, CASE WHEN RETAIL_PRET__VHS IS NULL THEN Not Available ; WHEN RETAIL_PRET_VHS < 10 THEN Ieftin WHEN RETAIL_PRET__VHS < 20 THEN Convenabil WHEN RETAIL PRET VHS < 40 THEN Mediu ELSE 'Scump' END AS PRET_CATEGORIE FROM FILM ORDER BY FILM_ID; FIL M_ID 1 2 3 4 5 6 7 8 9 10 VHS 58.97 15.95 14.95 11.95 24.99 24.99 14.95 50.99 12.98 49.99 RETAIL_PRET_ IE Scump Convenabil Convenabil Convenabil Mediu Mediu Convenabil Scump Convenabil Scump PRET_CATEGOR
ntrebri i Probleme
Alegei rspunsurile corecte pentru fiecare din urmtoarele ntrebri cu rspunsuri multiple. Reinei c ntrebrile pot avea mai multe rspunsuri corecte. 1. Funciile SQL a. Returneaz un set de valori b. Returneaz o singur valoare c. Pot fi folosite n clauza WHERE a unei instruciuni SQL d. Pot fi folosite ca pseudonime pentru numele tabelelor intr-o instr. SQL e. Pot fi folosite n lista de coloane a unei instruciuni SQL 2. Funcia REPLACE a. nlocuiete un nume de tabel cu un nume de vizualizare b. nlocuiete numele unei coloane cu pseudonimul coloanei c. nlocuiete un ir de caractere dintr-o coloan cu un alt ir de caractere d. nlocuiete toate valorile dintr-o coloan cu un alt set de valori e. nlocuiete toate rndurile dintr-o vizualizare cu rnduri coninnd date dintr-un alt tabel 3. Funcia LTRIM a. Elimin spaiile de la sfritul irurilor de caractere
4.
5.
6.
7.
b. Elimin spaiile de la nceputul irurilor de caractere c. Poate fi imbricat cu alte funcii d. nlocuiete valorile nule cu alte valori n irurile de caractere e. Elimin spaiile de la nceputul i de la sfritul irurilor de caractere Funcia CHAR a. Este numit CHR n unele implementri SQL b. Este identic cu funcia ASCII n unele implementri SQL c. Returneaz valoarea corespunztoare unui caracter din setul de caractere ASCII d. Returneaz caracterul corespunztor unei valori e. Transform o valoare numeric ntr-un ir de caractere Funcia SIGN a. Returneaz -l daca parametrul furnizat are valoare negativa b. Returneaz 0 dac parametrul furnizat are valoarea zero c. Returneaz +1 dac parametrul furnizat are o valoare pozitiv d. Returneaz 0 dac parametrul furnizat are valoarea NULL e. Returneaz o valoare nul dac parametrul furnizat nu este un numr Funcia CEILING a. Rotunjete un numr prin adugire pn la primul numr ntreg b. Rotunjete un numr prin scdere pn la primul numr ntreg c. Returneaz ntotdeauna un numr ntreg d. Returneaz un numr ntreg sau o valoare nul e. Este numit CEIL n unele implementri SQL Funcia FLOOR a. Rotunjete un numr prin adugire pn la primul numr ntreg b. Rotunjete un numr prin scdere pn la primul numr ntreg c. Returneaz ntotdeauna un numr ntreg d. Returneaz un numr ntreg sau o valoare nul e. Este numit FLR n unele implementri SQL
8. Expresiile CASE a. Permit executarea condiional a clauzelor dintr-o instruciune SQL b. Exist sub dou forme, respectiv statice i dinamice c. Exista sub dou forme, respectiv cu cutare i fara cautare d. Exist sub dou forme, respectiv simple i cu cautare e. Exist sub dou forme, respectiv standard i cu cautare Scriei instruciunile SQL pentru urmtoarele probleme: 1. Afiai valorile MPAA_RATING_COD din tabelul MPAA_RATING, cu liniuele de desprire nlocuite cu spaii. 2. Folosind funcia CHAR (numit CHR n Oracle), afiai valorile FILM_ID i FILM_TITLU pentru toate filmele care conin apostrofuri (caracterul ASCII 39) n titlu. 3. Aflai valoarea ASCII a semnului de exclamare (!). 4. Aflai preul mediu al filmelor n format DVD (coloana RETAIL_PRET _DVD din tabelul FILM), cu media calculat rotunjit prin adugire la cea mai apropiat sum fr zecimale.
5. Aflai preul mediu al filmelor n format VHS (coloana RETAIL_PRET_VHS din tabelul FILM), cu media calculat rotunjit prin scdere la cea mai apropiat sum fr zecimale. 6. Pentru o baz de date Oracle, generai comenzile SQL pentru eliminarea tuturor restriciilor refereniale aflate n proprietatea utilizatorului curent. Vizualizarea Oracle de tip catalog se numete USER_CONSTRAINTS, iar restriciile refereniale au valoarea 'R' n coloana CONSTRAINT_TYPE. Numele tabelului pe care se bazeaz restricia se afl n coloana TABLE_NAME a vizualizrii. Nu uitai c trebuie s folosii comanda ALTER TABLE pentru eliminarea unei restricii. 7. Pentru o baz de date Microsoft SQL Server, afiai toate restriciile de tip cheie extern. Folosii tabelul de sistem SYSOBJECTS, n care NAME este numele restriciei, iar coloana XTYPE are valoarea 'F' pentru restriciile de tip cheie extern. 8. Scriei o instruciune SQL care afieaz fiecare cont de client (CLIENT_CONT_ID) cu un ir de caractere bazat pe valoarea coloanei COPIL_INCH_ALLOWED_INDIC, care s conin textul Poate fi inchiriat de copii" dac valoarea coloanei este 'Y' i textul Nu poate fi inchiriat de copii" dac valoarea este 'N'. Sugestie: Cel mai bine funcioneaz n acest caz o expresie CASE simpl. 9. Scriei o instruciune SQL care afieaz fiecare film (FILM_ID) i o valoare pentru deceniu, n funcie de valoarea coloanei ANUL_PRODUCERII sau necunoscut), n acest caz v-ar fi de folos o expresie CASE cu cautare. 10. Scriei o instruciune SQL care afieaz fiecare inchiriere a unui film (tabelul FILM_INCH) cu valoarea TAXA_PENALIZAREclasificaa astfel: None (valoare nul sau zero), Minor (valoare < 10) sau Major (valoare > 10) .
Instruciunile DML individuale afecteaz datele dintr-un singur tabel. Este posibil ca ntr-o instruciune DML s referii i o vizualizare care conine date din mai multe tabele (adic o vizualizare care conine o uniune de tabele), dar, n acest caz, instruciunea DML poate referi numai coloane dintr-un singur tabel al vizualizrii. Cu alte cuvinte, atunci cand o instruciune DML folosete o vizualizare, toate coloanele vizualizrii referite n instruciunea DML trebuie s corespund unor coloane dintr-un singur tabel fizic al bazei de date. Este foarte probabil ca sistemul SGBD folosit s pun la dispoziie o form oarecare de tranzacii, n care o serie de instruciuni DML sunt tratate unitar, adic un grup de instructiuni care trebuie s reueasc toate sau sa eueze toate. Aceast
caracteristic este foarte util atunci cnd instructiunile SQL sunt folosite n tranzacii comerciale. SGBD va trata fiecare instruciune DML individual ca pe o tranzactie. Aceasta nseamna c, dac apare o eroare la modificacfrea unui rnd identificat de instruciunea DML, sistemul DML va anula intreaga instruciune, asa c aceasta nu va afecta nici unul din rndurile tabelului. Cu alte cuvinte, sistemul SGBD nu va permite niciodat apariia inconsecvenelor n baza de date. De exemplu , dac incerc s sterg toate rndurile din tabelul FILM i apare o eroare la tergerea celui de-al treilea rnd (dup ce au fost deja terse primele dou rnduri ), ntreaga instruciune eueaz i sistemul SGBD reface (unii ar spune ca prin magie) cele dou rnduri terse. Instructiunile SQL din acest lecie presupune c sistemul SGBD pe care il utilizai foloseste formatul AAAA-LL-ZZ pentru datele calendaristice. Pentru bazele de date Oracle, instruciunea de mai jos modific formatul datelor calendaristice pentru sesiunea curenta (baza de date revine la formatul prestabilit de fiecare dat cnd va reconectai la baza de date): ALTER SESSION SET NLS_DATA_FORMAT=YYYY-MM-DD; Un alt aspect de care este important s se in seama, sunt restriciile definite n tabelul referit de instruciunea DML. Sistemul SGBD nu va efectua n baza de date nici o modificare care ncalc una din restricii. La formarea instructiunilor DML, trebuie s se in seama de urmatoarele aspecte referitoare la restriciile tabelului modificat:
Restricii de unicitate
Ca i n cazul cheilor primare, coloanele pe care a fost definit o restricie de unicitate trebuie sa aib valori unice n ntregul tabel.
Restricii refereniale
Nu se poate insera sau actualiza valoarea unei chei externe dect dac exist deja rndul printe corespondent care conine valoarea cheii n coloana cheii primare. In sens invers, nu se poate terge un rnd printe dac exist rnduri subordonate care refer valoarea din rndul printe, dect dac restricia a fost definit cu opiunea ON DELETE CASCADE. In general inserrile n tabele trebuie fcute ierarhic (mai intai
randurile parinte, apoi randurile copii), iar tergerile trebuie fcute n ordine invers (copiii inaintea prinilor). Restrictii de verificare (CHECK) O instructiune INSERT sau UPDATE nu poate stoca ntr-o coloana o valoare care ncalc o restricie CHECK definit pentru coloana respectiv.
Instruciunea INSERT
Instruciunea SQL INSERT este folosit pentru inserarea noilor rnduri de date n tabele. Instruciunea are dou forme de baz: una n care valorile coloanelor sunt specificate chiar n instruciune i alta n care valorile sunt selectate dintr-un tabel sau o vizualizare, folosind o subinterogare.
Exemplul urmtor conine dou instruciuni INSERT, una care creeaz un nou rnd n tabelul FILM, cu o list opional de coloane, din care este omis coloana RETAIL_PRET_VHS, i alta care creeaz un rnd n tabelul FILM_COPII pentru acelai timp, dar fr lista opional de coloane. INSERT INTO FILM (FILM_ID, FILM_COD_GEN, MPAA_RATING_COD, FILM_NUME, PRET_INCHIRIAT_DVD, AN_PRODUCERE) VALUES (21,Drama,PG-13,Ray, 29.95, 2004); INSERT INTO FILM_COPII VALUES (21, 1, 2005-04-01,NULL,V); Pentru Microsoft SQL Server i Sybase Adaptive Server, dac este definit proprietatea IDENTITY pentru tabelul FILM, se poate folosi urmtoarea variant a primei instruciuni INSERT: INSERT INTO FILM (FILM_COD_GEN,MPAA_COD_VARSTE,FILM_NUME, RETAIL_PRET_DVD,AN_PRODUCERE) VALUES (Drama, PG-13, Ray, 29.95, 2004);
lipsete din list va primi o valoare nul, presupunund c valorile nule sunt acceptate n coloana respectiv. Cuvntul cheie NULL poate fi folosit n instruciunea SELECT pentru specificarea unei valori nule pentru o coloan.
Ca exemplu, s presupunem c toate filmele sunt acum disponibile i n limba francez. Tabelul FILM_LIMBA conine rnduri pentru limba francez pentru o parte din filme, aa c acum vrem s le adugm numai pe cele care lipsesc. Instruciunea INSERT care va rezolva aceast problem este: INSERT INTO FILM_LIMBA (FILM_ID, COD_LIMBA) SELECT FILM_ID, fr FROM FILM FILM WHERE FILM_ID NOT IN ( SELECT FILM_ID FROM FILM_LIMBA WHERE COD_LIMBA =fr );
Instruciunea UPDATE
Instruciunea UPDATE este folosit pentru actualizarea datelor din coloanele unui tabel (sau ale unei vizualizri). Sintaxa general a instruciunii UPDATE: UPDATE nume_tabel_sau_vizualizare SET nume_coloana = expresie [,nume_coloana = expresie...] [ WHERE conditie]; Se remarc urmtoarele: Clauza SET conine o list cu una sau mai multe coloane, mpreun cu o expresie care specific noua valoare pentru fiecare coloan. Aceasta este o list de perechi nume-valoare, separate prin virgule, cu un operator de egalitate ntre fiecare nume i valoare. Expresia poate fi o constant, un alt nume de coloan sau orice alt expresie pe care SQL o poate transforma ntr-o singur valoare, care poate fi apoi atribuit coloanei respective. Clauza WHERE conine o expresie care limiteaz rndurile actualizate. Dac aceast clauz este omis, motorul SQL va ncerca s actualizeze toate rndurile din tabel sau din vizualizare. Exemple: Un film a fost adugat cu un pre incorect. Instruciunea urmtoare va actualiya dou coloane din acelaI rnd a tabelului MOVIE. UPDATE FILM SET RETAIL_PRET_VHS = 29.95 , RETAIL_PRET_DVD = 34.95 WHERE FILM_ID = 21
Conducerea firmei de produse video a decis s creasc salariul tuturor funcionarilor cu 10 procente. Aceast instruciune va actualiza o singur coloan de pe mai multe rnduri, rotujind rezultatul la 2 zecimale cu funcia ROUND. UPDATE ANGAJAT SET ANGAJAT_PLATA_ORA = ROUND (ANGAJAT_PLATA_ORA * 1.1, 2) WHERE ANGAJAT_JOB_CATEGORY =C ;
Instruciunea DELETE
Instruciunea DELETE terge unul sau mai multe rnduri dintr-un tabel. Instruciunea poate s foloseasc i o vzualizare, dar numai dac aceasta se bazeaz pe un singur tabel (ceea ce nseamn c instruciunile DELETE nu pot fi folosite pentru vizualizri care conin uniuni). n instruciunile DELETE nu sunt referite niciodat coloane, doarece instruciunea terge rnduri ntregi de date, inclusiv toate valorile datelor (toate coloanele) din rndurile afectate. Dac vrei s tergei o singur valoare din rndurile existente, folosii instruciunea UPDATE pentru a nlocui valorile respective cu valori nule (presupunnd c valorile nule sunt permise n acele coloane). Sintaxa general a instruciunii DELETE este DELETE FROM nume_tabel_sau_vizualizare [ WHERE conditie ]; Se remarc urmtoarele: Clauza WHERE este opional. Totui, este folosit aproape ntotdeauna, deoarece o instruciune DELETE fr o clauz WHERE ncearc s tearg toate rndurile din tabel. Atunci cnd este inclus, clauza WHERE specific rndurile care urmeaz s fie terse. Orice rnd pentru care condiia WHERE este evaluat ca adevrat este ters din tabel. Nu se pot terge rnduri dac se ncalc o restricie referenial. n general, rndurile subordonate trebuie terse naintea rndurilor printe. Exemple: S se tearg filmul adugat mai devreme (cu FILM_ID = 21 ). Se observ c trebuie s se terg mai nti rndurile corespondente din tabelele FILM_COPY i FILM_LIMBA, deoarece acestea sunt rnduri copii ale rndului din tabelul FILM DELETE FROM FILM_COPY WHERE FILM_ID = 21; DELETE FROM FILM_LIMBA WHERE FILM_ID = 21; DELETE FROM FILM WHERE FILM_ID = 21; S se tearg din tabelul FILM_LIMBA toate rndurile pentru limba spaniol (COD_LIMBA='es' ). n multe implementri SQL se face diferenierea literelor
mari de cele mici, caz n care valoarea codului de limb trebuie specificat cu litere mici pentru a se potrivi cu datele din tabel. DELETE FROM FILM_LIMBA WHERE COD_LIMBA =es;
ntrebri i probleme
1. Limbajul DML include urmtoarele comenzi SQL: a. INSERT b. REMOVE c. UPDATE d. SELECT e. DROP 2. O instruciune DML poate referi a. Coloane din mai multe tabele b. Coloane dintr-un singur tabel c. O vizualizare care conine coloane dintr-un singur tabel d. Coloane ale unei vizualizri bazate pe un singur tabel e. Coloane ale unei vizualizri bazate pe mai multe tabele 3. La formarea unei instruciuni DML, trebuie s tineti seama de urmtoarele restricii a. Restricii refereniale b. Restricii de securitate c. Restricii NOT NULL d. Restricii de unicitate e. Restricii cheie primar 4. O instruciune INSERT cu o clauz VALUES a. Trebuie s aib o list de coloane b. Trebuie s aib o list de valori c. Poate insera rnduri multiple la o singur rulare d. Poate folosi cuvntul cheie NULL pentru a atribui valori nule coloanelor e. Poate include o clauz WHERE 5. O instruciune INSERT cu o comand SELECT imbricat este util pentru a. Gsirea urmtoarei valori pentru o cheie primar atribuit secvenial b. Mutarea rndurilor dintr-un tabel n altul c. Popularea unui tabel de test cu date dintr-un alt tabel d. Eliminarea rndurilor duplicate dintr-un tabel e. Inserarea mai multor rnduri ntr-un tabel cu o singur instruciune 6. O instruciune INSERT cu o comand SELECT imbricat a. Trebuie s aib dou liste de coloane, una n clauza INSERT i una n b. Trebuie s aib o instruciune SELECT intern care retumeaz un singur de date c. Poate folosi cuvntul cheie NULL pentru a atribui valori nule coloanelor d. Poate include o clauz WHERE
rnd
e. Trebuie s aib n instruciunea SELECT intern o list de coloane care corespunde cu lista de coloane din clauza INSERT sau cu coloanele din tabelul n care sunt inserate datele 7. O instruciune UPDATE fr o clauz WHERE a. Actualizeaz toate rndurile din tabel cu valori nule b. ncearc s actualizeze toate rndurile din tabel c. Eueaz i returneaz o eroare d. terge toate rndurile din tabel e. Are ca rezultat un produs cartezian 8. O instruciune DELETE fr o clauz WHERE a. Actualizeaz toate rndurile din tabel cu valori nule b. Eueaz si returneaz o eroare c. ncearc s tearg toate rndurile din tabel d. Are ca rezultat un produs cartezian e. Trebuie s includ o list de coloane 9. O instruciune UPDATE a. Trebuie s includ o clauz SET b. Trebuie s furnizeze o nou valoare pentru cel puin o coloan c. Trebuie s includ o clauz WHERE d. Poate atribui unei coloane valoarea unei alte coloane e. Poate atribui unei coloane o list de valori derivate dintr-o expresie 10. O instruciune DELETE a. Poate include o list opional de coloane b. Poate include o clauz WHERE opional c. Poate folosi cuvntul cheie FORCE pentru a fora tergerea rndurilor d. Nu poate nclca restriciile refereniale ale tabelului e. Poate avea o instruciune SELECT intern, ca parte a clauzei WHERE 11. Clauza SET dintr-o instruciune UPDATE poate atribui unei coloane o valoare care este a. O constant b. Numele unei alte coloane c. O list de valori d. Orice expresie din care rezult o singur valoare e. Cuvntul cheie NULL 12. Instruciunea SELECT intern a unei instruciuni INSERT poate include a. O clauz WHERE b. O clauz GROUP BY c. Una sau mai multe funcii de agregare d. O uniune a mai multor tabele e. O clauz UNION Scriei instruciuni SQL pentru urmtoarele probleme
13. Folosind o instruciune INSERT cu o clauz VALUES, dar fr list de coloane, inserai n tabelul FILM_GENRE un nou rnd, cu valorile FILM_COD_GEN = TRAIN' i FILM_DESCRIERE_GEN = Training'. 14. Folosind o instruciune INSERT cu o clauz VALUES si o list de coloane, inserai n tabelul FILM un nou rnd, cu urmtoarele valori pentru date: FILM_ID: FILM_COD_GEN: MPAA_COD_RATING: FILM_NUME: 99 'TRAIN' NR ANGAJAT Training Video
15. Folosind o instruciune INSERT cu o instruciune SELECT intern, inserai n tabelul FILM_LIMBA un rnd pentru limba japonez (COD_LIMBA = 'ja'), asociat cu toate filmele din tabelul FILM. (n prezent, tabelul FILM_LIMBA nu conine nici un rnd pentru limba japonez.) 16. Creai un tabel, numit TOTAL_INCHIRIERE, folosind instruciunea CREATE de mai jos. Folosind o instruciune INSERT cu o instruciune SELECT intern, inserai n tabelul TOTAL_INCHIRIEREun rnd pentru fiecare film din tabelul FILM INCHIRIERE, coninnd numrul total de nchirieri i suma total obinut din nchirierea filmului respectiv. CREATE TABLE TOTAL_INCHIRIERE (FILM_ID INTEGER NOT NULL, NUMBER_OF_INCHIRIERES INTEGER NOT NULL, TOTAL_COST_INCHIRIERES NUMERIC (7, 2) NOT NULL); 17. tergei toate rndurile din tabelul INCHIRIERE TOTAL. 18. tergei rndurile pentru limba japonez, create la ntrebarea 15. 19. Copia 1 a filmului 1 (FILM_ID = 1, NUMAR_COPIE = 1) a fost vndut pe data de 15 ianuarie 2005. actualizai rndul respectiv din tabelul FILM_COPII. 20. Actualizai tabelul FILM astfel nct s cretei cu 10 procente toate preurile pentru formatul VHS (RETAIL_PRET_VHS) care nu conin valori nule.
Access SQL nu contine cuvinte rezervate identice pentru toate cuvintele cheie din ANSI SQL(cuvinte rezervate sunt cuvintele cheie din ANSI SQL care se potrivesc n Accesss SQL ). Pentru cuvintele rezervate se pot consulta documentaia Access sau cutate tabele de pe internet. Amintim unele dintre cuvintele rezervate Accesss SQL: ADD, ALL,LTER, AS, ALIAS, ASC, AVG, BETWEEN, BY, CONSTRAINT, INDEX, INNER, INSERT, INTO, IS, JOIN, KEY, LEFT, LIKE, MAX, MIN, NOT, NULL, ON, OR, ORDER, OUTER, PRIMARY, REFERENCES, RIGHT, SELECT, SET, UNION, UNIQUE, UPDATE, VALUES, WHERE. Pentru tipurile de date, cuvintele cheie CHAR, INT, INTEGER, REAL nu sunt trecute , deoarece, aa cum am artat n lecia 2, Access folosete alte tipuri de date( care au fost specificate acolo) Operatorii sunt aceiai ca n ANSI SQL, numai operatorul !+ devine n Accessoperatorul diferit,<>. Pentru caractere de nlocuire , s-a menionat la operatorul logic LIKE (prezentat n lecia 2 la operatori) ca acestea sunt diferite de ANSI SQL. Exempl de diferene:
Access
? *
ANSI SQL
_ %
Scop
nlocuiete un caracter nlocuiete zero sau mai multe caractere
# nu un singur numar, 0 - 9 <> != diferit DISTINCTROW nu Folosit la SELECT Not: Cuvntul rezervat DISTINCTROW din Access este folosit cu cuvntul cheie SELECT pentru a elimin rndurile duplicat dintr-o interogare. Cuvntul rezervat DISTINCTROW este asemntor cu cuvntul cheie DISTINCT din ANSI SQL, dar nu identic. DISTINCT elimin rndurile duplicat dintr-o interogare innd cont numai de valoarea datelor nscrise n interogare, de la stnda la dreapta. Nu se pot actualiza valori din interogrile cu mai multe tabele care includ cuvntul cheie DISTINCT. Cuvntul rezervat DISTINCTROW (numai n Access) a elimin rndurile duplicat dintr-o interogare innd cont de ntreg coninut al tabelei, indiferent dac sunt incluse sau nu campuri suplimentare pentru a diferenia nregistrrile din tabel. DISTINCTROW permite actualizarea valorilor din tipuri speciale de obiecte din mai multe tabele. Pentru a clarifica deosebirea dintre cele doua cuvinte, s presupunem c avem o tabel de felul urmtor: NUME PRENUME Popescu Ana Ionescu Dan Niculescu Ana Popescu Ion
Dac creiem o interogare care are inclus coloana PRENUME, atunci DISTINCT va returna 3 inregistrri pentru ca apare Ana de 2 ori, iar DISTINCTROW va returna toate 4 nregistrrile. Pentru a folosi comenzile Access SQL din DDL, DQL, DML prezentate n leciile precedente, avem mai multe posibilitti: 1. Metoda View n care se urmeaz paii: a. Se execut clic pe eticheta Query din fereastra Database b. clic pe butonul New pentru a deschide o nou interogare c. se trece n modul Design d. din meniul View se alege SQL e. se introduc comenzile (create table, Select, etc, f. se execut interogarea cu Run g. se salveaz h. dac a fost o comand CREATE TABLE se verific daca a fost creat tabelul cu numele dat n nterogare 2. Cu ajutorul butonului Query, n care se urmeaz paii: a. Se execut clic pe eticheta Query din fereastra Database b. clic pe butonul New pentru a deschide o nou interogare c. se trece n modul Design d. se execut clic pe sgeata de lng butonul Query de pe bara de instrumente i se selectez SQL e. se execut i se salveaz cu nume In funcie de ce s-a creat(interogare sau tabel) 3. Metoda de personalizare a barei de instrumente, n care se urmeaz paii: a. Se execut clic pe eticheta Query din fereastra Database b. clic pe butonul New pentru a deschide o nou interogare c. se trece n modul Design d. clic pe meniul Customize i se alege din Categories, Query Design i se trage butonul SQL n bara de instrumente e. Se execut clic pe butonul creat SQL , se creiaz interogarea dorit i apoi se salveaz. 4. Metoda rapid n care se urmeaz paii: a. Se execut clic pe eticheta Query din fereastra Database b. clic pe butonul New pentru a deschide o nou interogare c. se trece n modul Design d. Clic dreapta cu indicatorul mous-ului plasat n fereastra interogrii i se alege View SQL din meniul popup
trebuie s se ncadreze cu paranteze drepte ([]) intrrile pentru field_names care conin spaii. Pentru data_type se poate folosi orice tip de date pentru cmp din Access SQL, cum este TEXT sau INTEGER. Intrarea field_size este opional doar pentru cmpurile TEXT. (Valoarea prestabilit este de 50 de caractere.) CONSTRAINT index_name (PRIMARYKEY | UNIQUE | REFERENCES foreign_table [(foreign_field)]} creeaz un index dup numele cmpului care precede expresia. Se poate specifica indexul ca PRIMARYKEY sau ca UNIQUE. De asemenea, se poate stabili o relaie ntre cmp i cmpul unei tabele externe cu intrarea REFERENCES foreign_table [foreign _field]. (Elementul [foreign_field] este necesar dac foreign_field nu este un cmp de cheie principal). ALTER TABLE permite s se aduge noi cmpuri (ADD COLUMN field_name...) sau s le tearg pe cele existente (DROP COLUMN field_name ...) DROP INDEX index_name ON table_name terge indexul dintr-o tabel specificat de table_name. DROP TABLE table_name terge o tabel din baza de date.
Cnd exist mai multe nume de tabele, sunt utilizate virgule pentru a le separa. WHERE search_criteria determin care nregistrri din lista de selecie vor fi afiate. Parametrul search_criteria este o expresie care conine un operator de text (ir), cum este LIKE, pentru cmpurile de tip text sau un operator numeric, cum este >=, pentru cmpurile cu valori numerice. Clauza WHERE este opional; dac nu se adug clauza WHERE, sunt returnate toate rndurile care ndeplinesc criteriul SELECT. ORDER BY column_criteria specific ordinea de sortare a unui obiect Recordset de tip Dynaset sau Snapshot, creat de interogare. Un obiect Recordset de tip Snapshot este un set de rezultate care nu poate fi actualizat. Ca i clauza WHERE, ORDER BY este un element opional. Se poate specifica o sortare ascendent sau descendent cu cuvintele cheie ASC sau DESC. Dac nu se specific tipul sortrii, este folosit sortarea ascendent.
Urmtoarele linii prezint un exemplu simplu de instruciune SQL de interogare, folosind baza de date a Access Northwind.mdb: SELECT [Company Name] , [Customer ID] , [Postal Code] FROM Customers WHERE [Postal Code] LIKE "9*" ORDER BY [Company Name]; Se nchide o instruciune Access SQL prin adugarea semnului punct i virgul (;) imediat dup ultimul caracter al ultimei linii. Interogarea de mai sus produce un obiect Access Recordset cu trei coloane i attea rnduri cte nregistri cu firme al cror cod potal ncepe cu caracterul 9 exist n tabela Customers, sortare n ordine alfabetic dup numele firmei. Nu trebuie s se specifice numele tabelei pentru cmpurile din select_list deoarece n aceast interogare este utilizat o singur tabel. Cnd Access creeaz o instruciune SQL, numele cmpului este precedat ntotdeauna de numele tabelei. De obicei, Access prelucreaz interogrile indiferent dac sunt scrise cu sintaxa ANSI SQL sau Access SQL. Acest exemplu difer de ANSI SQL doar prin utilizarea caracterului de nlocuire * (asterisc) din Access SQL n local caracterului % din ANSI SQL.
5. Se introduce n fereastra SQL instruciunea SQL urmtoare. Se utilizaez Ctrl+Enter pentru a crea linii noi. SELECT CompanyName, CustomerID, PostalCode FROM Customers WHERE PostalCode LIKE "9*" ORDER BY CompanyName; 6. Se alege View, Query Design. Access creeaz un echivalent grafic QBE pentru instruciunea SQL. 7. Se execut click pe butonul Run Query de pe bara cu instrumente. Rezultatul interogrii apare n modul Datasheet View. Pentru a schimba ordinea de sortare a rezultatelor interogrii, se execut paii urmtori: 1. Se alege View, SQL pentru a deschide fereastra SQL. 2. Se Schimb ORDER BY [CompanyName] cu ORDER BY [Postal Code] i se alege View, Query Design pentru a deschide fereastra Query Design. Grila Query n modul de proiectare afieaz Ascending n coloana PostalCode, nu n coloana CompanyName, ceea ce dovedete c setul de rezultate al interogrii este sortat dup codul ZIP (codul potal). 3. Se execut clic pe butonul Run de pe bara cu instrumente pentru a afia setul de rezultate sortat dup codul ZIP. 4. Se nchide interogarea fr a se salva.
gruprii. WHERE search_criteria opereaz nainte de grupare; n aceast etap nu exist nici o valoare global creia s i poat fi aplicat criteriul aggregate_criteria. Access nlocuiete WHERE cu HAVING cnd se adaug unei coloane un criteriu cu aggregate_function. Interogarea GROUP BY este scris n ANSI SQL, cu excepia simbolurilor # care delimiteaz valorile de tip dat sau or: SELECT ShipRegion, SUM(Freight) AS [Total Freight] //freight=marf FROM Orders WHERE ShipCountry="USA" AND OrderDate BETWEEN #07/1/95# AND # 12/31/96# GROUP BY ShipRegion HAVING SUM(Freight) >50 ORDER BY SUM(Freight) DESC; Interogarea returneaz un set de rezultate care const din dou coloane: Ship Region (state) i totalul transporturilor (Freight) pentru fiecare stat din Statele Unite n anii 1991-1994. Setul de rezultate este sortat n ordine descresctoare. Pentru a crea n Access o interogare SQL GROUP BY, se execut paii urmtori: 1. Se deschide o nou interogare, se alege View, SQL i se introduce codul surs al interogrii precedente n dialogul SQL. 2. Se alege View, Query Design. 3. Se execut clic pe butonul Run Query de pe bara cu instrumente. Statele cucomenzi care au cheltuieli de transport de 50$ sau mai mari n perioada cuprins ntre 07/1/95 i 12/31/96 sunt afiate n ordinea cheltuielilor totale de transport n modul Datasheet View. 4. Se nchide interogarea fr s se salveze.
Cnd se specific o autoasociere prin includerea a dou copii ale listei cu cmpuri pentru o singur tabel, a doua tabel este deosebit de prima prin adugarea la nume a unei liniue de subliniere urmat de o cifr. Unul dintre cele trei tipuri de asociere, INNER, LEFT sau RIGHT, trebuie s apar n faa instruciunii JOIN. INNER specific o asociere de tip echivalent, LEFT specific o asociere extern la stnga, iar RIGHT indic o asociere extern la dreapta. Tipul asocierii este determinat n Access QBE executnd dublu click pe linia care conecteaz cmpurile asociate n tabel i apoi executnd clic pe butonul de opiune 1,2 sau 3 n dialogul Join Properties. ON join_criteria specific cele dou cmpuri care vor fi asociate i relaia dintre ele. Unul dintre cmpuri se afl n join_table, iar cellalt este ntr-o tabel din table_names. Expresia join_criteria conine un operator de comparaie de tip egalitate (=) i returneaz o valoare True sau False. Dac valoarea expresiei este True, nregistrarea din tabela asociat este inclus n interogare.
Numrul de instruciuni JOIN pe care le putei aduga ntr-o interogare este de obicei egal cu numrul total de tabele minus unu. Putei crea mai multe asocieri ntre dou tabele, dar rezultatul este greu de prevzut. Mai jos este prezentat instruciunea Access SQL pentru o asociere de tip echivalent ntre tabelele Order Details si Orders bazat pe valorile ID din fiecare tabel, iar Orders apare i n clauza FROM. Orders este asociat cu instruciunea JOIN i este cerut n asocierile Access SQL. Cuvntul rezervat JOIN din Access SQL creeaz mai liniile care conecteaz cmpurile asociate n Query Design. n ANSI SQL se pot crea asocieri de tip echivalent cu clauza WHERE utiliznd aceleai expresii pentru asocierea cmpurilor ca i acelea din clauza ON a comenzii JOIN. Clauza WHERE este mai flexibil dect structura JOIN...ON deoarece putei utiliza operatori ca BETWEEN...AND, LIKE, > i < . Utilizarea acestor operatori n locul semnului egal (=) din clauza ON a instruciunii JOIN determin apariia mesajelor de eroare. n acest caz nu trebuie s precizai nc o dat cmpul Orders. Instruciunea ANSI SQL din rndurile urmtoare duce la un rezultat identic cu acela al instruciunii Access SQL. Urmeaz implementarea Access SQL a unei asocieri de tip echivalent: SELECT DISTINCTROW Orders.OrdersID, Orders.CustomerID, [Order Details].ProductID, [Order Details].Quantity FROM Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID ORDER BY Orders.OrderID ; Vom realiza acum asocierea cu ajutorul clauzei WHERE: SELECT DISTINCTROW Orders.OrdersID, Orders.CustomerID, [Order Details].ProductID, [Order Details].Quantity FROM Orders, [Order Details].
WHERE Orders.OrderID = [Order Details].OrderID ORDER BY Orders.OrderID ; Pentru a crea mai multe asocieri cu clauze WHERE, se separ fiecare expresie JOIN cu un operator AND. .
UNION SELECT CompanyName, City, PostalCode, Region, CustomerID AS ID FROM Customers Where County=Brazil
Implementarea subinterogrilor
Versiunile care au aprut nainte de Access 2.0 utilizau interogri imbricate pentru a emula capacitatea de subinterogare din ANSI SQL. (O interogare imbricat este o interogare care se aplic setului de rezultate al altei interogri). Access 7.0 v permite s scriei o interogare SELECT care utilizeaz o alt interogare SELECT pentru a preciza criteriul clauzei WHERE. n funcie de complexitatea interogrii dvs., utilizarea unei subinterogri n locul interogrilor imbricate duce de multe ori la mbuntirea performanelor. Sintaxa general a subinterogrilor este urmtoarea: SELECT field_list FROM table_list WHERE [table_name.]field_name IN SELECT select_statement [GROUP BY group_criteria] [HAVING aggregate_criteria] [ORDER BY sort_criteria] De exemplu, utiliznd aceiai baz, creim o subinterogare care s returneye numele i adresa clienilor care au trimis comenzi ntre 1 ianuarie i 30 iunie. Interogare care incepe dup IN returneaz valorile valorile CustomerID din tabela Orders cu care sunt comparate valorile CustomerID din tabela Customers. SELECT DISTINCTROW , Customers.ContractName, Customers.ContractTitle, Customers.Phone FROM Customers WHERE Customers.CustomersID IN(SELECT DISTINCTROW Orders.CustomerID FROM Orders WHERE Orders.OrderDate Between #1/1/94# And #7/1/94#); Spre deosebire de interogrile UNION, subinterogrile pot fi create n modul de proiectare a interogrii. Tastai IN i apoi instruciunea SELECT pentru a crea criteriul coloanei corespunztoare.
Interogrile de adugare utilizeaz urmtoarea sintax: INSERT INTO dest_table SELECT [ALL|DISTINCT|DISTINCTROW] select_list FROM source_table [WHERE append_criteria] Dac nu introducei clauza WHERE, toate nregistrrile din source_table sunt adugate n dest_table. Interogrile de tergere au forma urmtoare: DELETE FROM table_name [WHERE delete_criteria] Dac nu introducei clauza opional WHERE ntr-o interogare de tergere, vor fi terse toate datele din table_name. Interogrile de creare a unei tabele utilizeaz sintaxa urmtoare: SELECT [ALL| DISTINCT|DISTINCTROW] select_list INTO new_table FROM source_table [WHERE append_criteria] Pentru a copia tabela original, nlocuii select_list cu (*) i nu introducei clauza WHERE. Interogrile de actualizare utilizeaz comanda SET pentru a atribui valori coloanelor individuale: UPDATE table_name SET criteria_name=value [. column_name=value] [WHERE update_criteria] Dac vrei s actualizai datele din mai multe cmpuri, pentru separarea coloanelor i a valorilor corespunztoare folosii virgule. Access 7.0 SQL permite utilizarea cuvntului cheie VALUES din ANSI SQL pentru a aduga nregistrri n tabele n modul forat (specificnd VALUE pentru fiecare coloan din fiecare nregistrare). Interogrile ncruciate utilizeaz cuvintele cheie Access SQL TRANSFORM i PIVOT pentru a crea diferite tipuri de interogri rezumative cu ajutorul funciilor globale SQL. Urmtoarea sintax este utilizat de interogrile ncruciate de tip cronologic: TRANSFORM aggregate_function (field_name) [AS alias] SELECT [ALL| DISTINCT|DISTINCTROW] select_list FROM table_name PIVOT Format(field_name), format_type [IN (column_list)]
TRANSFORM definete o interogare ncruciat, iar PIVOT specific caracteristicile GROUP BY i numele coloanelor fixate, introduse de predicatul IN.
II. BIBLIOGRAFIE
1. Ileana Popescu, Letiia Vercescu, Proiectarea bazelor de date, Editura 2. Popescu Ileana, Modelarea bazelor de date, Editura Tehnic, 2001 3. Florentina Rodica Niculescu, Modelarea sistemelor software - Visio i UML, Editura Universitii din Bucureti, 2007 4. Mariana Popa, Baze de date Editura FRM, 2006 5. Roger Jennings, Utilizare Access, Editura Teora, 1998 6. Chris Fehily, SQL- nvai SQL rapid i uor!, Editura B.I.C. ALL, 2004