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

lucreaza_in

SARCINA

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

1(0)

lucreaza_in

11

DEPARTAMENT
cod_departament
nume
nr_cladire
cod_salariat

M
SARCINA
nr_proiect
nr_sarcina
data_inceperii
stare

Diagrama Entitate/relaie
Cazuri speciale de entiti, relaii, atribute i modul lor de reprezentare n
cadrul diagramei entitate-relaie.
1. Entitate dependent nu poate exista n mod independent (SARCINA

depinde de PROIECT). Cheia primar a unei entiti dependente include cheia


primar a sursei (nr_proiect) i cel puin o descriere a entitii (nr_sarcina).
Entitatea dependent se deseneaz prin dreptunghiuri cu linii mai subiri.
2. Motenirea atributelor. Subentitate (subclas) submulime a unei alte

entiti, numit superentitate (superclas) (SALARIAT < >


PROGRAMATOR). Subentitatea se deseneaz prin dreptunghiuri incluse n
superentitate. Exist o relaie ntre o subentitate i o superentitate, numit
ISA, care are cardinalitatea maxim 1:1 i minim 1:0. Cheile primare,
atributele i relaiile unei superentiti sunt valabile pentru orice subentitate.
Afirmaia reciproc este fals.
3. ntr-o diagram E/R se pot defini relaii recursive.
4. Relaie sau atribut? Dac un atribut al unei entiti reprezint cheia primar a

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)

codel#
titlu
autor
pret
nrex

M(0)
imprumuta

M(0)

1
apartine

codec#
nume
dep

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#

EXAMINATOR
cod_examinator#

MASINA
cod_masina#

3. Campionatele de fotbal ale diferitelor ri


ECHIPA
Cod_echipa#
Nume
Oras

M(1)

sustine M(1)

SPONSOR
M(1)
Cod_sponsor#
Nume

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#

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.

Caracteristicile unui model relaional:

structura relaional a datelor;

operatorii modelului relaional;

regulile de integritate care guverneaz folosirea cheilor n model.

Aceste trei elemente corespund celor trei componente ale ingineriei software:
informaie, proces, integritate.
Structura datelor
Definirea noiunilor de domeniu, relaie, schem relaional, valoare null i
tabel vizualizare (view).
Conceptele utilizate pentru a descrie formal, uzual sau fizic elementele de baz
ale organizrii datelor sunt date n urmtorul tabel:
Formal
relaie
tuplu
atribut
domeniu

Uzual
tablou
linie
coloan
tip de dat

Fizic
fiier
nregistrare
cmp
tip de dat

Reguli de integritate sunt aseriuni pe care datele coninute n baza de date


trebuie s le satisfac.
Exist trei tipuri de constrngeri structurale (de cheie, de referin, de entitate)
ce constituie mulimea minimal de reguli de integritate pe care trebuie s le respecte
un SGBD relaional. Restriciile de integritate minimale sunt definite n raport cu
noiunea de cheie a unei relaii.
O mulime minimal de atribute ale cror valori identific unic un tuplu ntr-o
relaie reprezint o cheie pentru relaia respectiv.

Fiecare relaie are cel puin o cheie. Una dintre cheile candidat va fi
aleas pentru a identifica efectiv tupluri i ea va primi numele de cheie primar. Cheia
primar nu poate fi reactualizat. Atributele care reprezint cheia primar sunt fie
subliniate, fie urmate de semnul #.
O cheie identific linii i este diferit de un index care localizeaz liniile. O
cheie secundar este folosit ca index pentru a accesa tupluri. Un grup de atribute din
cadrul unei relaii care conine o cheie a relaiei poart numele de supercheie.
Fie schemele relaionale R1(P1, S1) i R2(S1, S2), unde P1 este cheie primar
pentru R1, S1 este cheie secundar pentru R1, iar S1 este cheie primar pentru R2. n
acest caz, vom spune c S1 este cheie extern (cheie strin) pentru R1.
Modelul relaional respect trei reguli de integritate structural.
 Regula 1 unicitatea cheii. Cheia primar trebuie s fie unic i
