Sunteți pe pagina 1din 188

Informaii Curs- Baze de date Anul III-Informatic

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

SINTEZE ASUPRA PROGRAMEI ANALITICE


Cursul este structurat n 3 pri, astfel: Partea I. Concepte ale bazelor de date relaionale Partea a_II-a. Access Partea a_III_a. SQL

Partea I. Concepte ale bazelor de date relaionale


n aceast parte se face o prezentare general a conceptelor bazelor de date relaionale. O baz de date este o colecie de informaii interrelaionate gestionate ca o singur unitate. A ceast definiie este foarte larg, deoarece exist mari diferene ntre concepiile diferiilor productori care pun la dispoziie sisteme de baze de date. De exemplu, Oracle Corporation definete o baz de date ca fiind o colecie de fiiere fizice gestionate de o singur instan (copie) a produsului software pentru baze de date, n timp ce Microsoft definete o baz de date SQL Server ca fiind o colecie de date i alte obiecte. Un obiect al bazei de date este o structur de date denumit, stocat n baz de date, cum ar fi un tabel, o vizualizare sau un index. Exist mari diferene ntre implementrile furnizorilor de baze de date. n majoritatea sistemelor de baze de date, datele sunt stocate n mai multe fiiere fizice,

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.

Sistem de gestionare a bazei de date (DBMS)


Un sistem de gestionare a bazei de date (DBMS database management system) este un produs software furnizat de productorul bazei de date. Produse software precum Microsoft Access, Microsoft SQL Server, Oracle Database,Sybase, DB2,INGRES, MySQL i Postgre SQL fac parte din categoria DBMS sau, mai corect, DBMS relaionale (RDBMS). RDBMS-urile sunt cunoscute i sub numele de SGBD-uri. Ambele prescurtri vor fi folosite n acest expunere. Bazele de date relaionale sunt definite i prezentate n seciunea urmtoare a acestu capitol. Sistemul DBMS pune la dispoziie toate serviciile de baz necesare pentru organizarea i ntreinerea bazei de date, inclusiv urmtoarele: Transferarea datelor n i din fiierele fizice de date, n funcie de cerine. Gestionarea accesului concurenial la date al mai multor utilizatori , inclusiv prevenirea conflictelor care ar putea fi cauzate de actualizrile simultane. Gestionarea tranzaciilor, astfel nct toate modificrile fcute asupra bazei de date printr-o tranzacie s fie executate ca o singur unitate.Cu alte cuvinte, dac tranzacia reuete, toate modificrile efectuate de tranzacie sunt nregistrate n baz de date; dac tranzacia eueaz, nici una dintre modificri nu este nregistrat n baz de date.Totui, reinei ca unele sisteme RDBMS nu asigur suportul pentru tranzacii. Accept un limbaj de interogare, care reprezint sistemul de comenzi folosit de utilizator pentru a obine date din baz de date.SQL este principalul limbaj folosit pentru sistemele DBMS relaionale i subiectul principal al aceste cri. Funcii pentru salvarea bazei de date i pentru refacerea bazei de date n urma erorilor. Mecanisme de securitate pentru mpiedicarea accesului neautorizat la date i modificarea acestora.

Baz de date relaional


O baz de date relaional este o baz de date care respect modelul relaional, dezvoltat de Dr.E.F.Codd. Modelul relaional prezint datele sub forma familiarelor tabele bidimensionale, similar cu o foaie de calcul tabelar. Spre deosebire de o foaie de calcul tabelar, nu este obligatoriu ca datele s fie stocate ntr-o form tabelar, iar modelul permite i combinarea tabelelor (crearea uniunilor (joining), n terminologia relaional) pentru formarea vizualizarilor, care sunt prezentate tot ca tabele bidimensionale. Flexibilitatea extraordinar a bazelor de date relaionale este dat de

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.

Diagrama entitate- relaie


Pentru proiectarea diagramei entitate-relaie au fost stabilite anumite reguli entitile sunt reprezentate prin dreptunghiuri; relaiile dintre entiti sunt reprezentate prin arce neorientate; atributele care reprezint chei primare trebuie subliniate sau marcate prin simbolul # sau (pk), plasat la sfritul numelui acestor atribute; cardinalitatea minim este indicat n paranteze, iar cardinalitatea maxim se scrie fr paranteze; nu este necesar s fie specificate, n cadrul diagramei, toate atributele.

SALARIAT cod_salariat nume prenume sex salariu

atasat_la
M(0) M(0)

PROIECT nr_proiect descriere buget_alocat

data_initiala functia

1
1 M(0)

apartine_la conduce lucreaza_in

1(0)

11

M
SARCINA nr_proiect nr_sarcina data_inceperii stare

DEPARTAMENT cod_departament nume nr_cladire cod_salariat

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

unei alte entiti, atunci el refer o relaie (cod_departament n tabelul SALARIAT).


5. Entitate sau relaie? Se cerceteaz cheia primar. Dac aceasta combin cheile

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

codel# titlu autor pret nrex M(0)

codec# nume dep

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#

3. Campionatele de fotbal ale diferitelor ri


ECHIPA Cod_echipa# Nume Oras 2 joaca M(1) MECI Tara# Nr_etapa# Cod_meci# M(1) apartine_de 1 ETAPA Tara Nr_etapa M(1) atasata_la 1 CAMPIONAT Tara# M(1) sustine M(1) SPONSOR M(1) Cod_sponsor# Nume

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.

Caracteristicile unui model relaional:

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.

Transformarea atributelor Un atribut singular devine o coloan.

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.

SALARIAT cod_salariat# salariu nume sex

job_cod ATASAT_LA cod_salariat# nr_proiect# functie

PROIECT nr_proiect# descriere buget_alocat

AGENT_TERITORIAL zona comision

PROGRAMATOR limbaj nivel

apartine_la

conduce

lucreaza_in

casatorit

SARCINA nr_proiect# nr_sarcina# data_inceperii stare

DEPARTAMENT cod_departament# nume nr_cladire cod_salariat

TELFON cod_salariat# nr_telefon#

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.

Exemplu pentru nsuirea formelor normale i a instruciunilor SQL


Componentelor fundamentale ale bazelor de date relaionale sunt utilizate pentru a construi obiectele bazelor de dae pe care le vom folosi . Instruciunile SQL folosite pentru crearea acestor componente ale bazei de date sunt prezentate n parte.

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

Drama ActAv ActAv

PG-13 R PG-13

10 11 12 13 14 15 16 17 18

Drama Romantic Comedie Comedie Drama Drama Comedie Romantic Drama

R PG-13 PG-13 PG-13 R R PG-13 PG-13 R

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

58.97 15.95 14.95 11.95 24.99 29.99

19.96 19.96 29.99 19.99 29.99 29.99

14.95 50.99 12.98

19.94 29.98 39.99

2003 2004 2003

49.99 6.93 9.95 6.93 24.99 9.99 11.69 14.94 24.99

14.98 14.97 19.94 19.97 29.99 14.99 29.99 28.95 29.99

2003 2002 2004 2003 2003 2003 2004 2003

19 20

ActAv Strain

PG-13 R

The Day Tomorrow Das Boot

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

FILM_COD_GEN <fk1> MPAA_COD_RATING <fk2> FILM_NUME RETAIL_PRET_VHS RETAIL_PRET_DVD AN_PRODUS

FILM_GEN FILM_COD_GEN <pk> FILM_DESCRIERE_GEN

FILM_COPII FILM_ID <pk, fk>> NUMAR_COPIE <pk> DATA_CUMPARARE DATA_VANZARE FORMAT_MEDIA

Figura 1-2

Diagrama ERD a bazei de date (prezentare parial)

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).

Proiectate bazele de date relaionale


Aceast seciune prezint, foarte pe scurt, procesul general de proiectare a bazelor de date. Atunci cnd ai vzut pentru prima dat figur 1-2 , mai devreme n acest lecie probabil v-ai ntrebat de ce coloanele au fost plasate n tabele multiple i de ce o anumit coloan a fost inclus ntr-un anumit tabel i nu n altul. Scopul acestei seciuni este de a v ajuta s rspundei la ntrebrile de mai sus i de a v oferi un punct de plecare, dac decidei s proiectai propriile baze de date pe msur ce nvai limbajul SQL. Totui proiectarea bazelor de date este un domeniu mult mai larg. n 1972, Dr.E.F.Codd, printele bazelor de date relaionale, a pus la punct un set de reguli care trebuie respectate (organizate n trei forme normale) i un poroces numit normalizare, care este o tehinca pentru producerea unui set de relaii (termenul folosit de Dr. Codd pentru tabele) cu proprietile dorite.

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

The Last Samurai

200 3

01/10/2005

DVD

19.96

en, fr, es

The Last Samurai

200 3

01/10/2005

VHS

15.95

en

PG-13

Something's Gotta Give Something's Gotta Give The Job Italian

200 3 200 3 200 3

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

Figura 1-3 Tabelul FILM far normalizare

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.

Aplicarea procesului de normalizare


De obicei, normalizarea ncepe de la mijloacele de redare a datelor care sunt (sau vor fi) prezentate utilizatorilor, cum ar fi pagini web, ecrane ale aplicaiilor, rapoarte i aa mai departe. Colectiv, acestea sunt numite vizualizri de utilizator (user views). Poate prea ciudat la prima vedere, dar este ceva obinuit ca proiectarea unui sistem de prelucrare a datelor s nceap de la rezultatele pe care le va vedea utilizatorul, parcurgnd apoi drumul napoi ctre mijloacele folosite pentru obinerea rezultatelor dorite. n timpul proiectrii bazei de date, procesul de normalizare este aplicat fiecrei vizualizri , iar rezultatul este un set de relaii normalizate care pot fi apoi direct implementate ca tabele ale bazei de date relaionale. Stpnirea procesului de normalizare cere timp i exerciiu, n specia deoarece impune prouectantului s se gndeasc ntr-un mod conceptual la datele i relaiile pe care intenioneaz s le foloseasc. n timpul normalizrii , considerai ca fiecare vizualizare este o relaie. Cu alte cuvinte, conceptualizai fiecare vizualizare ca i cum ar fi deja un tabel bidimensional . De asemenea , este nevoie de timp pentru a va obinui cu terminologia folosit n procesul de normalizare. n timpul acestui proces, majoritatea proiectanilor evit folosirea unor termeni fizici, precum tabel, coloan i cheie primar. Dei relaia pe cale de a fi normalizat reprezint o propunere de tabel , nc nu exist ca tabel fizic, aa c termenul nu este foarte exact. Procesul de normalizare este aplicat sistematic fiecrei vizualizri. Cel puin la nceput este mai uor s reprezentai fiecare vizualizare ca un tabel bidimensional, coninnd date repetitive, aa cum am fcut n figura 1-3. Pe msur ce parcurgei procesul de normalizare, vei rescrie relaiile existente i vei crea altele. Rescrierea vizualizrilor n relaii (tabele) cu date reprezentative este un proces obositor i

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.

Alegerea unui identificator unic


