Documente Academic
Documente Profesional
Documente Cultură
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.
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:
Observaii
Entitile devin tabele n modelele relaionale.
n general, entitile se scriu cu litere mari.
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!
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.
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
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
SCOALA
cod_scoala#
CLIENT
cod_client#
INSTRUCTOR
cod_instructor#
EXAMEN
cod_examen#
EXAMINATOR
cod_examinator#
MASINA
cod_masina#
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;
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
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
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
Transformarea atributelor
Un atribut singular devine o coloan.
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#
SALARIAT(cod_salariat#,
forma_plata, nr_depart);
nume,
prenume,
sex,
job_cod,
cod_sot,
TELEFON(cod_salariat#, nr_telefon#).
Regulile lui Codd
posibilitatea filtrrilor;
ocup spaiu,
toate datele din cadrul bazei sunt reprezentate prin valori n tabele;
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
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
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..
Vizualizri
O vizualizare (view) este o interogare stocat n baza de date i pune la
dispoziia utilizatorului un subset personalizat al datelor din unul sau mai multe tabele
ale bazei de date. Cu alte cuvinte, o vizualizare este un tabel virtual, deoarece arat ca
un tabel i n cele mai multe privine se comport c un tabel, dar nu stocheaz date (
nu este stocat dect interogarea SQL care definete vizualizarea).
Vizualizrile au mai multe funcii utile:
Mascheaz radurile pe care utilizatorul nu este nevoie s le vad (sau nu-i
este permis s le vad).
Mascheaz coloanele pe care utilizatorul nu are nevoie s le vad (sau nu-i
este permis s le vad).
Mascheaz operaiile complexe efectuate n baza de date, cum ar fi
uniunile de tabele (respectiv combinarea coloanelor din tabele multiple
ntr-o singur interogare a bazei de date).
mbuntete performanele interogrilor (n unele sisteme RDBMS,
precum Microsoft SQL Server).
Necesitatea normalizrii
Normalizarea este procesul reversibil de transformare a unei relaii, n relaii
de structur mai simpl. Procesul este reversibil n sensul c nici o informaie nu este
pierdut n timpul transformrii. O relaie este ntr-o form normal particular dac
ea satisface o mulime specificat de constrngeri.
Procesul normalizrii se realizeaz plecnd de la o relaie universal ce
conine toate atributele sistemului de modelat, plus o mulime de anomalii. Orice
form normal se obine aplicnd o schem de descompunere. Exist dou tipuri de
descompuneri.
Descompuneri ce conserv dependenele. Aceast descompunere
presupune desfacerea relaiei R n proieciile R1, R2, ..., Rk, astfel nct
dependenele lui R sunt echivalente (au nchideri pseudo-tranzitive
identice) cu reuniunea dependenelor lui R1, R2, ..., Rk.
Descompuneri fr pierderi de informaie. Aceast descompunere
presupune desfacerea relaiei R ntr-o mulime de proiecii R1, R2, ..., Rj,
astfel nct pentru orice realizare a lui R este adevrat relaia:
O descompunere fr pierdere de informaie, utilizat n procesul normalizrii,
este dat de regula Casey-Delobel:
Fie R(A) o schem relaional i fie , , o partiie a lui A. Presupunem c
determin funcional pe . Atunci:
mulimea atributelor care intervin n dependenele funcionale;
reprezint reuniunea determinantului cu restul atributelor lui A.
Tabelul de mai jos prezint tabelul FILM fr normalizare, aa cum ar arta
dac toate informaiile despre filme ar fi colectate ntr-un singur tabel.Acest exemplu
va fi folosit pentru ilustrarea procesului de normalizare. n general, numele coloanelor
din tabelele relaionale folosesc liniue de subliniere pentru separarea cuvintelor. n
discuia despre normalizare am eliminat aceste liniue din figuri, pentru a face textul
mai uor de citit.
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
Anomalia de inserare
Anomalia de inserare se refer la o situaie n care nu putei insera date n baza
de date din cauza unei dependene artificiale dintre coloanele unui tabel.
S presupunem c vreti s adugai n baza de date a magazinului un nou gen
de film care urmeaz a fi folosit pentru clasificarea filmelor.Tabelul de mai sus nu
permite acest lucru dect dac avei un film care s fie plasat n categoria respectivasi
pe care va trebui s-l adugai n tabelul FILM n acelai timp.Ar fi mult mai bine
dac ai putea adauga noile genuri nainte de primirea filmelor n magazin.
Anomalia de tergere
Anomalia de tergere este inversul anomaliei de inserare. Se refer la situaia
n care tergerea unor date duce la pierderea neintenionat a altor date. De exemplu
dac primul film din tabel este singurul rnd din tabelul FILM pentru care coloana
GEN_COD are valoarea Drama , i este ters, se pierde informaia c a existat
vreodat un gen numit Drama
Anomalia de actualizare
Anomalia de actualizare se refer la o situaie n care actualizarea unei singure
valori necesit actualizarea mai multor rnduri. De exemplu , dac n tabelul prezentat
mai sus trebuie s modificai descrierea codului MPAA_COD_RATING R, trebuie
s modificai i toate rndurile din tabel pentru filmele cu codul respectiv. Probleme
similare apar i pentru coloana GEN_DESCRIERERIPTION. Chiar i coloana
PRET_INCHIR are aceast problem, deoarece toate copiile aceluiai film (cu aceeai
valoare FILM_ID ) pe acelai mediu (DVD sau VHS) ar trebui s aib acelai pre.
Un alt pericol legat de aceast anomalie este faptul c stocarea unor date redundante
poate aduce la posibilitatea de actualiza numai o parte a copiilor respectivelor date,
ceea ce ar avea ca rezultat apariia inconsecvenelor n baza de date.
consumator de timp. Trebuie s fii foarte atent ca exemplele de date folosite pentru
luarea deciziilor n procesul de normalizare s fie cu adevrat reprezentative pentru
tipurile de valori care vor aprea n datele reale. Aa cum probabil v ateptai,
exemple prost alese duc deseori la proiectarea eronat a bazei de date.
Scopul procesului de normalizare este eliminarea anomaliilor de inserare,
actualizare si tergere. Procesul determin crearea unui numr mai mare de relaii
dect ai avea ntr-un model fr normalizare. Relaiile suplimentare sunt necesare
pentru eliminarea anomaliilor, dar mprirea datelor n mai multe relaii face ca
extragerea datelor stocate s fie puin mai dificil.
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
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
Mystic River
AclA
d
Actiune
si
aventura
The
Samurai
Last
ActA
v
Actiune
si
aventura
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
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
COD_LIMBA
en
fr
en
fr
es
en
en
fr
figura 1-4 au fost folosite doar pentru ilustrare - este recomandabil s prescurtai
numele numai dac este absolut necesar.)
Identificatorul unic din relaia FILM Language este format prin combinarea
atributelor FILM_ID i Language Code, adic din toate atributele relaiei.
Nici FILM, nici FILM Language din figura 1-5 nu conin grupuri repetitive
sau atribute multivaloare, aa c ambele relaii sunt n prima form normal.
identificatorul unic. Relaia FILM Language era deja n a doua form normal,
deoarece nu are atribute non-cheie i, ca urmare, a rmas nemodificat.
FILM:
FILM
_ID
GEN_
COD
GEN_DESCRIER
E
MPAA_
COD_R
ATING
Drama
Drama
ActAv
Actiune si
aventura
Comed
ie
Comedie
PG-13
ActAv
Actiune si
aventura
PG-13
MPAA_DESCRIERE
_RATING
FILM_NUME
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
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
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
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
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
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
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
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
nume
AIRBUS
AIRBUS
AIRBUS
CAR
B707
B707
capacitate
250
250
250
100
150
150
localitate
PARIS
PARIS
LONDRA
PARIS
LONDRA
LONDRA
Constrngere:
toate avioanele cu acelai nume au aceeai capacitate.
Datorit dependenei introduse pot exista: anomalii la inserare, modificare sau
tergere, redundan n date, probleme de reconexiune.
1.
2.
3.
4.
Vehicul
Eu
Tu
205
El
R5 - 305
noi
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
Functia
Supervizor
Cercetator
Auxiliar
Supervizor
Supervizor
leag
entitile
INVESTITOR
LECIA 2. TABELE
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.
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 :
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)) .
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
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
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.
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.
3. Dac se leag dou tabele din aceeai baz de date Microsoft Access, orice
relaie
ce
fusese
stabilit
ntre
acestea
rmne
valabil.
OPERATORII ARITMETICI (+ - * / )
Operatorul +
Acest operator este folosit pentru efectuarea unei adunri.
Sintax :
Rezultat = expresie1+expresie2
Observaie:
Atunci cnd se folosete acest operator, nu se tie a priori ce operaie se
efectueaz: de adunare sau de concatenare. Din acest punct de vedere sunt respectate
urmtoarele reguli :
Dac ambii operanzi sunt valori numerice atunci operaia efectuata este
adunarea
Dac ambii operanzi sunt iruri de caractere atunci operaia efectuat este
concatenarea
Dac un operand este valoare numeric i celalalt un ir de caractere atunci
apare o eroare de tipul Type Mismatch (Nepotrivire de tip).
Operatorul
Acest operator este folosit pentru a efectua diferena ntre dou valori
numerice sau pentru a indica valoarea negativ a unei expresii numerice.
Sintax 1:
Rezultat = numr1 numr2
Sintax 2:
numr
Observaie:
In sintaxa 1 operatorul este operatorul aritmetic de scdere folosit pentru a
calcula diferena ntre dou numere, iar n sintaxa 2 operatorul este folosit ca un
operator unar de negare pentru a indica valoarea negativ a unei expresii.
Operatorul *
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.
(,)
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.
Legarea tabelelor n cadrul interogrii
Puterea interogrilor const n capabilitatea de a aduce la un loc sau de a
executa o (anumit) aciune asupra informaiilor din mai mult dect o tabel (v.
exemplul de mai sus). Atunci cnd se adaug mai mult de o singur tabel ntr-o
interogare, trebuie ca ntre listele de cmpuri s existe o legtur astfel nct
Microsoft Access s tie cum s conecteze informaia.
Dac tabelele dintr-o interogare nu sunt legate una de alta fie direct (n
interogare), fie indirect (prin legtur implicit), Microsoft Access nu tie care
nregistrri sunt asociate cu care i astfel afieaz toate combinaiile de nregistrri
(produs cartezian) dintre cmpurile celor dou tabele. De aceea, dac fiecare tabel
conine cel puin 20 nregistrri, rezultatul interogrii va conine 400 de nregistrri
(20X20). De asemenea, durata de generare a interogrii va putea fi mai mare i va
putea produce rezultate nesemnificative.
Dac s-au creat nainte relaii ntre tabele n fereastra Relationships, Microsoft
Access va afia n mod automat liniile de legtur pe msur ce tabelele sunt adugate
n fereastra Design View a interogrii.
Dac integritatea referenial este setat, Microsoft Access afieaz 1 de
partea liniei de legtur one i simbolul de partea liniei de legtur
corespunztoare prii many.
Chiar dac nu existau relaii ntre tabele, Microsoft Access creeaz n mod
automat o legtur n momentul adugrii a dou tabele, dac tabelele au fiecare un
cmp cu acelai tip de date sau un tip compatibil i dac unul din cmpuri este cheie
primar. In acest caz simbolurile pentru one i many nu sunt afiate, pentru c
integritatea referenial nu este forat.
In cazul n care Microsoft Access a adugat o legtur incorect din punctul de
vedere al informaiei stocate atunci aceste legturi se terg i se creeaz cele corecte.
Modalitatea de tergere a unei relaii este urmtoarea:
Se selecteaz relaia
Se apas click-dreapta i din meniul aprut se apas butonul Delete.
Aceste relaii sunt create de exemplu prin click pe cmpul ID din Furnizori i
apoi tras acest cmp peste cmpul IDFurnizor din tabela PreturiIntrare.
Cteodat tabelele adugate n interogare nu includ toate cmpurile care pot fi
de legtur ntre tabele. In aceast situaie trebuie adugate une sau mai multe tabele
sau interogri n plus pentru a folosi numai pe post de legtur ntre tabelele necesare
interogrii propriu-zise.
Din momentul n care tabelele i interogrile sunt legate i s-au adugat
cmpurile din ambele tabele/interogri n tabelul de design, legtura implicit foreaz
interogarea s verifice valorile care coincid n cmpurile de legtur. Atunci cnd se
gsesc interogarea combin cele dou nregistrri i le afieaz n conformitate cu
tabelul de design ntr-o singur nregistrare. Dac nu se gasete nici o coniciden a
cmpurilor de legtur atunci interogarea nu va ntoarce nici o nregistrare. Dac se
dorete ca toate nregistrrile dintr-o tabel s fie afiate indiferent dac se gsete
vreo legtur sau nu n cealalt tabel atunci aceasta se poate seta din fereastra de
proprieti a legturii.
LECIA 5. Interogri
n aceast lecie se prezint tehnici pentru a crea i a concepe interogri. . Se
dezvolt noiunile de :
1. Interogarea de selecie
2. Interogri parametrizate
3. Interogri de tip funcie (interogri de sumar, crosstab)
4. Interogri de aciune
O interogare de selecie poate fi creat ntr-una din urmtoarele
modaliti:
Poziionare n fereastra Interogri (Queries) i apsare buton New.
n meniul Microsoft Access, meniul Insert opiunea Query
Din Toolbar-ul din Microsoft Access
Dup ce s-a executat una din aceste modaliti, se va deschide fereastra n care
se va alege varianta de creare a unei interogri. In continuare se va considera
modalitatea Design View: se alege Design View i se apas butonul Ok, iar n cazul n
care se dorete renunarea la aceast aciune se apas butonul Cancel
Rezultatele unei interogri se obtin prin apsarea unuia din butoanele View sau
Run(!) din Toolbar-ul din Microsoft Access
Se selecteaz unul sau mai multe cmpuri din tabela existent sau adugat i
se adaug n tabelul din partea de jos a ferestrei.
Pentru a selecta un singur cmp se execut click pe numele cmpului
respectiv. Pentru a selecta un bloc de cmpuri se execut click pe primul cmp din
bloc, se ine apsat tasta Shift i apoi se execut click pe ultimul cmp din blocul
dorit.
Pentru selecia mai multor cmpuri dar nesituate ntr-un bloc atunci se execut
click pe fiecare dintre ele inndu-se apsat tot timpul tasta Ctrl.
Pentru selecia tuturor cmpurilor se execut dublu-click pe bara de titlu a
tabelei sau se execut un singur click pe asterix (*).
Observaii:
1. Dup ce au fost selectate cmpurile dorite n interogare ele trebuiesc trase
n tabelul din partea de jos a ferestrei.
2. Dac se adaug mai multe cmpuri n tabel, Microsoft Access poziioneaz
fiecare cmp ntr-o coloan. Dac se adaug asterix n tabel atunci Microsoft Access
pune numele tabelei i i adaug un punct i un asterix (d.e. Catalog.*).
3. In locul seleciei i adugrii se poate selecta direct n tabelul din partea de
jos a ferestrei cmpul dorit n interogare din lista pus la dispoziie de Microsoft
Access pe linia Field.
4. Folosirea asterixului ntr-o interogare are fa de selecia manual a tuturor
cmpurilor avantajul c interogarea include automat toate cmpurile din tabela
respectiv chiar i cele adugate dup crearea interogrii i le exclude pe cele terse
dup crearea interogrii. Dac se folosete asterixul nu se pot folosi cmpuri din
aceast tabel la sortare sau pentru criterii specifice dect dac aceste cmpuri sunt
specificate explicit n tabel. Dac se dorete tastarea asterixului fr a-l mai selecta
din tabela din partea de sus a ferestrei atunci trebuie specificat i numele tabelei n
faa acestuia (d.e. Catalog.*).
Ascunderea cmpurilor
In interogare se pot folosi cmpuri doar pentru calcule sau pentru sortri fr
ca fie necesar afiarea acestora n rezultatul interogrii. Cmpurile sunt folosite
pentru rezultatul interogrii, dar ele sunt ascunse.
In tabelul din partea de jos a ferestrei Interogare exist o linie numit Show
(Arat) al crui check box poate fi selectat pentru afiarea cmpului respectiv n
rezultatul interogrii sau poate fi neselectat pentru a nu se afia cmpul (i.e.
ascunderea cmpului).
Observaie:
Atunci cnd se nchide o interogare, Microsoft Access mut toate cmpurile
ascunse n partea cea mai din dreapta a tabelului de design.
Sortarea interogrilor
Inainte de a se efectua o sortare exist cteva considerente ce trebuiesc luate n
considerare:
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.
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 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.
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.
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.
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.
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 :
Listarea raportului
Pentru listarea unui raport, n primul rnd trebuiesc setate marginile, orientarea
i celelalte condiii de structura vizual.
Astfel, paii ce trebuiesc executai sunt urmtorii :
1.
Se selecteaz un raport din fereastra Database, sau se deschide un raport
n Design View, Print Preview sau Layout Preview.
2.
In meniul File se apas butonul Print (Listeaz).
3.
Se intr setrile dorite n fereastra de dialog Print:
se specific o imprimant
se specific numrul paginilor ce trebuie listate
se specific numrul copiilor ce trebuie listate
4.
Apoi se apas butonul Ok.
Domeniul de listare
Pentru domeniul de listare se seteaz dimensiunea paginii, tipul paginrii
(Portrait sau Landscape) i imprimanta.
Marginile raportului se seteaz n aa fel nct datele tiprite s aib loc n
dimensiunile paginii (mai puin dimensiunile marginilor.
Pentru crearea unei etichete ataat unui element de control nu se face altceva
dect crearea elementului de control, iar Microsoft Access ataeaz o etichet acestuia
cu ocazia crerii lui .
O etichet de sine stttoare este o etichet ce nu este ataat nici unui alt
element de control i este creat din Toolbox, i.e. elementul Label. Astfel de etichete
se folosesc pentru informaii de tipul unui titlu al formei sau al raportului, sau pentru
alte texte descriptive.
Pentru crearea unei etichete de sine stttoare se parcurg urmtorii pai:
1. Se deschide forma sau raportul n Design View.
2. Se apas Label n Toolbox.
3. Pe form sau raport, se execut un click acolo unde se dorete poziionarea
etichetei i apoi se introduce textul ce va fi afiat.
Observaii:
1. Dac se dorete afiarea unui text ntr-o etichet pe mai mult de o singur
linie, atunci se poate redimensiona eticheta dup introducerea ntregului text sau se
poate apsa Ctrl+Enter la sfritul primei linii din text pentru a se introduce un CR
(carriage return). Limea maxim a etichetei este determinat de lungimea primei
linii din text.
2. Dac se dorete utilizarea ampersantului (&) n etichet atunci trebuie
introduse dou astfel de simboluri, deoarece Microsoft Access utilizeaz acest simbol
pentru a defini tastele de acces.
Cmpul de tip text
Cmpurile de tip text (Text Box) se folosesc pe o form sau un raport pentru a
afia datele dintr-o tabel sau interogare. Acest tip este numit cmp de tip text legat
deoarece este legat la informaiile dintr-un cmp.
Cmpurile de tip text pot fi i nelegate cum ar fi, cele n care se afieaz
rezultatul unui calcul sau un cmp n care se introduce text de ctre utilizator.
Informaia dintr-un cmp nelegat nu este stocat.
Crearea unui cmp de tip text depinde n primul rnd de tipul de cmp ce se
dorete: legat, nelegat sau calculat.
Crearea unui cmp legat:
1. Se deschide o form sau un raport n Design View.
2. Se apas Field List (Lista de cmpuri) din Toolbar pentru a afia lista
cmpurilor. Dac acest buton nu este valabil, atunci va fi necesar s se lege forma sau
raportul la o surs de nregistrri folosind proprietatea de RecordSource (Sursa de
Inregistrri).
3. Se selecteaz unul sau mai multe cmpuri din lista de cmpuri; n acest
scop se parcurg paii urmtori:
Unui cmp se execut click pe cmp
Unui bloc de cmpuri se execut click pe primul cmp din bloc, se ine
apsat tasta Shift i apoi se execut click pe ultimul cmp din bloc.
Unor cmpuri neadiacente se ine apsat tasta Ctrl i apoi se execut
click pe fiecare cmp dorit pentru selecie.
Toate cmpurile se execut dublu-click.
4. Se trage cmpul (cmpurile) din lista de cmpuri i se poziioneaz pe
form sau raport.
Observaii:
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
Text-dimensiune 20
Date/Time-Short Date
Text-de dimensiune 30
Autonumber
Numeric-Byte
Text-dimensiune 15 caractere
Currency-Euro
Numeric-Byte
Text-dimensiune 20
Text-dimensiune 25
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
Microsoft
SQL Server
Query
Analyzer
MySQL
MySQL
MySQL
Oracle
Oracle
iSQL*Plus
Oracle
SQL*Plus
Oracle
Oracle
SQL
Worksheet
Sybase
Sybase
iSQL
mai trziu, au fost publicate primele specificaii ale standardului, numite SQL-89.
Dup trei ani, specificaiile originale au fost extinse, sub forma standardului SQL-92,
care avea aproximativ 600 de pagini. A treia generaie a fost numit SQL-99 sau
SQL3. Cele mai multe produse SGBDsunt construite pe baza standardului SQL-92
(numit acum SQL2). SQL3 include multe caracteristici obiectuale, necesare pentru
folosirea limbajului SQL cu o baz de date relaional orientat spre obiecte, precum
i extensii de limbaj care fac din SQL un limbaj de programare complet (adugnd
cicluri, ramificri i construcii de comutare, de tip case). Cea mai recent generaie,
numit SQL:2003, introduce caracteristici legate de XML i alte mbuntiri. Aceste
standarde nu sunt gratuite. Standardul SQL:2003 poate fi cumprat de la ISO
(www.iso.org) sau ANSI (webstore.ansi.org). Pentru cei care au un buget mai
restrns, este disponibil o versiune apropiat de cea final la Whitemarsh
Information Systems Corporation (www.wiscorp.com/SQLStandards.html). Aproape
toi furnizorii au adugat extensii la dialectul" SQL propriu, n parte deoarece doreau
s diferenieze produsele proprii i n parte deoarece cerinele pieei i forau s
implementeze caracteristici nainte a aprea standarde pentru acestea.
Un astfel de exemplu este acceptarea tipurilor de date TIMESTAMP i DATE.
Datele calendaristici sunt foarte importante pentru prelucrarea datelor comerciale, dar
dezvoltatorii produselor SGBD originale erau academicieni i oameni de tiin, nu
specialiti n prelucrri comerciale, aa c aceast cerin nu a fost anticipat. Ca
rezultat, primele dialecte SQL nu asigurau un suport special pentru datele
calendaristice. Pe msur ce au aprut produsele comerciale, furnizorii au rspuns
cererilor lansate de clienii importani i au adugat n grab suportul pentru date
calendaristice. Din nefericire, din cauza grabei fiecare a fcut-o n felul propriu. Ori
de cte ori migrai instruciuni SQL de la produsul unui furnizor la altul, inei seama
de diferenele dintre dialecte. Codul SQL este foarte compatibil i portabil ntre
produsele diferiilor furnizori, dar sistemele complete de baze de date pot fi rareori
transferate far anumite ajustri.
un alt caracter. Mai mult, unele implementri, cum ar fi cea din Oracle, nu execut o
instruciune SQL creia-i lipsete delimitatorul de sfrit, n timp ce alte implementri
consider acest delimitator opional.
Instruciunile sunt construite ntr-o manier similar cu propoziiile din limba
englez, cu unul sau mai multe spaii pentru separarea elementelor de limbaj. Un
element de limbaj, asemntor cu un cuvnt dintr-o propoziie, poate fi un cuvnt
cheie (SELECT, FROM, WHERE), numele unui obiect al bazei de date (FILM,
FILM_ID, TITLU_FILM), un operator (=) sau o constant ('PG') care apare ntr-o
instruciune.
Instruciunile sunt scrise ntr-o form liber, ceea ce nseamn c nu exist
reguli stricte privind poziia elementelor de limbaj pe o linie sau locul n care se poate
face trecerea la o linie nou. Totui, n general nu este o idee bun s mprii un
element de limbaj pe mai multe linii. Din punct de vedere logic, instruciunea de mai
jos este identic cu cea prezentat la nceputul acestei seciuni, dar nu este la fel de
uor de citit i de neles:
SELECT FILM_ID, TITLU_FILM FROM FILM WHERE
MPAA_RATING_COD ='PG';
Instruciunile sunt organizate ntr-o serie de clauze i, de obicei, clauzele
trebuie s apar ntr-o anumit ordine atunci cnd sunt folosite (multe clauze sunt
opionale). n exemplul nostru, exist trei clauze, fiecare ncepnd cu un cuvnt cheie
(SELECT, FROM, WHERE).
Elementele de limbaj SQL pot fi scrise cu litere mari, cu litere mici sau n
combinaii. Totui, n majoritatea implementrilor i n conformitate cu standardele
ANSI/ISO, toate minusculele sunt transformate n majuscule n vederea prelucrrii.
Aceasta nu nseamn c datele nu pot conine litere mici, ci c numele obiectelor din
baza de date (tabele, coloane etc.) i comenzile trebuie s fie scrise cu litere mari.
Excepii notabile sunt Microsoft SQL Server i Sybase, care permit modul de lucru cu
diferenierea literelor mari de cele mici, caz n care numele de obiecte scrise diferit
sunt tratate ca nume diferite. n MySQL, diferenierea literelor mari de cele mici n
numele obiectelor este legat de capacitatea sistemului de operare de a face aceast
difereniere.
Virgulele sunt folosite pentru separarea articolelor dintr-o list. n exemplul
nostru, numele a dou coloane sunt specificate ntr-o list separat prin virgule
(FILM_ID, TITLU_FILM). Spaiile care urmeaz dup virgule sunt opionale - putei
aduga orice numr de spaii, inclusiv zero.
irurile de caractere care apar n instruciunile SQL trebuie s fie ncadrate
cu apostrofuri (unele implementri SQL permit i folosirea ghilimelelor). Constantele
numerice nu sunt niciodat ncadrate cu apostrofuri. Dac n irul de caractere trebuie
s apar un caracter apostrof, sunt inserate dou apostrofuri unul lng cellalt. De
exemplu, dac vrei s gsii n baza de date un film numit Sophie's Choice, vei scrie
clauza WHERE astfel:
WHERE TITLU_FILM = 'Sophie''s Choice'
Numele obiectelor bazei de date sunt formate folosind numai litere, cifre i
liniue de subliniere. Caracterul underscore (liniua de subliniere) este folosit, de
obicei, ca separator ntre cuvinte, pentru mbuntirea lizibilitii. Aa cum am
menionat anterior, unele implementri permit folosirea numelor care fac diferena
ntre literele mari i cele mici, cum ar fi PersonMiddleName, un stil numit deseori
scriere de tip cmil", dar acest stil nu este recomandabil dac dorii ca instruciunile
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.
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).
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
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)
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.
a.
b.
c.
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;
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;
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;
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;
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)
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
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.
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';
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
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.
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)
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).
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
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
GEN
RATING
RATING_DESC
Drama
Aciune si Aventura R
Comedie
PG-13
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. ..]) }
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
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
PERSOANA_ID
1
PLATA_ORE
15
2
10
SUPERVISOR_PERSOANA_ID
9.75
9.75
1
1
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
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
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.
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
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
Null
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).
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
Funcie
Scop
DATEADD
DATEDIFF
DATENAME
DATEPART
DAY
GETDATE
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
MONTH
Funcie
Scop
Parametri de intrare
SYSDATE
TO_CHAR
TO_DATE
TRUNC
Data, sir_pentru_formatare
Data, sir_pentru_formatare
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
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
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
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
1
2
3
4
5
6
7
8
9
10
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.
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.
caracteristic este foarte util atunci cnd instructiunile SQL sunt folosite n tranzacii
comerciale.
SGBD va trata fiecare instruciune DML individual ca pe o tranzactie.
Aceasta nseamna c, dac apare o eroare la modificacfrea unui rnd identificat de
instruciunea DML, sistemul DML va anula intreaga instruciune, asa c aceasta nu va
afecta nici unul din rndurile tabelului. Cu alte cuvinte, sistemul SGBD nu va permite
niciodat apariia inconsecvenelor n baza de date. De exemplu , dac incerc s sterg
toate rndurile din tabelul FILM i apare o eroare la tergerea celui de-al treilea rnd
(dup ce au fost deja terse primele dou rnduri ), ntreaga instruciune eueaz i
sistemul SGBD reface (unii ar spune ca prin magie) cele dou rnduri terse.
Instructiunile SQL din acest lecie presupune c sistemul SGBD pe care il
utilizai foloseste formatul AAAA-LL-ZZ pentru datele calendaristice.
Pentru bazele de date Oracle, instruciunea de mai jos modific formatul
datelor calendaristice pentru sesiunea curenta (baza de date revine la formatul
prestabilit de fiecare dat cnd va reconectai la baza de date):
ALTER SESSION SET NLS_DATA_FORMAT=YYYY-MM-DD;
Un alt aspect de care este important s se in seama, sunt restriciile definite
n tabelul referit de instruciunea DML. Sistemul SGBD nu va efectua n baza de date
nici o modificare care ncalc una din restricii.
La formarea instructiunilor DML, trebuie s se in seama de urmatoarele
aspecte referitoare la restriciile tabelului modificat:
Restricii de unicitate
Ca i n cazul cheilor primare, coloanele pe care a fost definit o restricie de
unicitate trebuie sa aib valori unice n ntregul tabel.
Restricii refereniale
Nu se poate insera sau actualiza valoarea unei chei externe dect dac exist
deja rndul printe corespondent care conine valoarea cheii n coloana cheii primare.
In sens invers, nu se poate terge un rnd printe dac exist rnduri subordonate care
refer valoarea din rndul printe, dect dac restricia a fost definit cu opiunea ON
DELETE CASCADE. In general inserrile n tabele trebuie fcute ierarhic (mai intai
randurile parinte, apoi randurile copii), iar tergerile trebuie fcute n ordine invers
(copiii inaintea prinilor).
Restrictii de verificare (CHECK) O instructiune INSERT sau UPDATE nu
poate stoca ntr-o coloana o valoare care ncalc o restricie CHECK definit pentru
coloana respectiv.
Instruciunea INSERT
Instruciunea SQL INSERT este folosit pentru inserarea noilor rnduri de
date n tabele. Instruciunea are dou forme de baz: una n care valorile coloanelor
sunt specificate chiar n instruciune i alta n care valorile sunt selectate dintr-un tabel
sau o vizualizare, folosind o subinterogare.
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);
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.
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
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:
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
99
'TRAIN'
NR
ANGAJAT
Training Video
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
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.
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.
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