minimal.
 Regula 2 integritatea entitii. Atributele cheii primare trebuie s fie

diferite de valoarea null.


 Regula 3 integritatea referirii. O cheie extern trebuie s fie ori null n

ntregime, ori s corespund unei valori a cheii primare asociate.


Transformarea entitilor
 Entitile independente devin tabele independente. Cheia primar nu

conine chei externe.


 Entitile dependente devin tabele dependente. Cheia primar a

entitilor dependente conine cheia primar a entitii de care depinde


(cheie extern) plus unul sau mai multe atribute adiionale.
 Subentitile devin subtabele. Cheia extern se refer la supertabel, iar

cheia primar este aceast cheie extern (cheia primar a subentitii


PROGRAMATOR este cod_salariat care este o cheie extern).
Transformarea relaiilor
 Relaiile 1:1 i 1:n devin chei externe. Relaia conduce devine coloan n

tabelul DEPARTAMENT, iar relaia lucreaza_in devine coloan n tabelul


SALARIAT. Simbolul indic plasamentul cheii externe, iar simbolul
exprim faptul c aceast cheie extern este coninut n cheia primar.
Relaia 1:1 plaseaz cheia extern n tabelul cu mai puine linii.
 Relaia m:n devine un tabel special, numit tabel asociativ, care are dou

chei externe pentru cele dou tabele asociate. Cheia primar este
compunerea acestor dou chei externe plus eventuale coloane adiionale.
Tabelul se deseneaz punctat.
 Relaiile de tip trei devin tabele asociative. Cheia primar este

compunerea a trei chei externe plus eventuale coloane adiionale.

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

AGENT_TERITORIAL
zona
comision

PROIECT
nr_proiect#
descriere
buget_alocat

PROGRAMATOR
limbaj
nivel

apartine_la

conduce

lucreaza_in

DEPARTAMENT
cod_departament#
nume
nr_cladire
cod_salariat

SARCINA
nr_proiect#
nr_sarcina#
data_inceperii
stare

casatorit

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,

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

cod_sot,

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

1
2
3

Drama
ActAv
Comedie

MPA
A_CO
DRAT
ING
R
R
PG-13

4
5
6

ActAv
ActAv
ActAv

PG-13
R
PG-13

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

FILM_NUME

PRET_INCHIR
_VHS

PRET_INCHIR
_DVD

AN_P
RODU
S

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

19.96
19.96
29.99

2003
2003
2003

11.95
24.99
29.99

19.99
29.99
29.99

2003
2003
2003

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

PG-13

Strain

The
Day
Tomorrow
Das Boot

After

12.98

29.98

2004

17.99

19.94

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

DATA_CUM
PARARE

en, fr

Sub 17 ani
necesita
prezenta
parintilor sau a
unui adult

Mystic River

200
3

Ac
lA
d

en, fr,
es

Sub 17 ani
necesita
prezenta
parintilor sau a
unui adult

The
Last
Samurai

Ac
tA
v

en, fr,
es

Sub 17 ani
necesita
prezenta
parintilor sau a
unui adult

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

PG-13

Parintii
avertizati

en

PG-13

en, fr

PG-13

MEDIA
_FORM
AT

PRETINCHI
RIERE

01/01/2005

DVD

19.96

200
3

01/10/2005

DVD

19.96

The
Last
Samurai

200
3

01/10/2005

VHS

15.95

sunt

Something's
Gotta Give

200
3

01/10/2005

DVD

29.99

Parintii
avertizati

sunt

Something's
Gotta Give

200
3

2/15/2005

DVD

29.99

Parintii
avertizati

sunt

The
Job

200
3

2/15/2005

DVD

19.99

Italian

DAT
A_VA
NZA
RE