Primul pas al procesului de normalizare const n alegerea unui identificator unic (unique identifier), care este un atribut (o coloan) sau un set de atribute care identific n mod unic fiecare rnd de date dintr-o relaie. Identificatorul unic va deveni ulterior cheia primar a tabelului creat din relaia normalizat. Pentru normalizare, este obligatoriu ca fiecare relaie s aib un identificator unic. In multe cazuri, putei gsi un atribut care identific n mod unic datele din fiecare rnd al relaiei pe care vrei s o normalizai. Atunci cnd nu putei gsi un singur atribut care s poat fi folosit ca identificator unic, este posibil s gsii mai multe atribute care pot fi concatenate (combinate) pentru a forma un identificator unic. Atunci cnd identificatoarele unice sunt formate din atribute multiple, fiecare atribut rmne pe propria lui coloan - nu facei dect s definii un identificator unic format din mai multe coloane, n foarte puine cazuri, ntr-o relaie nu exist un set rezonabil de atribute care s poat fi folosit ca identificator unic. Atunci cnd se ntmpl acest lucru, trebuie s inventai un identificator unic, deseori cu valori atribuite secvenial sau aleatoriu pe msur ce noile rnduri de date sunt adugate n tabelul bazei de date. Aceast tehnic este sursa unor identificatoare unice, precum numrul de asigurri sociale folosit n Statele Unite, numerele de identificare ale angajailor sau numerele de nmatriculare ale mainilor. Relaia FILM din figura 1-3 ne pune o problem n privina gsirii unui identificator unic. La prima vedere, ar prea c atributul FILM_ID este cel mai potrivit n acest scop. Totui, observai c valorile FILM_ID 2" i 3" apar de cte dou ori, aa c, fr nici un dubiu, aceast valoare nu este unic. Problema este c valoarea FILM_ID identific n mod unic fiecare titlu, dar magazinul urmrete separat fiecare copie a filmelor pe care le are n stoc Cauza este faptul c magazinul se ocup i de nchirierea filmelor i vrea s se asigure c fiecare client returneaz exact copia pe care a nchiriat-o. Dup inspectarea datelor folosite ca exemplu i o scurt discuie cu proprietarul magazinului, ajungei la concluzia c n relaia FILM nu exist nici o combinaie de atribute care s identifice n mod unic fiecare copie a unui film, aa c inventai un atribut numit NR_ COPIE i-1 adugai n relaie. Ori de cte ori inventai un identificator unic (sau o parte a unui identificator) este foarte important ca toi s neleag valorile pe care le va lua acest identificator. In acest caz, proprietarul magazinului decide ca valorile NR_ COPIE s renceap de la 1 pentru fiecare valoare FILM_ID, ceea ce nseamn c valorile NR_ COPIE sunt unice numai n combinaie cu valorile FILM_ID. Relaia rezultat este prezentat n figura 1 4

Prima form normal: eliminarea datelor repetate

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

Come die Come die ActA v

Actiune si aventur a Actiune si aventur a Comedi e Comedi e Actiune si aventur a

en, fr, es

en, fr, es

en

PG13 PG13 PG13

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

The Last Samurai

20 03

01/10/20 05

DVD

19.96

The Last Samurai

20 03

01/10/20 05

VHS

15.95

en

en, fr

sunt

Something' s Gotta Give Something' s Gotta Give The Italian Job

20 03 20 03 20 03

01/10/20 05 2/15/200 5 2/15/200 5

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

MPA A_CO D_RA TING

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

Actiune si aventura Actiune si aventura Comedie

The Samurai

Last

ActA v

The Samurai

Last

Come die

PG-13

Something's Gotta Give

Come die

Comedie

PG-13

Parintii avertizati

sunt

Something's Gotta Give

ActA v

Actiune si aventura

PG-13

Parintii avertizati

sunt

The Italian Job

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

DATA _CUM PARA RE

DAT A_VA NZAR E

MEDIA FORMAT

PRET _INC HIR

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.

A doua form normal: eliminarea dependenelor pariale


nainte de a explora a doua form normal, trebuie definit conceptul de dependen funcional. Pentru aceast definiie, voi folosi dou atribute arbitrare, inteligent denumite A" i B". Atributul B este dependent funcional de atributul A dac n nici un moment nu exist mai mult de o valoare a atributului B asociat cu o valoare dat a atributului A. In primul rnd, a spune c atributul B este funcional dependent de atributul A nseamn i c atributul A determin atributul B sau c A este un determinant (identificator unic) pentru atributul B. n al doilea rnd, s ne mai uitm o dat la relaiile din figura 1-5. n relaia FILM, putei s v dai seama cu uurin c atributul FILM_NUME este dependent funcional de atributul FILM_ID, deoarece, n orice moment, poate exista o singur valoare FILM_NUME pentru o valoare FILM_ID dat. Chiar faptul c valoarea FILM_ID definete n mod unic valoarea FILM_NUME n relaie nseamn c FILM_NUME este dependent funcional de FILM_ID. Se spune c o relaie este n a doua form normal dac ndeplinete urmtoarele criterii: Relaia este n prima form normal. Toate atributele non-cheie sunt dependente funcional de identificatorul unic (cheia primar), luat ca ntreg. Aplicnd aceste criterii relaiei FILM din figura 1 -5, este clar c avem cteva probleme. Identificatorul unic este o combinaie a atributelor FILM_ID i NR_ COPIE. Totui, numai atributele DATA_CUMPARARE, DATA_VANZARE, MEDIA FORMAT i PRET_INCHIR depind de ntregul identificator. i este logic s fie aa. Indiferent cte copii ale unui film avem n baza de date, toate au aceleai valori pentru gen, categorie MPAA, TITLU i AN_PRODUS. Unele atribute descriu filmul n sine, n timp ce altele descriu copiile pe care le deine (sau le-a deinut) magazinul din filmul respectiv. In esen, am amestecat atribute care descriu n aceeai relaie dou lucruri (entiti) diferite (dei nrudite) din lumea real. A doua form normal se aplic numai relaiilor care au identificatoare unice concatenate (adic formate din atribute multiple). ntr-o relaie care are un singur atribut ca identificator unic, este imposibil ca un alt atribut s depind de o parte a identificatorului unic, deoarece acesta, fiind format dintr-un singur atribut, nu are pri componente. Ca urmare, orice relaie n prima form normal care are cheia primar format dintr-un singur atribut este automat n a doua form normal. Dup ce descoperii o nclcare a celei de-a doua forme normale, soluia este s se mute atributele parial dependente ntr-o nou relaie, n care s depind de ntreaga cheie primar. Figura 1-6 prezint aceast soluie. Toate atributele care depind numai de FILM_ID sunt acum ntr-o relaie (numit FILM) n care FILM_ID este identificator unic. Cele care depind de combinaia FILM_ID i NR_ COPIE sunt ntr-o relaie (numit FILM Copy) n care FILM_ID i NR_ COPIE formeaz

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

Drama Actiune si aventura Comedie Actiune si aventura

2 3 4

ActAv Comed ie ActAv

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

2003 2003 2003

FILM LANGUAGE: FILM_ID LANGUAGE_CODE 1 En 1 Fr 2 En 2 Fr 2 Es 3 En 4 En 4 Fr

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

Figura 1-6. Soluia pentru a doua form normal

A treia form normal: eliminarea dependenelor tranzitive


Pentru a nelege a treia form normal, trebuie s se definesc conceptul de dependen tranzitiv. Despre un atribut care depinde de un atribut care nu este identificator unic (cheie primar) a relaiei se spune c este dependent tranzitiv. n relaia FILM din figura 1 -6, observm c atributul GEN_DESCRIEREription depinde de atributul GEN_COD, iar MPAA Ratifig Description depinde de MPAA_COD_RATING. Pericolul pstrrii acestor descrieri n relaia FILM este faptul c, n final, cele dou atribute ajung s depind de nregistrarea unui film, ceea ce duce la toate cele trei anomalii de date prezentate mai devreme n acest capitol.

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

_ MEDIA_FORMA T DVD DVD VHS DVD DVD DVD

MPAA Rating : MPAA_COD_RATING MPAA_DESCRIERE_RATING PG-13 Parintii sunt avertizati R Sub 17 ani necesita prezenta parintilor sau a unui adult

FILM GEN : FILM GEN_COD ActAv Comedie Drama

FILM_GEN_DESCRIERE Actiune si aventura Comedie Drama

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.

Forma normal Boyce-Codd (BCNF)


Dei nu ne propunem s discutm i alte forme normale avansate, consider necesar s le amintim. Dr. E. F. Codd a participat la definirea unei versiuni mai puternice a celei de-a treia forme normale, numit forma normal Boyce-Codd. Determinantul este un atribut sau o mulime de atribute neredundante, care constituie un identificator unic pentru alt atribut sau alt mulime de atribute ale unei relaii date. Intuitiv, o relaie R este n forma normal Boyce-Codd dac i numai dac fiecare determinant este o cheie candidat. 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.

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.

M PAA_RATING M PAA_COD_RATING MPAA_DESCRIERE_VARSTE

PK

FILM FILM _ID FILM_COD_GEN M PAA_COD_RATING FILM_NUM E RETAIL_PRET_VHS RETAIL_PRET_DVD AN_PRODUS

PK FK1 FK2

FILM _GEN FILM _COD_GEN FILM_DESCRIERE_GEN

PK

FILM_LIMBA FILM _ID COD_LIM BA PK,FK1 PK,FK2

FILM_COPII FILM _ID NUM AR_COPIE DATA_CUMPARARE DATA_VANZARE FORMAT_M EDIA

PK,FK1 PK

FILM_INCHIRIERE FILM _ID NUM AR_COPIE TRANZACTIE_ID DATA_INTOARCERE COST_INCHIRIERE COST_INTARZIERE_SAU_PIERDERE DATA_RETURNARE

PK,FK1 PK,FK1 PK,FK2

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

CLIENT_COD_PERSOANA CLIENT_CONT_ID PERSOANA_ID

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

ANGAJAT PERSOANA_ID SUPERVISOR_PERSOANA_ID ANGAJAT_TAXA_ID ANGAJAT_JOB_CATEGORIE ANGAJAT_RATA_PE_ORA ANGAJARE_DATA INCHIDERE_DATA

PK,FK1

Figura 1_8. Diagrama entitate relaie

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

PrenumeSt Alexandru George Lucian Diana Daciela Mihaela Liviu Marius

Grupa 114 122 243 361 341 114 412 452

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

R21 205 R5 305 BX 305 R12 R25

Doi W14 305 305

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

JOB_COD PROGRAMATOR PROGRAMATOR

NR_PROIECT# P1 P2

FUNCTIA SUPERVIZOR CERCETATOR

SUMA 60 25

S1 S3 S5

PROGRAMATOR VANZATOR INGINER

P3 P3 P3

AUXILIAR SUPERVIZOR SUPERVIZOR

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

Functia Supervizor Cercetator Auxiliar Supervizor Supervizor

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).

PARTEA a_II_a ACCESS


n acest parte a cursului de baze de date, se prezint aplicaia Microsoft Access n 7 lecii dup cum urmeaz: LECIA 1. Elemente introductive despre ACCESS LECIA 2. TABELE LECIA 3. Operatori i Funcii LECIA 4. Stabilirea relaiilor tre tabele LECIA 5. INTEROGRI LECIA 6. FORMULARE LECIA7. RAPOARTE

LECIA 1. Elemente introductive despre ACCESS