1/30/2
005

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

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

DATA_
CUMPA
RARE

Dram
a

Drama

en,
fr

Mystic
River

20
03

en,
fr, es

The Last
Samurai

en,
fr, es

en

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

N
R
_
C
O
PI
E
1

AclA
d

ActA
v

Come
die

Actiune
si
aventur
a
Actiune
si
aventur
a
Comedi
e

Come
die

Comedi
e

en

PG13

Parintii
avertizati

sunt

ActA
v

Actiune
si
aventur
a

en,
fr

PG13

Parintii
avertizati

sunt

DA
TA_
VA
NZ
AR
E

MEDI
A
FORM
AT

PRET
_INC
HIR

01/01/20
05

DVD

19.96

20
03

01/10/20
05

DVD

19.96

The Last
Samurai

20
03

01/10/20
05

VHS

15.95

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

20
03

01/10/20
05

DVD

29.99

20
03

2/15/200
5

DVD

29.99

20
03

2/15/200
5

DVD

19.99

1/30
/200
5

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

Mystic River

AclA
d

Actiune
si
aventura

Sub 17 ani necesita


prezenta parintilor
sau a unui adult

The
Samurai

Last

ActA
v

Actiune
si
aventura

Sub 17 ani necesita


prezenta parintilor
sau a unui adult

The
Samurai

Last

Come
die

Comedie

PG-13

Parintii
avertizati

sunt

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

MEDIA
FORMAT

PRET
_INC
HIR

01/01/
2005

DVD

19.96

01/10/
2005

DVD

19.96

01/10/
2005

VHS

15.95

DVD

29.99

2/15/2
005

DVD

29.99

2/15/2
005

DVD

19.99

01/10/
2005

DAT
A_VA
NZAR
E

1/30/2
005

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

Drama

Drama

ActAv

Actiune si
aventura

Comed
ie

Comedie

PG-13

ActAv

Actiune si
aventura

PG-13

MPAA_DESCRIERE
_RATING

FILM_NUME

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

AN_PRO
DUS

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

NR_ COPIE

DATA_CUMPARARE

1
2
2
3
3
4

1
1
2
1
2
1

01/01/2005
01/10/2005
01/10/2005
01/10/2005
2/15/2005
2/15/2005

DATA_VAN
ZARE

1/30/2005

MEDIA FORMAT

PRET_INCHIR

DVD
DVD
VHS
DVD
DVD
DVD

19.96
19.96
15.95
29.99
29.99
19.99

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

GEN_
COD

MPAA_
COD_R
ATING

FILM_NUME

PRET_
INCHIR VHS

Drama

Mystic River

58.97

ActAv

The
Samurai

Comedi
e

PG-13

Something's
Gotta Give

14.95

The Italian Job

11.95

ActAv

PG-13

PRET_
INCHIR
DVD
19.96

AN_PRODUS
2003

Last

15.95

19.96
2003
29.99
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

19.99
2003

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

MPAA_RATING
MPAA_COD_RATING
MPAA_DESCRIERE_VARSTE

PK

FILM_LIMBA
FILM_ID
COD_LIMBA

PK,FK1
PK,FK2

FILM
FILM_ID
FILM_COD_GEN
MPAA_COD_RATING
FILM_NUME
RETAIL_PRET_VHS
RETAIL_PRET_DVD
AN_PRODUS

FILM_COPII
FILM_ID
NUMAR_COPIE
DATA_CUMPARARE
DATA_VANZARE
FORMAT_MEDIA

PK
FK1
FK2

PK,FK1
PK

FILM_GEN
FILM_COD_GEN
FILM_DESCRIERE_GEN

FILM_INCHIRIERE
FILM_ID
NUMAR_COPIE
TRANZACTIE_ID
DATA_INTOARCERE
COST_INCHIRIERE
COST_INTARZIERE_SAU_PIERDERE
DATA_RETURNARE