n acest lecie se vor prezenta NOIUNILE Conceptul de baz de date Componentele unei baze de date Crearea, Crearea unei baze de date vid Deschiderea unei baze de date existente nchiderea unei baze de date Conversii, Compactri, Reparaii)

Ce este o baz de date


O baz de date este o colecie de informaii interrelaionate gestionate ca o singur unitate.Aceast definiie este intenionat foarte larg, deoarece exist mari diferene ntre concepiile diferiilor productori care pun la dispoziie sisteme de baze de date. De exemplu, Oracle Corporation definete o baz de date ca fiind o colecie de fiiere fizice gestionate de o singur instan (copie) a produsului software pentru baze de date, n timp ce Microsoft definete o baz de date ca fiind o colecie de date i alte obiecte. Un obiect al bazei de date este o structur de date denumit,stocat n baz de date, cum ar fi un tabel, o vizualizare sau un index.

Conceptul de baz de date ACESS


O baz de date (n acest context) este un document Microsoft Access, folosit pentru a organiza i accesa informaiile. O baz de date este organizat n nregistrri (record-uri), elemente individuale de informaie (d.e. datele despre o persoan intr-o agend) i cmpuri, fragmente de informaii (d.e. numele unei anumite persoane). O baz de date este, de asemenea, o colecie de informaii n legtur cu un anumit subiect sau scop, de exemplu, urmrirea comenzilor clienilor sau ntreinerea unei colecii de muzic. Dac baza de date nu este stocat pe un computer, sau numai pri din ea sunt, se va urmri informaia dintr-o varietate de surse ce trebuie coordonate i organizate chiar de ctre utilizator.

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.

Cerinele sistemului i posibilitile aplicaiei


Pentru a folosi Microsoft Access 2003 avei nevoie de un Personal Computer cu Intel Pentium 233-megahertz (MHz) sau un procesor mai rapid (Pentium III fiind recomandat) Memoria trebuie s fie de 128 MB de RAM sau mai mare. Hard disk-ul: 180 MB de spatiu liber pe disc; fiierele de instalare optionale(recommendat) necesit 200 MB aditionali de spaiu liber pe disc. Este necesar de asemenea i o unitate CD-ROM sau DVD. Monitorul trebuie s fie Super VGA (800 600) sau un monitor cu o rezoluie mai mare.

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.

Copierea, redenumirea i tergerea tabelelor


Copierea unei tabele Aceast aciune se poate realiza n fereastra Database dup apsarea Tab-ului Tables. Se selecteaz tabela ce se dorete a fi copiat i se execut click-dreapta. Din meniul afiat de Microsoft Access se apas Copiaz (Copy). Dup ce se apas acest buton, n aceeai fereastr Database, Tab-ul Tables se apas click-dreapta i apoi Paste. La apsarea acestui buton, Paste, se deschide fereastra n care sunt cerute urmtoarele informaii: Table Name: Numele tabelei n care se va face copierea, poate fi o tabel nou sau una deja existent Paste Options: Modalitatea de copiere: Structure Only - Numai ca structur. Structure and Data - Structur i informaii reprezint selecia implicit. Append Data to Existing Table -Adugarea informaiilor din tabela copiat la cea / cele deja existente. Dup ce informaiile cerute n fereastr au fost completate se apas butonul Ok, sau pentru renunare butonul Cancel. Redenumirea unei tabele Pentru redenumirea unei tabele se procedeaz n felul urmator: se selecteaz o tabel din Tab-ul Tables i se execut click-dreapta. Din meniu se apas Rename (Redenumete). La apsarea butonului Rename pentru tabela biblioteca s-a pus la dispoziie posibilitatea de modificare a numelui. Stergerea unei tabele In fereastra Database, n Tab-ul Tables se selecteaz o tabel i se execut click-dreapta. Din meniul afiat se apas butonul Sterge (Delete). La apsarea acestui buton se va deschide fereastra urmtoare pentru a se ntreba dac sigur aceasta este aciunea ce se dorea executat. In aceast fereastr prin apsarea butonului corespunztor, pot fi selectate urmtoarele opiuni: Yes se efectueaz tergerea, No se renun la aceasta aciune, iar prin Help se d posibilitatea consultrii sistemului de Help. Schimbul de date Importul Exportul Legarea Importul Importul este o operaie de aducere de informaii ntr-un format diferit - n baza de date curent. Butonul prin care se demareaz aceast procedur este situat n meniul File al Microsoft Access, opiunea Get External Data, butonul Import (Import). Microsoft Access poate importa tabele de informaii din baze de date create n alte versiuni (mai vechi) de Microsoft Access, ca i informaii din alte programe sau alte formate de fiier, cum ar fi Microsoft Excel, dBASE, Microsoft FoxPro sau Paradox. Se pot de asemenea importa tabele i liste HTML.

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.

LECIA 3. Operatori i Funcii


n acest lecie se prezint utilizarea operatorii i a funciilor. Expresiile reprezint o parte fundamental din operaiile efectuate n Microsoft Access. Expresie este o combinaie de simboluri, identificatori, operatori i valori ce pot produce un rezultat. Exist cteva exemple de operaii n care se utilizeaz expresii: Setarea unei proprieti ce definete un control calculat, stabilete o regul de validare, sau seteaz valoarea implicit a unui cmp. Introducerea unei expresii a criteriului de selecie, crearea unui cmp calculat, sau actualizarea unor nregistrri ntr-o interogare. Specificarea argumentelor unor aciuni. Specificarea argumentelor multor funcii i metode n codul de Visual Basic. Editarea unei interogri SQL n cadrul ferestrei de interogare. Se vor prezenta succint : Operatorii aritmetici, Operatorii de comparare, Operatorii logici, Concatenri, Funcii Operatorii aritmetici

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.

LECIA 4. Stabilirea relaiilor intre tabele


Se vor prezenta noiunile de:. Tipuri de relaii (relaia 1:1, relaia 1:n ) Integritate referenial Proprietile de legare O baz de date relaional conine mai multe tabele ce pot fi legate prin relaii de tip 1:1,1:m, m:m . Microsoft Access permite crearea unor astfel de relaii logice sub forma unor legri ntre tabele. Legrile se pot face la nivelul interogrilor pentru a extrage datele ntr-o anumit form i corect din punct de vedere logic. Astfel, pentru extragerea preurilor practicate de un anumit furnizor pentru produsele lui sunt necesare urmatoarele informaii: numele furnizorului din tabela Furnizori numele produselor din tabela NomenclatorProduse preturile produselor din tabela PreturiIntrare. O alt variant const n relaionarea tabelelor: n acest caz se definesc legturi implicite caz n care adugarea lor ntr-o interogare se face mpreun cu relaiile dintre ele. In acest caz, nu se pot extrage informaii printr-o interogare din mai multe tabele dect dac acestea sunt legate ntre ele. Legarea poate fi fcut prin legturi implicite sau aceasta se poate realiza doar la nivelul interogrii.

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

Interogare de selecie - Tehnici de baza


Pentru o interogare de selecie se trateaz tehnicile: Selectarea i ascunderea cmpurilor, Sortare, Filtrare, Realizarea cmpurilor calculte. Selectarea de cmpuri Intr-o interogare se adaug numai acele cmpuri a cror informaie trebuie vizualizat, supus unor criterii, grupat, actualizat sau sortat. Paii pentru adugarea de cmpuri ntr-o interogare sunt urmtorii : se deschide o interogare n Design View tabela sau interogarea in care trebuie s se adauge cmpurile dorite ar trebui s apar n partea de sus a ferestrei Design View: dac nu atunci este necesar adugarea acestor obiecte. Adugarea de obiecte Dac a fost creat o nou interogare, care nu are nici o tabel introdus, atunci va apare fereastra Show Table (Arat Tabela) prin intermediul creia sunt puse la dispoziia utilizatorului obiectele pentru crearea unei interogri: Tabele i/sau Interogri. Dac interogarea este creat deja i se dorete adugarea de tabele, atunci se apas butonul Show Table. La apsarea acestui buton se deschide fereastra Show Table. Din fereastra Show Table se pot selecta tabele i/sau interogri prin selectarea unuia sau mai multor obiecte i apoi se apas butonului Add (Adaug), i apoi Close. Dac se dorete renunarea la aceast aciune atunci se apas oricnd butonul Cancel. Observaii: 1. Se poate aduga o tabel ntr-o interogare i prin tragerea acestora din fereastra Show Table n partea de sus a ferestrei Design View. 2. Dac exist mai multe obiecte n fereastra Design View atunci este necesar o operaie de join.

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.

Interogri de tip funcie


Se vor prezenta aa cum s-a precizat mai sus Interogri de tip funcie Interogri grupate Interogri de sumar Utiliznd linia Totals din Design View, se poate calcula suma, media, numrarea, minimul, maximul, variana sau deviaia standard pentru unul sau mai multe cmpuri dintr-o tabel, fie pentru toate nregistrrile, fie pe unul sau mai multe grupuri de nregistrri. Prin intermediul liniei Criteria pot fi afectate rezultatele calculrii. Observaie: Se poate folosi Simple Query Wizard pentru a calcula suma, media, numrarea, minimul sau maximul valorilor dintr-un cmp, dar dac se dorete adugarea unui criteriu de selecie atunci trebuie folosit tabelul de design al unei interogri. Crearea unei interogri de tip funcie Pentru realizarea unei astfel de interogri sunt necesari a fi parcuri urmtorii pai: 1. se creeaz o interogare de selecie (Select Query). Se adaug tabelele care se vor folosi n calcule i apoi sa adaug cmpurile asupra crora se vor efectua calculele i se specific criteriile de selecie. 2. Se apas Totals n Toolbar. Microsoft Access va afia linia Totals n tabelul de design. 3. Pentru fiecare cmp din tabelul de design se execut click n celula Totals i se alege una dintre funciile urmtoare : Sum, Avg, Min, Max sau Count. 4. dac se dorete, se pot introduce criterii de selecie cu efect asupra rezultatelor sau se poate efectua o sortare. 5. Se apas View sau Run pentru vizualizarea rezultatelor. Observaii:

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.

Elemente de control pentru forme i rapoarte


Toat informaia din cadrul unei forme sau unui raport este coninut n elemente de control. Elementele de control (Controls) sunt obiecte (n cadrul unei forme / raport) ce afieaz informaiile, execut aciuni, sau formalizeaz forma/raportul. Microsoft Access include urmtoarele tipuri de element de control : Cmpul de tip text,Cmpul de tip etichet, Grupul de opiuni, Butonul de selectare a unei opiuni, Cmpul de tip opiune (check-box-ul), Linia, Dreptunghiul. Elementele de control sunt accesibile n Toolbox-ul din Design View n form sau raport. Dac fereastra Toolbox nu se deschide atunci cnd se intr n Design View pentru o form/raport atunci aceast fereastr poate deveni disponibil prin apsarea butonului Toolbox din Toolbar. Cmpul Etichet Cmpurile Etichet (Labels) se folosesc pe o form sau raport pentru a afia un text descriptiv (i.e. titluri, capturi sau scurte instruciuni). Cmpurile Etichet nu afieaz valori din cmpuri sau expresii; ele sunt ntotdeauna nelegate i nu i schimb valoarea pe msur ce se realizeaz deplasarea de la o nregistrare la alta. In alt ordine de idei, un astfel de cmp poate fi ataat unui alt element de control. Atunci cnd se creeaz un cmp de tip text, de exemplu, are ataat un cmp etichet care afieaz o captur pentru acel cmp de tip text.

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).

Editarea proprietilor elementelor de control


Fiece tip de element de control are un set de proprieti implicite care determin modalitatea general de afiare i comportamentul elementului de control. Astfel, proprietile unui cmp de tip text determin dimensiunea i fontul acestui cmp i dac acest cmp (de tip text) are ataat o etichet. Acest set de proprieti pentru un element de control se numete Stilul implicit al elementului de control (default control style). Dac se observ c se realizeaz de mai multe ori aceleai modificri ale stilului implicit dup ce acesta este adugat pe o form sau raport, atunci acest stil implicit poate fi modificat. Din momentul n care acest stil implicit este modificat, toate elementele de control create dup aceea vor noul stil implicit, care va rmne neschimbat pn la urmtoarea schimbare. Pentru schimbarea proprietilor mai multor elemente de control la un moment dat sunt necesari urmtorii pai: 1. Se deschide forma/raportul n Design View. 2. Se asigur c un element de control este selectat, apoi se execut un click pe Properties n Toolbar. 3. Se selecteaz celelalte elemente de control prin meninerea apsat a tastei Shift pe msur ce se execut click pe fiecare element de control. 4. Apoi n tabelul de proprieti se modific proprietile respective. Observaii: 1. Se pot schimba n acest fel proprietile mai multor elemente de control de acelai tip sau de tipuri diferite. Dac se selecteaz elemente de control de tipuri diferite, Microsoft Access afieaz doar acele proprieti comune tipurilor respective. Dac exista proprieti comune ele vor fi afiate altfel tabelul de proprieti va fi gol. Dac se schimb setarea unei proprieti comune atunci aceast modificare este aplicat tuturor elementelor de control din selecie. 2. Proprietatea Nume (Name) nu apare de exemplu niciodat atunci cnd este selectat mai mult de un element de control, deoarece numele elementelor de control trebuie s fie unice.

Coninutul elementelor de control


Din punctul de vedere al coninutului, elementele de control pot fi legate, nelegate sau calculate. 1. Un element de control legat (Bound Control) Este n legtur cu un cmp dintr-o tabel sau interogare. Este folosit pentru a afia, introduce i actualiza valorile din cmpurile din baza de date. 2. Un element de control calculat (Calculated Control) Are drept sursa sa de informaie o expresie Expresia poate folosi informaie dintr-un cmp dintr-o tabel/interogare sau dintr-un alt element de control de pe form sau raport. 3. Un element de control nelegat (Unbound Control) Nu are nici un fel de surs de informaie Este folosit pentru a afia informaii, linii, dreptunghiuri i imagini.

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.

TEMA III. LIMBAJUL SQL


n aceast tema: se prezint conceptele limbajului SQL n 6 lecii, dup cum urmeaz: LECIA 1. Concepte SQL LECIA 2. Limbajul de definire a datelor - DDL LECIA 3. Limbajul de interogare a datelor - DQL LECIA 4. Combinarea datelor din mai multe tabele - Uniuni (Join) LECIA 5. Limbajul de manipulare a datelor - DML LECIA 6. SQL cu ACCSESS

LECIA 1. Concepte SQL


n acest lecie se vor prezenta conceptele de baz ale limbajul SQL. SQL a devenit limbajul universal pentru bazele de date relaionale i este acceptat de aproape toate sistemele SGBD moderne. Fr ndoial, acceptarea pe scar larg este rezultatul timpului i eforturilor depuse pentru dezvoltarea caracteristicilor limbajului i a standardelor, crescnd nivelul de portabilitate a codului SQL ntre diferitele produse RDBMS. Vei avea mai multe succes n nvarea limbajului SQL dac folosii n mod activ SQL i o baz de date relaional pentru a ncerca exemplele prezentate sau dac veti ncerca variante proprii ale exemplelor. Ce este SQL? SQL (Structured Query Language -limbaj structurat de interogare) este un limbaj standard folosit pentru crearea, actualizarea i regsirea informaiilor stocate n baze de date prin intermediul sistemelor de gestionare a bazelor de date ( SGBD-uri). Numele limbajului poate fi pronunat pe litere (es-q-el) sau la fel ca i cuvntul englezesc sequel". O interogare (query) este o simpl cerere transmis ctre baza de date, la care aceasta rspunde ntr-o anumit form. SQL este limbajul folosit cel mai frecvent pentru interogarea bazelor de date. SQL este considerat un limbaj neprocedural sau declarativ, ceea ce nseamn c-i spunei calculatorului ce rezultate vrei, far s-i spunei cum s le obin. De exemplu, dac vrei s obinei media numerelor de pe o coloan, folosii funcia AVG. Nu este nevoie s numrai valorile din coloan i s mprii suma acestora la numrul obinut - procesorul limbajului SQL din SGBDse ocup de toate aceste lucruri n locul dumneavoastr. Este important s nelegi c SQL nu este un limbaj procedural, ca C, Pascal, Basic, FORTRAN, COBOL sau Ada. Un limbaj procedural folosete o serie de instruciuni executate secvenial. De asemenea, limbajele procedurale includ instruciuni care pot modifica secvena de execuie, prin ramificarea la alte poriuni ale procedurii sau prin parcurgerea ciclic a unui set de instruciuni din procedur. Muli productori de sisteme SGBDofer extensii procedurale ale limbajului SQL de baz, cum ar fi Oracle PL/SQL (Procedural Language/SQL) sau Microsoft TransactSQL, dar reinei c acestea sunt extensii SQL care formeaz noi limbaje - codul SQL pe care-1 conin rmne neprocedural. De asemenea, SQL nu trebuie confundat cu limbajele orientate spre obiecte, precum Java i C++. Simplu spus, SQL este un limbaj neprocedural pentru gestionarea i ntreinerea bazelor de date relaionale, nu un limbaj potrivit pentru programarea general a aplicaiilor, cum ar fi sistemele de prelucrare a comenzilor sau a plilor.

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.

Conectarea la baza de date


Atunci cnd folosii limbajul SQL pe un calculator personal, cu o copie personal a unui sistem SGBD, precum Microsoft Access sau Oracle Personal Edition, toate componentele bazei de date ruleaz pe acelai sistem de calcul. Totui, acest aranjament nu este potrivit pentru bazele de date care trebuie s fie folosite n comun de mai muli utilizatori. Ca urmare, sunt mult mai frecvent ntlnite situaiile n care baza de date este instalat ntr-un aranjament client/server. ntr-un aranjament client/server: Sistemul ruleaz pe un server, care este un sistem de calcul partajat. Pentru scopurile acestei definiii, un sistem mainframe poate fi considerat un server de dimensiuni mari. Fiierele care compun baza de date din punct de vedere fizic sunt stocate pe discuri conectate la serverul de baze de date. Utilizatorii care au acces la baza de date folosesc staii de lucru, numite clieni. Clientul trebuie s aib o conexiune de reea la baza de date, care poate fi o reea privat, instalat acas sau la birou, ori o reea public, precum Internet. Componentele software furnizate de productorul SGBD ruleaz pe staiile de lucru alte clienilor pentru a oferi utilizatorilor posibihtatea s introduc instruciuni SQL, s le transmit sistemului SGBD n vederea prelucrrii i sa vad rezultatele returnate de DBMS. n general, acest software se numete cbent SQL. Reinei c nimic nu v oprete s instalai clientul SQL pe acelai calculator cu sistemul DBMS. De fapt, muli dezvoltatori care utilizeaz sisteme SGBD precum MySQL, Microsoft SQL Server i Oracle fac n mod obinuit acest lucru, deoarece este foarte convenabil s aib ntregul mediu de dezvoltare pe un singur calculator, cum ar fi un laptop. Totui, n momentul n care este necesar accesul partajat al mai multor utilizatori, este mult mai convenabil i mai eficient s avei o singur copie a sistemului SGBD pe un server partajat i s avei numai clientul SQL instalat pe staia de lucru a fiecrui client.

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.

Un scurt istoric al limbajului SQL


Ctre sfritul anilor '70, un grup de cercettori de la IBM au dezvoltat o baz de date relaional, numit System/R, bazat pe lucrrile Dr. E. F. Codd. n System/R a fost inclus un limbaj, numit SEQUEL (Structured English Query Language), pentru manipularea i extragerea datelor. Acronimul SEQUEL" a fost ulterior condensat n abrevierea SQL", atunci cnd s-a descoperit c SEQUEL" era marc nregistrat a companiei Hawker-Siddeley Aircraft din Marea Britanie. Dei IBM a creat prima implementare SQL, dou alte produse, cu nume diferite pentru limbajele de interogare, au fost lansate pe pia ca primele produse pentru baze de date relaionale, Oracle, furnizat de Relational Software, i INGRES, furnizat de Relational Technology. IBM a lansat n 1982 produsul SQL/DS, cu limbajul de interogare numit acum SQL (Structured Query Language). Dac programarea structurat era expresia la mod n anii '80, cuvntul structured" din SQL nu avea nici o legtur cu programarea structurat, deoarece SQL nu este un limbaj de programare procedural. Comitetele de standardizare a limbajului SQL au fost formate de ANSI (American National Standards Institute) n 1986 i ISO (International Organization for Standardization) n 1987. Din fericire, comitetele create de cele dou organizaii au colaborat pentru dezvoltarea unui standard SQL comun, la nivel mondial. Doi ani

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.

Convenii de sintax SQL


Aceast seciune prezint conveniile generale de sintax folosite pentru construia instruciunilor SQL. Totui, reinei c exist o mulime de extensii i variaii ntre diferiii productori. Pentru simplitate, termenul implementare este folosit pentru referirea fiecrei versiuni SQL a fiecrui productor (cu alte cuvinte, Oracle 9i, Oracle 10g, Microsoft SQL Server 7, Microsoft SQL Server 2000 i Microsoft SQL Server 2005 conin implementri diferite ale limbajului SQL). Conveniile de sintax SQL sunt mai uor de neles folosind un exemplu simplu Instruciunea de mai jos returneaz valorile Movie ID i Movie Title pentru toate filmele din magazinul de produse video pentru care categoria MPAA este PG": SELECT FILM_ID, TITLU_FILM FROM FILM WHERE MPAA_RATING_COD = 'PG'; Conveniile de baz sunt urmtoarele: Fiecare instruciune ncepe cu o comand, de obicei sub forma unui singur cuvnt, care aproape ntotdeauna este un verb (n limba englez) care descrie o aciune. n acest exemplu, instruciunea ncepe cu comanda SELECT, care este descris n detaliu n lecia 3. Fiecare instruciune se termin cu un delimitator, care este, de obicei, un caracter punct i virgul (;). Unele implementri permit schimbarea delimitatorului cu

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. */

Categorii de instruciuni SQL


Instruciunile SQL sunt mprite n categorii, dup funciile pe care le ndeplinesc. Unii experi consider aceste categorii ca fiind limbaje separate sau sublimbaje. Totui, n SQL acestea au aceeai sintax de baz i respect aceleai reguli, aa c eu le consider categorii de instruciuni din acelai limbaj. Categoriile de instruciuni, descrise n seciunile urmtoare, sunt: Limbajul de definire a datelor (DDL - Data Definition Language) Limbajul de interogare a datelor (DQL - Data Query Language) Limbajul de manipulare a datelor (DML - Data Manipulation Language) Limbajul pentru controlul datelor (DCL - Data Control Language) Comenzile pentru controlul tranzaciilor (Transaction Control Commands)