PK

PK,FK1
PK,FK1
PK,FK2

LIMBA
COD_LIMBA
NUME_LIMBA

CLIENT_COD_PERSOANA
CLIENT_CONT_ID
PERSOANA_ID

PERSOANA
PERSOANA_ID
PERSOANA_PRENUME
PERSOANA_NUME_MIJLOCIU
PERSOANA_NUME
PERSOANA_ADRESA_1
PERSOANA_ADRESA_2
PERSOANA_ADRESA_ORAS
PERSOANA_ADRESA_JUDET_PROV
PERSOANA_ADRESA_COD_POSTAL
PERSOANA_ADRESA_TARA
PERSOANA_TELEFON
NASTERE_DATA
MOARTE_DATA

PK

PK,FK1
PK,FK2

CLIENT_CONT
CLIENT_CONT_ID
PK
CLIENT_HOLD_IND
DATA_INSCRIS
DATA_TERMINAT
CLIENT_DEPOZIT_SUMA
CARD_CREDIT_LA_DOSAR_INDIC
COPIL_INCHIRIERE_PERMIS_INDIC

PK

CLIENT_TRANZACTIE
TRANZACTIE_ID
CLIENT_CONT_ID
ANGAJAT_PERSOANA_ID
TRANZACTIE_DATA
VANZARI_TAXA

ANGAJAT
PERSOANA_ID
SUPERVISOR_PERSOANA_ID
ANGAJAT_TAXA_ID
ANGAJAT_JOB_CATEGORIE
ANGAJAT_RATA_PE_ORA
ANGAJARE_DATA
INCHIDERE_DATA

PK
FK1

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

NumeSt
Predescu
Radu
Cristescu
Irimia
Tanase

PrenumeSt
Alexandru
George
Lucian
Diana
Daciela

Grupa
114
122
243
361
341

982
1204
1520

Bunea
Dragnea
Popa

Mihaela
Liviu
Marius

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

Nota2
8
7
10

programare

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

NrMatricol
782
982
458

Nota
5
10
7

3
4
4
5
5

521
627
1520
521
1740

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

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

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

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.

Redundan logic. Cuplul (AIRBUS, 250) apare de trei ori.

2.

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.

3.

Anomalie la tergere. Dac este tears nregistrarea pentru care A# este


4, atunci se pierde informaia c un avion CAR are capacitatea 100.

4.

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.

4. Exemplu: variante pentru a implementa FN1 pentru tabelul


MASINA:
Persoana

Vehicul

Eu

R25 - W14 - R21

Tu

205

El

R5 - 305

noi

BX - 305 - R12 - R25

Varianta 1
Persoana
Eu
Eu

Vehicul
R25
W14

Eu
Tu
El
El
Noi
Noi

R21
205
R5
305
BX
305

Noi
Noi

R12
R25

Varianta 2
Persoana

Prima

Doi

Trei

Eu

R25

W14

R21

Tu

205

El

R5

305

Noi

BX

305

R12

Patru

R25

Varianta 3 (4 tabele)
Masina 31 (similar se definesc Masina_32, Masina_33, Masina_34)..
Persoana

Vehicul

Eu

R25

Tu

205

El

R5

Noi

BX

Masina_34
Persoana

Vehicul

Noi

R25

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#

JOB_COD

NR_PROIECT#

FUNCTIA

SUMA

S1

PROGRAMATOR

P1

SUPERVIZOR

60

S1

PROGRAMATOR

P2

CERCETATOR

25

S1

PROGRAMATOR

P3

AUXILIAR

10

S3
S5

VANZATOR
INGINER

P3
P3

SUPERVIZOR
SUPERVIZOR

60
60

ATASAT_2A
COD_SALARIAT#

NR_PROIECT#

FUNCTIA

SUMA

S1

P1

SUPERVIZOR

60

S1

P2

CERCETATOR

25

S1
S3