Limbajul de definire a datelor (DDL)


Limbajul de definire a datelor (DDL - Data Definition Language) include instruciuni SQL care permit utilizatorului bazei de date s creeze i s modifice structura obiectelor bazei de date, cum ar fi tabele, vizualizri i indexuri. Instruciunile SQL care folosesc comenzile CREATE, ALTER i DROP sunt considerate parte a DDL. Este important s nelegei c instruciunile DDL afecteaz containerele care stocheaz datele n baza de date, nu datele propriu-zise. Ca urmare, exist instruciuni DDL pentru crearea, tergerea i modificarea tabelelor, dar nici una dintre aceste instruciuni nu ofer posibilitatea de a crea sau modifica rnduri de date din tabelele respective. Instruciunile DDL sunt prezentate n capitolul 3.

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.

Comenzile pentru controlul tranzaciilor


O tranzacie n baza de date este un set de comenzi pe care utilizatorul bazei de date vrea sa le trateze ca pe o unitate funcionala de tip totul sau nimic, ntelegnd prin aceasta c intreaga tranzactie trebuie sa reuseasca sau sa esueze. Comenzile pentru cotrolul tranzaciilor (Transaction Control Commands ) nu respect cu exactitate sintaxa instruciunilor SQL , dar afecteaza puternic comportamentul instructiuunilor SQL incluse n tranzacii.

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.

LECIA 2. Limbajul de definire a datelor - DDL


Se vor prezenta n continuare instruciunile SQL folosite pentru definirea i gestionarea obiectelor dintr-o baz de date relaional. Instruciunile CREATE, ALTER i DROP formeaz o categorie a limbajului SQL numit limbaj de definire a datelor (DDL Data Definition Language). Se prezint DDL naintea DQL, DML deoarece trebuiesc create obiectele bazei de date nainte de a insera date n baza de date.

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)

Tipuri de date numerice


Acestea sunt utile mai ales pentru atributele folosite n calcule. Toate tipurile numerice au o precizie (un numr de cifre). De asemenea unele tipuri numerice au i o scal (numrul de cifre aflate n dreapta punctului zecimal). Tipurile ntregi i tipurile numerice care include o scal sunt numite numerice exacte, n timp ce numerele reale care nu include o scal (numerele cu virgul mobil) sunt numite numerice aproximative. Tipurile numerice standard sunt: Numeric - Un tip numeric exact care include o precizie i o scal. Sintaxa SQL este: NUMERIC (precizie, scal) Exemplu: PLATA_PE_ORA_ANGAJAT NUMERIC(5,2) Zecima1 - Un tip numeric exact care include o precizie i o scal. Sintaxa SQL este:

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

Tipuri de date pentru obiecte mari


Obiectele mari permit stocarea unor date care depesc cu mult posibilitile de stocare ale tipurilor de date prezentate pn acum, ajungnd deseori la dimensiuni de civa megaoctei. Deoarece manipularea obiectelor mari este un subiect avansat, care nu vace obiectul cursului, se vor prezenta aceste tipuri fr sintaxa lor. Obiect mare pentru caractere - Un obiect mare pentru caractere, scris n SQL sub foma CLOB. Obiect mare pentru caractere, n format naional - Un obiect mare pentru caractere, stocat ntr-o anumit limb, scris n SQL sub forma NLOB. Obiect mare binar - Un obiect mare care conine date binare, cum ar fi o imagine sau o secven sonor, scris n SQL sub forma BLOB. Un alt tip de date Exist un tip standard de date care nu este ncadrat n nici una dintre categoriile prezentate anterior: Boolean - Stocheaz o valoare logic adevrat sau fals. Sintaxa SQL este: BOOLEAN Exemplu: CLIENT_PREFERAT BOOLEAN Extensii pentru tipuri de date i diferene fa de standard Microsoft Access Microsoft Access este baza de date care respect n cea mai mic msur standardul, din toate sistemelm SGBD frecvent folosite.

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.

Instruciuni DDL (Data Definition Language)


Instruciunile DDL (Data Definition Language) definesc obiectele bazei de date, dar nu insereaz i nu actualizeaz date n obiectele respective. n SQL, exist trei comenzi de baz pentru instruciunile DDL: CREATE - Creeaz n baza de date un nou obiect, de tipul specificat n instruciune : CREATE DATABASE, CREATE TABLE, CREATE INDEX i CREATE VIEW. ALTER - Modific definiia unui obiect existent n baza de date, de tipul specificat n instruciune : ALTER TABLE, ALTER DATABASE, ALTER SYSTEM, ALTER USER, ALTER SESSION. D R O P - terge (distruge) un obiect existent n baza de date, de tipul specificat n instruciune.

Instruciunea CREATE DATABASE


Definirea unei baze de date difer destul de mult de la o implementare la alta. Sintaxa general pentru instruciunea CREATE DATABASE este: CREATE DATABASE nume bazadedate [opiuni_specifice _productorul] n Oracle, instruciunea CREATE USERcreazn baza de date o schem, cere este aproximativ echivalent cu o baz de date. Standardul SQL prevede i o instruciune CREATE SCHEMA, care permite crearea unor grupuri de obiecte din baza de date, pentru simplificarea administrrii.

Instruciunea CREATE TABLE


CREATE TABLE este una din instruciunile fundamentale din SQL. Modelul relaional cere ca toate datele stocate s fie ancorate ntr-un tabel, aa c posibilitatea de a stoca orice ntr-o baz de date ncepe ntotdeauna cu crearea unui tabel. Sintaxa de baz pentru instruciunea CREATE TABLE este: CREATE TABLE nume_tabel (<definiie_coloan> [,<definiie_coloan> ...]) [,<restricietabel>... ]; Definirea coloanelor n SQL DDL Sintaxa de baz folosit pentru definirea coloanelor unui tabel este: <definiie_coloan> nume coloan tip_de_date [DEFAULT expresie] [NULL | NOT NULL] [<restricie_coloan>] De exemplu, instruciune DDL pentru crearea tabelului CONT_CLIENT, din baza de date a magazinului de produse video. CREATE TABLE CONT_CLIENT (

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.

Instruciunea CREATE VIEW


O vizualizare este o interogare SQL stocat, care poate fi referit de instruciuni1e SQL DML i DQL ca i cum ar fi un tabel real. Unii consider c vizualizrile sunt tabele virtuale", deoarece se comport la fel ca tabelele, dar nu exist ca tabele fizice. Sintaxa general a instuciunii CREATE VIEW este: CREATE [OR REPLACE] VIEW nume_vizualizare AS interogare sql; Cuvntul cheie opional OR REPLACE elimin necesitatea de a sterge o vizualizare existent nainte de a o crea din nou. Numele vizualizrii trebuie s respecte aceleai reguli de denumire ca i tabelele i alte obiecte ale bazei de date. Interogarea SQL inclus n definiia vizualizrii poate fi orice instruciunea SQL SELECT valid.

Instruciunea ALTER TABLE


Instruciunea ALTER TABLE ajut s se fac asupra tabelelor create. Utilizarea instruciunii ALTER TABLE este un alt domeniu n care au un rol important stilul i preferinele personale. Muli administratori de baze de date prefer s foloseasc instrucuni CREATE TABLE ct mai simple, evitnd s defineasc restricii n instruciunile CREATE TABLE. Acetia adaug dup instruciunea CREATE TABLE instruciuni ALTER TABLE prin care specific toate restriciile necesare (cheie primar, cheie extern, unicitate, verificare). Dezavantajul acestei metode este acela c necesit scrierea unei cantiti mai mari de cod. Pe de alt parte, instruciunea CREATE TABLE este mult mai uor de neles fr restricii, iar scrierea separat a restriciilor simplific refolosirea instruciunilor. Dei exist unele diferene ntre implementrile SGBD, o list cu tipurile de modificri acceptate de instruciunea ALTER TABLE, mpreun cu sintaxa general pentru fiecare tip este: Adugarea unei coloane la un tabel. Definirea coloanei se face cu aceeai sintax ca i n cazul instruciunii CREATE TABLE. ALTER TABLE nume_tabel ADD ( <definiie_co1oan> [,<definiie_co1oan> Exemplu: ALTER TABLE CONT_CLIENT ADD (DATA _CLIENT DATE NULL, INTRODUSE_DE VARCHAR(50));

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.

Lecia 3. Limbajul de interogare a datelor(DQL)


Limbajul SQL de interogare a datelor (DQL Data Query Language) include o singur comand SELECT, care este cea mai folosit pentru a obine date din baza de date, astfel nct acestea s fie prelucrate de o anumit aplicaie sau s fie afiate. Rezultatul unei instruciuni SELECT, numit i set de rezultate, este returnat sub forma unui tabel. Deoarece SQL este un limbaj neprocedural, se specific rezultatele pe care le dorii s le obinei, nu i modul lor de obinere.

Instruciunea SELECT de baz


Forma elementar a instruciunii SELECT conine dou clauze: SELECT [DISTINCT] - Specific lista de coloane care urmeaz s fie returnate n setul de rezultate, separate prin virgule. Se poate folosi simbolul asterisc (*) n locul listei de coloane pentru a selecta toate coloanele dintr-un tabel sau dintr-o vizualizare. Cuvntul cheie DISTINCT poate fi adugat dup cuvntul cheie SELECT pentru a elimina rndurile duplicate din rezultatele interogrii. FROM - Specific lista tabelelor sau vizualizrilor din care urmeaz s fie selectate datele. n locul numelor reale ale tabelelor sau vizualizrilor se poate folosi sinonime, adic pseudonime pentru tabele sau vizualizri definite n baza de date. n exemplul urmtor se selecteaz coloanele: C OD_ GEN_ FILM , M P AA_ RATING_COD i TITLU_FILM din tabelul FILM. SELECT COD_GEN_FILM, COD_ RATING, TITLU_FILM FROM FILM; Pseudonime pentru numele coloanelor In setul de rezultate din interogri numele coloanelor din tabel apare automat ca titlu de coloane n interogare. Dac se dorete un alt nume pentru coloanele unei interogri se folosesc pseudonime. Pseudonimele (aliases) specificate devin numele coloanelor din setul de rezultate. Pseudonimele nu exist dect dup rularea instruciunii SQL, aa c nu pot fi folosite n alte pri ale instruciunii SQL. Pseudonimul unei coloane este specificat prin plasarea cuvntului cheie AS" dup numele coloanei n lista SELECT (cu cel puin un spaiu nainte i dup), urmat de numele dorit pentru a fi atribuit coloanei n setul de rezultate. SELECT COD_GEN_FILM AS GEN, M P AA_ RATING_COD AS RATING, TITLU_FILM FROM FILM; Sortarea rezultatelor Rezultatele interogrilor sunt deseori mult mai utile dac se specific pentru rndurile returnate o ordine care s aib o semnificaie pentru persoana sau aplicaia care folosete informaiile. n SQL, acest lucru este fcut prin adugarea n instruciunea SELECT a clauzei ORDER BY, cu o list de una sau mai multe coloane care vor fi folosite pentru sortarea rndurilor n ordine ascendent sau descendent, n conformitate cu valorile datelor din coloane. De asemenea, se ine seama de urmtoarele aspecte:

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.

Utilizarea clauzei WHERE pentru filtrarea rezultatelor


SQL folosete clauza WHERE pentru a filtra rndurile ce urmeaz s fie afiate. O interogare fr o clauz WHERE returneaz un set de rezultate care conine toate rndurile din tabelele sau vizualizrile referite n clauza FROM. Dac este inclus o clauz WHERE, sunt folosite regulile algebrei booleene, evalund clauza WHERE pentru fiecare rnd de date. n rezultatele interogrii sunt afiate numai rndurile pentru care clauza WHERE este evaluat la valoarea logic adevrat".

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.

Funcii pentru caractere


Funciile pentru caractere sunt numite astfel deoarece manipuleaz date de tip text. Concatenarea irurilor de caractere Funcia de concatenare a irurilor de caractere reunete mai multe iruri de caractere pentru a forma o singur valoare n rezultatele interogrii. Funcia standard de concatenare a irurilor de caractere din SQL este apelat cu dou bare verticale (||), dar exist i excepii, cum ar fi Microsoft SQL Server, care folosete semnul plus (+) pentru concatenarea irurilor de caractere. Exemple de concatenare a irurilor de caractere: Magazinul de produse video vrea s trimit fiecrui client o scrisoare care ncepe cu formula "Client", plus prenumele i numele persoanei. Numele sunt stocate n tabelul PERSON. Soluia acestei cerinte n Oracle: SELECT 'Client' || NUME_PERSOANA|| ' ' || NUME_FAMILIE_PERSOANA AS SALUT_CLIENT FROM PERSOANA; Aceeai soluie, modificat pentru a funciona n Microsoft SQL Server : SELECT Client' + NUME_PERSOANA + ' ' + NUME_FAMILIE_PERSOANA AS SALUT_CLIENT FROM PERSOANA; UPPER Funcia UPPER transform literele dintr-un ir de caractere n litere mari. Numerele i caracterele speciale sunt lsate ca stare. Exemple: S se afieze comediile (COD_GEN_FILM = 'Comdy') scriind titlurile cu majuscule. SELECT UPPER(TITLU_FILM) AS TITLU_FILM FROM FILM WHERE COD_GEN_FILM = 'Comdy'; Funcia UPPER este deseori folosit n condiiile WHERE. S presupunem c nu v amintii dac valorile COD_GEN_FILM au fost stocate cu litere mari, litere mici sau combinaii ale acestora. Dac n condiia WHERE transformai valorile n litere mari, putei obine rezultatele corecte indiferent de modul de stocare. SELECT UPPER(TITLU_FILM) AS TITLU_FILM FROM FILM WHERE UPPER(COD_GEN_FILM) = 'COMDY';

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';

Alte funcii matematice


Tabelul care urmeaz prezint funciile matematice cel mai des ntlnite. Pentru toate, sintaxa general este aceeai: NUME_FUNCTIE (expresie) Funcie ABS COS EXP POWER Descriere Valoarea absolut a unui numr dat Cosinusul trigonometric al unui unghi specificat n radiani Valoarea exponenial a unui numr dat Ridic un numr la o putere (numrul i puterea sunt fumizate ca parametri)

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).

Lecia 4. Combinarea datelor din mai multe tabele


S-au prezentat pn acum instruciuni SQL care selecteaz date dintr-un singur tabel. Deseori, este util s se combine date din tabele multiple ntr-o singur interogare . De exemplu, n listingul celor trei coloane ale tabelului FILM din figura urmtoare, observai valorile afiate pentru coloan FILM_GEN_COD. Atunci cnd s-a proiectat baza de date pentru magazinul de produse video, s-au folosit coduri n locul descrierilor complete pentru genurile filmelor n tabelul FILM. Din discuia despre procesul de normalizare, s-a evitat anomalia de actualizare dac se schimb descrierea unui gen, nu este nevoie s actualizm acea descriere pentru toate filmele asociate genului respectiv n tabelul FILM. n timpul normalizrii, descrierea genurilor a fost mutat n tabelul, FILM_GEN, iar coloan FILM_GEN_COD a devenit cheie extern n tabelul FILM, referind coloan cheie primar (cu acelai nume) din tabelul FILM_GEN. S-a optat pentru folosirea unui cod mnemonic pentru codurile genurilor, deoarece astfel permit celor familiarizai cu datele respective s neleag genul asociat filmelor fr s le caute n tabelul FILM_GEN. FILM_COD 1 2 3 4 5 FILM_GEN_COD Drama ActAd Comedie ActAd ActAd FILM_TITLU Mystic River The Last Samurai Something's Gotta Grve The Italian Kill Bill: Voi. 1

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).

Uniuni de egalitate (equijoin)


Avem o uniune de egalitale (equijoin), numit i uniune intern (inner join), atunci cnd legm una sau mai multe coloane dintr-un tabel (de obicei, o cheie extern) cu coloane similare dintr-un alt tabel (de obicei, cheia primar), folosind condiia de egalitale, aceasta fiind cea mai des folosit form de uniune. Totusi, termenul uniune de egalitate (equijoin) este rareori folosit n afara mediilor academice, find preferate denurmirile uniune intern (inner join) sau uniune standard (standard join ). Exist dou modaliti de specificare a coloanelor corespondente: folosind clauza WHERE sau folosind clauza JOIN. Clauza JOIN a fost adaugat relativ recent n standardul SQL, aa c programatorii mai vechi sunt obisnuii cu metoda bazat pe clauza WHERE.

Realizarea uniunilor folosind clauza WHERE


Folosirea clauzei WHERE pentru unirea tabelelor seamn cu folosirea acesteia pentru eliminrea rndurilor de care nu avei nevoie din setul de rezultate. Totui, exist unele diferene. n clauza WHERE : Se compar o coloan cu o alt co1oan, nu o coloan cu o constant sau o expresie. Atunci cnd coloanele din cele dou tabele au acelai nume (o soluie recomandat) trebuie s specificati numele complet al coloanelor (adic numele cu calificator), astfel nct motorul SQL s tie care dintre cele dou coloane este referit. Motorul SQL cere s se refere toate coloanele specificate ntr-o instruciune SQL. Aceasta nu nseamn numai coloanele din clauza WHERE, ci din orice alt loc al instrucunii, inclusiv n lista SELECT. Cea mai simpl form de calificator este chiar numele tabelului, separat cu caracterul punct de numele coloanei. n continuare este prezentat un exemplu de uniune realizat prin clauza WHERE, cu numele coloanelor specificate complet, folosind numele tabelelor. Observai c interogarea selecteaz coloanele FILM_ID i FILM_TITLU din tabelul FILM i genul corespunztor (FILM_GEN_DESCRIERE) din tabelul FILM_GEN. SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM, FILM_GEN WHERE FILM.FILM_GEN_COD= FILM_GEN.FILM_GEN_COD ORDER BY FILM_ID; FILM_ID 1 2 3 4 5 6 7 8 FILM_GEN Drama Actiune i Aventura Comedie Actiune i Aventura Actiune i Aventura Actiune i Aventura Drama Actiune i Aventura FILM_TITLU Mystic River The Last Samurai Something's Gotta Give The Italian Job Kill Bill Vol. 1 Pirates of the Caribbean Big Fish Man on Fire

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;

Realizarea uniunilor folosind clauza JOIN


Clauza JOIN este scris ca o referin de tabel din clauza FROM i combin lista de tabele din clauza FROM i condiia de legtur scris anterior n clauza WHERE ntr-o singur clauz. Sintaxa general a clauzei JOIN pentru o uniune intern, urmat de cteva exemple.

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

02/27/2005 03/04/2005 02/27/2005 02/19/2005 03/04/2005 03/04/2005

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

Aciune si Aventura R Comedie PG-13

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;

Uniuni externe (outer joins)


Toate uniunile pe care le-am descris pn acum sunt uniuni exclusiv(uniuni interne), ceea ce nseamn c singurele rnduri care apar n setul de rezultate sunt cele pentru care a fost gsit o legtur n toate tabelele unite. Exist situaii n care vrei s includei n rezultatele interogrii i rnduri pentru care nu exist o legtur. De exemplu, dac se dorete o list cu toate genurile de filme, mpreun cu toate titlurile asociate cu fiecare gen? O uniune extern (outer join) - pentru care un nume mai potrivit ar fi uniune inclusiv - include n setul de rezultate i rndurile pentru care nu exist legturi din cel puin unul dintre tabele. Atunci cnd exist rnduri fr legturi, datele selectate din tabelul n care nu a fost gsit o legtur primesc valoarea nul. Exist trei tipuri de baz: Uniune extern ctre stnga (left outer join) . Returneaz toate rndurile din tabelul din stnga (cel specificat primul n clauza JOIN), mpreun cu toate rndurile din tabelul din dreapta pentru care poate fi gsit o legtur. (asemnatoare interogrilor din tabele aflate in relaia 1:m) Uniune extern ctre dreapta (right outer join). Returneaz toate rndurile din tabelul din dreapta (cel specificat al doilea n clauza JOIN), mpreun cu toate rndurile din tabelul din stnga pentru care poate fi gsit o legtur, n esen, o uniune extern ctre stnga poale fi rescris ca o uniune extern ctre dreapta inversnd ordinea de specificare a tabelelor i nlocuind cuvntul cheie LEFT cu RIGHT.

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. ..]) }

Exemple de uniuni externe:


S se afieze toate descrierile genurilor de filme, mpreun cu filmele asociate fiecrui gen. n setul de rezultate rndurile care nu au nici o valoare n coloan FILM_TITLU - acestea sunt genurile de filme care nu au filme asociate. Dac implementarea DBMS nu accept uniuni realizate cu cuvntul cheie USING, modificai instruciunea astfel nct s utilizeze cuvntul cheie ON, ca n exemplul care urmeaz dup acesta. SELECT FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM_GEN LEFT OUTER JOIN FILM (FILM_GEN_COD); GEN Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Actiune i Aventura Anime and Animation Copii i Familie Clasic Comedie Comedie Comedie Comedie Documentar Drama Drama Drama Drama Drama Drama Strain FILM_TITLU Kill Bill: Vol. 1 Man on Fire Pirates of the Caribbean Master and Commander The Day After Tomorrow The Last Samurai The Italian Job

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

Horror Independent Musical Romantic Romantic

13 Going on 30 Two Weeks Notice

Interogarea anterioar, rescris ca uniune extern ctre dreapta, cu condiie ON.

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;

Auto-uniuni (seif joins)


O auto-uniune (selfjoin) este o uniune a unui tabel cu el nsui. Exist relaii n care cheia primar i cheia extern se afl n acelai tabel. Acestea se numesc relaii recursive. n baza de date a magazinului de produse video exist o relaie recursiv n tabelul angajai. Tabelul ANGAJAT are o coloan numit SUPERVISOR_PERSOANA_ID, care este o cheie extern ctre coloan PERSOANA_ID din acelai tabel. Este folosit pentru a lega fiecare angajat de eful direct, care, desigur, este un alt angajat, ceea ce nseamn c i eful respectiv are o coloan n tabelul ANGAJAT. Interogarea urmtoare afieaz trei coloane din tabelul ANGAJAT, inclusiv PERSOANA_ID i SUPERVISOR_PERSOANA_ID: SELECT PERSOANA_ID, ANGAJAT_PLATA_ORE AS PLATA_ORE, SUPERVISOR_PERSOANA_ID PROM ANGAJAT;