P3
P3

AUXILIAR
SUPERVIZOR

10
60

S5

P3

SUPERVIZOR

60

ATASAT_2B
COD_SALARIAT#

JOB_COD

S1

PROGRAMATOR

S3
S5

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

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.
 RightDreapta. 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:
 Yestextul este italic/subliniat
 NoValoarea 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.
 SolidSolid. Valoare implicit. O linie solid.
 Dashes Liniue. Linie ntrerupt.
 Short dashesLinue scurte. Linie ntrerupt cu liniue scurte.
 DotsPuncte. Linie punctat.
 Sparse dotsPuncte distanate. Linie punctat cu puncte spaiate mult.
 Dash dotLiniu 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

Client SQL care ruleaz ca

Analyzer

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

disponibil n Oracle 8i i 9i, dar

Worksheet

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

Limbajul de definire a datelor (DDL - Data Definition Language) include


urmtoarele instruciuni:
a. SELECT
b. INSERT
c. CREATE
d. ALTER
e. DELETE
15.

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

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

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

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

a.
b.
c.

[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

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
=
<
<=
>
>=
!=
<>

Descriere
Egal cu
Mai mic dect
Mai mic sau egal
Mai mare dect
Mai mare sau egal
Diferit de
Diferit de (standard ANSI)

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;

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

AS

 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

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:
Funcie
AVG

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;

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

ActAd

7
8

Drama
ActAd

ActAd

10
11
12
13
14
15
16
17
18
19
20

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 < 4 ORDER BY FILM_ID;

FILM_ID

GEN

RATING

RATING_DESC

Drama

Aciune si Aventura R

Comedie

Sub 17 ani acompaniati de


parinti
Sub 17 ani acompaniati de
parinti
Cu acordul strict a
parintilor

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

FILM_TITLU

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

Kill Bill: Vol. 1


Man on Fire
Pirates of the Caribbean
Master and Commander
The Day After Tomorrow
The Last Samurai
The Italian Job

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

USING

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

PLATA_ORE
15

2
10

SUPERVISOR_PERSOANA_ID

9.75
9.75

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)

b.
c.
d.

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

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;

0)

AS

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 ;

0)

AS

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;

0)

AS

TAXA_INTARZIERE_SAU_PIERDERE
29.98
0.00
2 rows n set (0.16 sec)
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

Caracter

9
10
13

Tab
Linie noua
Retur de car

ASCII

(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

-1

Numrul de intrare este


negativ

Numrul de intrare este


zero

Numrul de intrare este


pozitiv

Null

Valoarea de intrare este


nul

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

TAXA_SIGN
1
1
1
1

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

TAXA_SQRT
5.47631263
2
2
5.47539953

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

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

Scop

DATEADD
DATEDIFF
DATENAME

DATEPART
DAY
GETDATE

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

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

parte_de_data, data_si_ora
data_si_ora
Nu are
Nu are

GETUTCDATE

Returneaz valoarea curenta data_si_or UTC (Universal


Coordinated Time)

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

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
ADD_MONTHS

SYSDATE
TO_CHAR

TO_DATE

TRUNC

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

Data, sir_pentru_formatare

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

RATING
PG-13

FILM TITLU
Master and Commander: The Far

Actiune i Aventura
Actiune i Aventura
Actiune i Aventura
Comedie
Comedie
Comedie
Comedie
Drama
Romantic
Romantic

PG-13
PG-13
PG-13
PG-13
PG-13
PG-13
PG-13
PG-13
PG-13
PG-13

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

RETAIL_PRET_
VHS

PRET_CATEGOR
IE

58.97

Scump

2
3
4
5
6
7
8
9
10

15.95
14.95
11.95
24.99
24.99
14.95
50.99
12.98
49.99

Convenabil
Convenabil
Convenabil
Mediu
Mediu
Convenabil
Scump
Convenabil
Scump

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

rnd

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

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