PERSOANA_ID 1 2 10

PLATA_ORE 15 9.75 9.75

SUPERVISOR_PERSOANA_ID 1 1

Aceste date arat c angajaii 2 i l0 sunt subordonai angajatului 1, iar angajatul 1 nu e subordonat nimanui. .

Uniuni ncruciate (cross joins)


O uniune ncruciat (cross join) nu este altceva dect sintaxa standard pentru un produs cartezian. Interogarea care care unea tabelele FILM i FILM_GEN i obinea un produs cartezian poate fi rescris ca mai jos, folosind o uniune ncruciat: SELECT FILM_ID, FILM_GEN_DESCRIERE AS GEN, FILM_TITLU FROM FILM CROSS JOIN FILM_GEN ORDER BY FILM_ID;

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

Japoneza Coreana Olandeza Rusa Chineza

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.

Scriei instruciunile SQL pentru urmtoarele probleme:


1. 2. 3. 4. 5. 6. Afiai numele i identificatorul de client ale tuturor persoanelor decedate (valoarea DATA_MORTII nu este nul) care nc au conturi de client. Afiai numele angajatilor care au conturi de clieni. Folosii uniuni pentru a stabili ce clieni sunt angajai i ce angajai au conturi de clieni. Rescriei interogarea anterioar pentru a folosi subinterogri n loc de uniuni. Afiai numele de familie al fiecarui angajat, mpreun cu numele de familie al efu1ui lor. Afiai numrul de nchirieri pentru fiecare format (DVD i VHS). Afiai numrul de identificare (FILM_ID) i data la care trebuie returnate (DATA_RETURNARII) pentru toate filmele nchiriate i nc nereturnate (coloan RETURNAT_DATA din tabelul FILM_INCH conine valori

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.

Scrierea interogrilor avansate


n aceast parte se prezint cteva subiecte avansate, i anume: Funcii SQL avansate, inclusiv funcii pentru caractere, matematice i pentru dat sau or O descriere a modului n care puteti beneficia de avantajele vizualizrilor Informaii despre expresia SQL CASE i despre utilizarea acesteia pentru construirea instruciunilor care includ poriuni executate numai n anumite condiii predefinite. Seciunile urmtoare descriu funcii care nu au fost prezentate dar foarte utile. Pe lng funciile pentru caractere i matematice, sunt incluse cteva funcii pentru date i ore. Reinei c toate funciile SQL au o trstur comun, n sensul c returneaz o singur valoare, aa c sunt utile n diferite locuri din instruciunile SQL, inclusiv n lista de coloane a comenzii SELECT i n clauza WHERE. V reamintim c exist un numr mare de funcii specifice fiecrei implementri, furnizate de diferii productori SGBD. Funcii pentru caractere Funciile pentru caractere opereaz asupra datelor de tip text. Aceast seciune prezint cteva funcii frecvent folosite, pe lng cele discutate n lecia 3. REPLACE Funcia REPLACE caut un ir de caractere i nlocuiete caracterele gsite cu caracterele din irul de nlocuire. Sintaxa general a funciei: REPLACE (ir_de_caractere, ir_cutat, ir_de_nlocuire} ir_de_caractere reprezint irul de caractere n care se face cutare i, n cele mai multe cazuri, este numele unei coloane dintr-un tabel, dar poate fi orice expresie care are ca rezultat un ir de caractere. ir_cautat este un ir format dintr-un caracter sau mai multe, care trebuie cutate n sir_de_caractere. ir_de_intocuire este irul de caractere cu care se nlocuiete orice apariie a irului_cautat n ir_de_caractere.

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

-1 negativ 0 zero 1 pozitiv Null nul

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.

Funcie DATEADD DATEDIFF DATENAME

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

DATEPART DAY GETDATE

parte_de_data, data_si_ora data_si_ora Nu are Nu are

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

Data, cuvant cheie pentru data_si_ora

Folosirea avantajelor oferite de vizualizari


Amintim c o vizualizare (view) este o interogare stocat n baza de date, care pune la dispoziia utilizatorului bazei de date un subset particularizat de date din unul sau mai multe tabele ale bazei de date. Microsoft Access folosete termenul query (interogare) n loc de vizualizare. Frumuseea vizualizrilor const n faptul c, dup ce sunt create, pot fi interogate ca i cum ar fi tabele reale. De fapt, nu este nevoie ca utilizatorul s tie dac folosete o vizualizare sau un tabel real. Pot exista unele restricii la manipularea datelor (la inserare, actualizare i tergere) dar interogrile funcioneaz pentru vizualizri la fel ca i pentru tabele. Vizualizrile ofer i alte avantaje: Mascheaz coloanele pe care utilizatorul nu este nevoie sau nu trebuie s le vad Mascheaz rndurile pe care utilizatorul nu este nevoie sau nu trebuie s le vad Mascheaz operatiile complexe, precum uniunile Cresc performanele interogrilor Exemplele din aceast seciune prezint vizualizri care v ofer avantajele menionate mai sus. V amintii din Lecia 2, c sintaxa general pentru crearea unei vizualizri este :

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) .

Lecia 5. Limbajul de manipulare a datelor DML


n aceast lecie se prezint instruciunile DML (Data Manipulation Language), o parte a limbajului SQL folosit pentru intreinerea datelor stocate n tabele relaionale ale bazei de date. Limbajul DML este format din trei comenzi SQL: INSERT UPDATE DELETE Adaug noi rnduri ntr-un table al bazei de date. Actualizeaza rndurile existente ntr-un table al bazei de date. Sterge rnduri dintr-un tabel al bazei de date

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 tip cheie primar


Atunci cnd inserai un nou rnd ntr-un tabel, cheia primar a noului rnd trebuie sa fie unic n ntregul tabel.Cand modificati valoarea unei chei primare (ceea ce se intampla rareori), noua valoare trebuie s fie unic n ntregul tabel.

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 NOT NULL


O valoare nula (null) este o modalitate special prin care sistemul SGBD trateaz valoarea unei coloane pentru a indica faptul ca valoarea coloanei respective nu este cunoscut. O valoare nula nu este acelasi lucru un un spatiu liber, un sir vid sau valoarea zero este o valoare speciala care nu este egala cu nimic altceva. n cazul instruciunilor INSERT, trebuie specificate valori pentru toate coloanele cu restricii NOT NULL. n cazul instruciunilor UPDATE nu se pot inlocui valorile unei coloane cu valori nule dac pe coloana respectiv este definit p restricie NOT NULL. Dac instruciunea DML refer o vizualizare , nu se poate sa o folosim intr-o instruciune INSERT dac una dintre coloanele tabelului cu o restricie NOT NULL(obligatorii) lipsete din definirea vizualizrii.

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.

Inserarea unui singur rand de dete folosind clauza Values


Instruciunea INSERT care folosete o clauz VALUES poate crea un singur rnd la fiecare rulare, deoarece valorile pentru rndul de date respective sunt specificate chiar n instruciune. Iata sintaxa general a instruciunii: INSERT INTO nume_tabel_sau_vizualizare [(lista_de_coloane)] VALUES (lista_de_valori); Se poate remarca urmtoarele: Lista de coloane este opional, dar dac este inclus trebuie sa fie incadrat n paranteze. Dac lista de coloane este omis, trebuie specificat o valoare pentru fiecare coloan din tabel, n ordinea n care sunt definite coloanele n tabel. Este bine ca ntotdeauna s includei lista de coloane, deoarece opiterea acesteia face ca instruciunea INSERT s fie dependent de definiia tabelului. Dac o coloan este modificat sau n tabel este adugat o nou coloan, chiar i opional, probabil instruciunea INSERT va eua la urmtoarea rulare. Dac lista de coloane este specificat, lista de valori trebuie s conin o valoare pentru fiecare coloan din list, n aceeai ordine. Cu alte cuvinte, ntre lista de coloane i lista de valori trbuie s existe o corespondena unu-la-unu. Orice coloana care lipsete din list va primi o valoare nul, presupunund c valorile nule sunt acceptate n coloana respectiv. Cuvntul cheie NULL poate fi folosit n lista de valori pentru specificarea unei valori nule pentru o coloan. n Microsoft SQL Server i Sybase Adaptive Server nu putei insera valori ntro coloan care a fost definit proprietatea IDENTITY. Proprietatea IDENTITY este o metod frecven folosit pentru a atribui valori secveniale unei chei primare, cum ar fi coloana FILM_ID din tabelul FILM. Dac pentru o coloan a fost definit proprietatea IDENTITY, putei s omitei coloana respectiv din instruciunea INSERT, iar sistemul SGBD va atribui cheii primare urmtoarea valoare unic disponibil. O alt soluie este s dezactivai restricia, folosind urmtoarea instruciune: SET identity_insert nume_tabel ON

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);

Inserri masive folosind instruciunea SELECT intern


Aa cum se observ, este nevoie de foarte mult cod pentru a insera n tabel un singur rnd de date folosind o instruciune INSERT cu clauza VALUES. O alt soluie, care poate fi folosit pentru a insera rnduri multiple ntr-un tabel , este forma care folosete o instruciune SELECT intern. Aceast form este util i pentru stabilirea urmtoarei valori disponibile pentru o cheie primar cu valori secveniale. De asemenea , poate fi folosit atunci cnd creai un tabel temporar pentru testare i vrei s-l populai cu toate datele dintr-un alt tabel. Sintaxa general a instruciunii este INSERT INTO nume_tabel_sau_vizualizare [(lista_de_coloane)] SELECT instructiune_select; Se remarc urmtoarele: Lista de coloane este opional, dar dac este inclus trebuie s fie ncadrat n paranteze. Dac lista de coloane este omis, instruciune SELECT intern trebuie s furnizeze o valoare pentru fiecare coloan din tabel, n ordinea n care sunt definite coloanele n tabel. Este bine ca ntotdeauna s includei lista de coloane, deoarece opiterea acesteia face ca instruciunea INSERT s fie dependent de definiia tabelului. Dac o coloan este modificat sau n tabel este adugat o nou coloan, chiar i opional, probabil instruciunea INSERT va eua la urmtoarea rulare. Dac lista de coloane este specificat, instruciune SELECT intern s furnizeze o valoare pentru fiecare coloan din lista de valori, n aceeai ordine. Cu alte cuvinte, ntre lista de coloane i setul de rezultate al instruciunii SELECT trebuie s existe o corespondena unu-la-unu. Orice coloan care

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.

LECIA 6. SQL cu ACCESS


Access este un instrument util de nvare a limbajului SQL. n aceast lecie vom nva cum s trecem de la ANSI/ISO SQL la implementarea SQL din Access. Pn acum am prezentat limbajul neprocedural SQL implementat conform standardelor ANSI/ISO i s-a amintit legtura limbajului SQL cu sisteme de baze de date relaionale ca: Microsoft SQL Server, MySQL, Oracle, Oracle i Access. De asemenea, s-a punctat modul n care Access traduce n instruciuni SQL interogrile proiectate. nsuirea limbajului SQL ne ajut s nelegem procesul interogrii i s proiectm, s creem interogri QBE Access(Query By Exemples), subinterogri i interogri UNION mai eficiente. Access SQL este conceput pentru crearea de interogri, nu pentru crearea sau modificarea tabelelor. De acceea, n Access SQL nu apar multr din cele aproximativ 100 de cuvinte cheieincluse n standardele ANSI/ISO pentru SQL. Cele mai multe cuvinte cheie SQL care lipsesc din Access sunt nlocuite cu operatorii, cu funciile Access, sau cu funcii definite de utilizatori. Dac dorim s folosim cuvintele cheie SQL pentru a crea i modifica tabele vom scrie instruciunile SQL n fereasra query view SQL. Comenzile SQL am artat ca pot fi grupate , aa cum s-a artat n lecia 1 , n: Limbajul de definire a datelor (DDL - Data Definition Language) Limbajul de interogare a datelor (DQL - Data Query Language) Limbajul de manipulare a datelor (DML - Data Manipulation Language) Limbajul pentru controlul datelor (DCL - Data Control Language) Limbajul pentru procesarea tranzaciilor (TPL - Transaction Processing Language) Au vost prezentate n leciile precedente primele trei categorii, urmnd ca la cursul din semestrul II, Baze de date Oracle s ncepem cu prezentarea ultimelor dou categorii. Vocabularul limbajului SQl, am precizat c este format din: Comenzi, cum sunt SELECT, CREATE, etc., sunt verbe cAre determin executarea unei aciuni. Calificative, cum sunt WHERE, limiteaz domeniul valorilor entitilor incluse ntr-o interogare. Clauze, cum sunt ORDER BY, modific aciunea unei instruciuni. Operatori, cum sunt =, <, >, etc., compar valori i sunt i sunt utilizai la crearea asocierilor cnd nu este utilizat sintaxa JOIN. Funcii globale de grup, cum sunt Alte cuvinte cheie care pot modifoca aciunea unei clauze sau manipuleaz cursoarele la selectare anumitor rnduri sau interogari Convenie. La scrierea cuvintelor cheie s-au folosit majuscule (dar acesta nu nseamn c nu se pot folosi i litere mici.

Cuvinte rezervate SQL n Accsess

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

Crearea tabelelor cu Access DDL


Se poate crea noi tabele n baza de date curent cu ajutorul cuvintelor rezervate Data Definition Language. Utilizarea limbajului SQL la crearea noilor tabele prezint un interes deosebit pentru cei care dezvolt aplicaii Access, deoarece este mult mai uoar crearea noilor tabele cu interfaa de utilizator Access. Pentru ca informaiile s fie complete, iat o scurt prezentare a instruciunilor SQL DDL din Access: CREATE TABLE table-name ( field_name date_type [field_size][.field_name data_type... ]) creeaz o nou tabel, cu cmpurile specificate de o list separat prin virgule. Proprietile cmpurilor sunt separate de spaii;

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.

Scrierea interogrilor de selecie n SQL


Cnd se creaz o interogare de selecie n modul de proiectare a interogrii, Access traduce proiectul interogrii QBE ntr-o instruciune Access SQL. Se poate vedea aceast instruciune Access SQL executnd click pe butonul SQL de pe bara cu instrumente. Inima limbajului SQL este instruciunea SELECT, utilizat la crearea unei interogri de selecie. Instruciunea SQL SELECT prezentat mai jos returneaz o tabel de interogare (care se numete set de rezultate i este de obicei un obiect Recordset de tip Dynaset) cu toate coloanele (cmpurile) sau numai cu cele selectate din toate rndurile (nregistrrile) sau dintre cele specificate ale unei tabele surs: SELECT [ALL | DISTINCT | DISTINCTROW] select_list FROM table_names [WHERE search_criteria] [ORDER BY column_criteria [ASC | DESC]] Urmtoarea list prezint rolul fiecrui element din aceast instruciune de interogare de selecie elementar: SELECT este comanda de baz care definete o interogare. Parametrul select_list precizeaz cmpurile (coloanele) care sunt incluse n tabela cu rezultatele interogrii. Cnd se proiecteaz o interogare Access QBE, parametrul select_list este determinat de cmpurile adugate n rndul Fields din grila Query. n select_list sunt incluse numai acele cmpuri care au marcat caseta de validare Show. Cnd apar mai multe nume de cmpuri, acestea sunt desprite de virgule. Calificativele opionale ALL, DISTINCT i DISTINCTROW determin modul de manipulare a rndurilor. ALL specific includerea tuturor rndurilor cu posibilitatea unei limitri ulterioare. DISTINCT elimin rndurile cu date duplicate. FROM table_names specific numele tabelei sau ale tabelelor care formeaz baza interogrii. Parametrul table_names este creat n Access QBE de intrrile efectuate n dialogul Add Table. Dac n select_list sunt incluse cmpuri din mai multe tabele, fiecare tabel trebuie specificat n parametrul table_names.

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.

Utilizarea instruciunilor SQL pentru a crea interogri Access


n modul de proiectare a interogrii se poate introduce instruciuni SQL pentru a crea interogri Access simple, modificrile aduse de acestea proiectului fiind reflectate de grila Query. Dac intrrile conin erori de punctuaie sau cuvinte scrise greit, Access afieaz o caset de mesaj care descrie eroarea i poziia ei aproximativ n cadrul instruciunii. Cnd se alege OK n dialogul SQL, Access traduce instruciunea SQL ntr-un proiect de interogare QBE. Pentru a crea o interogare de selecie Access QBE cu o instruciune SQL, se execut paii urmtori: 1. Se deschide baza de date i se deschide apoi o nou interogare. 2. Se nchide dialogul Show Table fr s se adauge un nume de tabel. 3. Se alege View, SQL pentru a deschide fereastra SQL. 4. Se terge orice text care apare n fereastra SQL, cum ar fi SELECT DISTINCTROW;.

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.

Utilizarea funciilor globale SQL


Dac se utilizeaz funciile globale pentru a obine totaluri, medii sau valori statistice pentru grupuri de nregistrri care au atribute cu aceeai valoare, trebuie s se adauge clauza GROUP BY n instruciunea SQL, se poate limita rezultatul clauzei GROUP BY cu calificativul opional HAVING: SELECT [ALL | DISTINCT | DISTINCTROW] aggregate_function (f ield_name) AS alias [, select_list] FROM table_names [WHERE search_criteria] GROUP BY group_criteria [HAVING aggregate_criteria] [ORDER BY column_criteria] Parametrul select_list include aggregate_function, care are argumentul field_nane. Cmpul utilizat ca argument al unei funcii globale trebuie s fie de tip numeric. Lista urmtoare prezint celelalte cuvinte cheie SQL i parametrii necesari pentru a crea o interogare GROUP BY: AS alias - atribuie un titlu coloanei. Titlul este creat ntr-o interogare Access QBE de intrarea alias:aggregate_function(field_name) n rndul Field din grila Query. ID GROUP BY group_criteria - precizeaz coloana pe care se bazeaz gruparea. n aceast coloan, GROUP BY apare n rndul Totals din grila Query. HAVING aggregate_criteriare - prezint unul sau mai multe criterii aplicate coloanei care conine parametrul aggregate_function. Criteriul specificat de parametrul aggregate_criteria din HAVING este aplicat dup realizarea

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.

Crearea asocierilor cu SQL


Pentru asocierea a dou sau mai multe tabele cu Access QBE, se utilizeaz structura JOIN_ON, care specific tabela care va fi asociat i relaia dintre cmpurile pe care se bazeaz JOIN : SELECT [ALL|DISTINCT|DISTINCTROW] select_list FROM table_names {INNER|LEFT|RIGHT} table_name JOIN join_table ON join_criteria [{INNER|LEFT|RIGHT} table_name JOIN join_table ON join_criteria] [WHERE search_criteria] [ORDER BY column_criteria] Lista urmtoare prezint elementele instruciunii JOIN n Access: table_name JOIN join_table specific numele tabelei care este asociat cu celelalte tabele din lista table_names. Fiecare dintre tabelele care particip la o asociere trebuie s fie inclus n lista table_names i nainte i dup JOIN.

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. .

Utilizarea interogrilor UNION


Interogrile UNION ne permit combinarea ntr-un set de rezultate a dou sau mai multe seturi de rezultate produse de interogri SELECT. Northwind.mdb (baza de lucru a Access) conine un exemplu de interogare UNION, care n fereastra Database are un simbol special, reprezentat de dou cercuri ntretiate. Interogrile UNION pot fi create doar cu instruciuni SQL; dac adugai cuvntul cheie UNION ntr-o interogare, butonul pentru modul de proiectare a interogrii de pe bara cu instrumente i opiunea Query Design din meniul View sunt dezactivate. Sintaxa general a interogrii UNION este urmtoarea: SELECT select_statement UNION SELECT select_statement [GROUP BY group_criteria] [HAVING aggregate_criteria] [UNION SELECT select_statement [GROUP BY group_criteria] [HAVING aggregate_criteria]] [UNION] [SORT BY sort_criteria] Restriciile impuse instruciunilor care creeaz interogri UNION sunt urmtoarele: Numrul de cmpuri n parametrul field_list din fiecare interogare SELECT i UNION SELECT trebuie s fie acelai. Dac nu apare acelai numr, vi se afieaz un mesaj de eroare. Secvena de nume de cmpuri din fiecare parametru field_list trebuie s corespund unor intrri identice. Nu apare un mesaj de eroare dac intrrile sunt diferite, dar probabil c setul de rezultate va fi de neneles. Nu este necesar ca tipurile de date pentru cmp s fie aceleai ntr-o singur coloan, dar dac n setul de rezultate coloana conine att tipul de date Text, ct i numerice, tipul de date al coloanei este stabilit la Text. Este permis doar o clauz SORT BY i aceasta trebuie s apar dup ultima instruciune UNION SELECT. Dac este necesar, putei aduga clauze GROUP BY i HAVING fiecrei instruciuni SELECT i UNION SELECT. Utiliznd baza de date Northwind.mdb prezentm, o instruciuneUNION . Se observ capacitatea interogrilor UNION de a include valori din 2 cmpuri cu tipuri de date diferite, de exemplu Customer ID (TEXT) Suppliers ID(Long Integer), ntr-o singur coloan, denumit simplu ID. SELECT CompanyName, City, PostalCode, Region, SupplierID AS ID FROM Suppliers Where County=Brazil

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.

Sintaxa de specificare a interogrii de aciune


Interogrile de aciune i cele ncruciate au fost discutate pe larg n Partea aI+a Access. Crearea acestor interogri este de preferin s se fac cu ajutorul caracteristicii Access QBE (Query By Exemples). Dup ce Access a creat astfel de interogri ele pot fi vizualizate din View SQL. Comenzile DML (Data Manipulation Language) sunt implementate prin interogrile de aciune din ACCESS: de adugare , de tergere, de creare a unei tabele i de actualizare. Cuvintele rezervate Access SQL care creaz interogri ncruciate, TRANSFORM i PIVOT, sunt discutate n aceast seciune deoarece interogrile ncruciate sunt nrudite cu interogrile DML. Aceast seciune prezint sintaxa pentru fiecare tip de interogare de aciune din Access.

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

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