Crearea de campuri cu valori calculate
- In aceasta sectiune veti invata ce sunt campurile cu valori calculate, cum se creeaza ele si cum sa folositi aliasurile pentru a face referire la campurile cu valori calculate din aplicatia dumneavoastra.
- Campurile cu valori calculate
Adesea datele stocate in tabelele unei baze de date nu sunt disponibile exact in formatul necesar pentru aplicatia dumneavoastra.Iata cateva exemple:- Orasul ,statul si codul postal sunt stocate in coloane separate (asa cum trebuie),dar programul de tiparire a etichetelor trebuie sa le regaseasca sub forma unui singur camp corect formatat.
- Datele din coloane sunt scrise atat cu majuscule ,cat si cu minuscule ,iar in raportul dumneavoastra toate datele trebuie sa fie prezentate in litere majuscule.
- Un tabel de comenzi stocheaza preturile unitare si cantitatile de articole,dar nu si pretul global (pretul unitar inmultit cu cantitatea) pentru fiecare articol.Pentru ca sa tipariti facturi aveti nevoie de pretul global.
- Aveti nevoie de sume totale,de valori medii sau de alte calcule bazate pe datele din tabele.
In fiecare dintre aceste exemple ,datele stocate in tabele nu sunt exact ceea ce are nevoie aplicatia dumneavoastra.In loc sa regasiti datele asa cum sunt pentru ca dupa aceea sa le reformati in aplicatia client sau in raport,doriti sa regasiti datele transformate,calculate sau reformatate direct din baza de date.Aici intervin campurile cu valori calculate,numite in continuare campuri calculate .Spre deosebire de toate coloanele pe care le-am regasit in lectiile de pana acum campurile calculate nu exista de fapt in tabelele bazei de date.Un camp calculat este creat din mers in interiorul unei instructiuni SELECT din limbajul SQL .Camp.In esenta inseamna acelasi lucru ca si coloana si adesea cei doi termeni sunt folositi unul in locul celuilalt ,desi de obicei coloanele din bazele de date sunt numite coloane iar camp se foloseste asociat campurilor calculate
Este important de retinut ca numai baza de date stie care coloane dintr-o instructiune SELECT sunt realmente coloane din tabele si care sunt campuri calculate.Din perspectiva unui client (de exemplu aplicatia dumneavoastra),datele unui camp calculat sunt returnate in acelas mod ca si datele din oricare alta coloana.Formatare la client si formatare la server Multe dintre transformarile si reformatarile ce pot fi efectuate in instructiuni SQL pot fi de asemenea executate direct in aplicatia client.Ca regula generala este totusi mult mai rapid sa efectuati asemenea operatiuni in baza de date server,decat la client.
- Concatenarea campurilor calculate
Pentru a demonstra lucrul cu campuri calculate vom incepe cu un exemplu simplu:adresele postale Tabelul vanzatori contine numele vanzatorilor si informatii legate de adresele lor.Imginati-va ca expediati aceeasi scrisoare catre toti vanzatorii si ca tipariti etichete pentru plicuri,folosind un raport pe care l-ati creat.Raportul ericheta necesita trei trei linii de text -numele vanzatorului si doua linii cu adresa lui.
Instructiunea SELECT care returneaza toate numele vanzatorilor este destul de simpla dar cum veti crea adresa?. Aplicatia eticheta doreste o singura valoare ,iar datele din tabel sunt stocate in trei coloane:vanz_oras, vanz_stat si vanz_cod.ConcatenareUnirea valoriilor (prin atasare)in scopul formarii unei singure valori mai lungi.
Solutia este concatenarea celor trei coloane. In instructiunile SELECT din limbajul SQL ,puteti sa concatenati coloane folosind un operator special .In functie de sistemul de gestionare a bazei de date pe care-l folositi,operatorul acesta poate sa fie semnul plus (+) sau doua caractere bare verticale (//).Iata un exemplu (folosind semnul plus ,sintaxa utilizata de Microsoft SQL Server,Microsoft Access si Sybase)SELECT vanz_oras+' ;'+vanz_stat+ ' '+vanz_cod
FROM Vanzatori
ORDER BY vanz_nume;
................................
Anytown , OH 44333
Bear Town , MI 44444
Dollsville , CA 99999
New York , NY 11111
Londra , N16 6PS
Paris , 45678
In continuare,iata versiunea Oracle a aceleiasi instructiuni:SELECT vanz_oras || ' , ' || vanz_stat || ' ' || vanz_cod
FROM Vanzatori
ORDER BY vanz_nume ;
.............................................
Anytown , OH 44333
Bear Town , MI 44444
Dollsville , CA 99999
New York , NY 11111
Londra , N16 6 PS
Paris , 45678
Instructiunile SELECT de mai sus concateneaza urmatoarele elemente:- Orasul ,stocat in coloana vanz_oras
- Un sir continand o virgula si un spatiu, care va intra intre coloanele Oras si Stat .Statul ,stocat in coloana vanz_stat (daca exista)
- Un sir,continand un spatiu, care va intra intre coloanele Stat si Cod
- Codul postal,stocat in coloana vanz_cod
Dupa cum se vede in rezultatul de mai sus, instructiunea SELECT returneaza o singura coloana(un camp calculat),care contine toate aceste cinci elemente ca o singura unitate.Notificare pentru utilizatorii de Oracle.Daca folositi Oracle ,va trebui sa utilizati doua caractere bare verticale(||) ca operator de concatenare. Oracle procedeaza in felul acesta pentru a face deosebire intre adunare si concatenare. Cum stiu atunci SGBD-urile care folosesc semnul (+)pentru concatenare cand sa interpreteze semnul ca simbolizand adunarea si cand sa-l trateze ca simbol pentru concatenare?Depinde de tipul de date din coloana.Daca sunt valori de tip numeric ,SQL le va aduna (folosind operatia aritmetica).Daca sunt valori de tip text (care nu pot fi adunate aritmetic ),atunci SQL le va concatena.Pentru o discutie asupra tipurilor de date ,consultati lectia 1" Limbajul SQL". Sintaxa ORACLE este de fapt cea recomandata ca parte a specificatiilor SQL ,astfel ca tot mai multe baze de date au inceput sa accepte (pe langa folosirea lui+).
Examinati din nou rezultatul returnat de instructiunea SELECT.Cele trei coloane care sunt incorporate in campul calculat sunt completate cu spatii albe .Multe baze de date (desi nu toate) salveaza valorile text completate pana la latimea coloanei.Ca sa returnati datele formatate corespunzator,trebuie sa ajustati acele spatii de completare.Aceasta se poate realiza ,folosind functia RTRIM (),astfel:SELECT RTRIM (vanz_oras) +' , '+RTRIM(vanz_stat)+ '
Iata si versiunea Oracle:
'+RTRIM (vanz_cod)
FROM Vanzatori
ORDER BY vanz_nume;
..................................
Anytown ,OH 44333
Bear Town, MI 44444
Dollsville, CA 99999
New York, NY 11111
Londra , N16 6PS
Paris , 45678SELECT RTRIM (vanz_oras) || ' , '|| RTRIM (vanz_stat) ||'
'|| RTRIM (vanz_cod)
FROM Vanzatori
ORDER BY vanz_nume;
.....................................
Anytown, OH 44333
Bear Town, MY 44444
Dollsville , CA 99999
New York, NY 11111
Londra, N16 6PS
Paris, 45678
Functia RTRIM () inlatura toate spatiile din dreapta unei valori.Folosind-o, coloanele individuale sunt ajustate corespunzator.O virgula si un spatiu separe orasul si statul,iar un spatiu separa statul si codul postal.Functiile TRIM .Cele mai multe SGBD-uri accepta functia RTRIM () (care,asa cum tocmai am vazut,ajusteaza partea dreapta a unui sir),dar si functiile LTRIM(), care ajusteaza partea stanga a unui sir ,si TRIM(),care ajusteaza ambele parti ale unui sir.
- Aliasurile
Instructiunea SELECT folosita pentru concatenarea campului adresa actioneaza bine, asa cum s-a vazut in rezultatul de mai sus,dar care va fi numele acestei noi coloane calculate?Adevarul este ca ea nu are un nume,ci este pur si simplu o valoare.Desi nu deranjeaza daca va multumiti sa examinati rezultatele cu un instrument de interogare SQL (de exemplu,MS-Query sau Microsoft SQL Server Query Analyzer),o coloana fara nume nu poate fi utilizata intr-o aplicatie client, deoarece clientul nu poate face referire le ea. Pentru a solutiona problema respectiva ,limbajul SQL accepta aliasuri pentru coloane.Un alias este un alt nume al unui camp sau al unei valori.Aliasurile sunt atribuite prin cuvantul cheie AS. Examinati urmatoarea instructiune SELECT:SELECT RTRIM (vanz_oras)+' , '+RTRIM (vanz_stat) +'
' +RTRIM (vanz_cod) AS adresa2
FROM Vanzatori
ORDER BY vanz_nume;
adresa2
..............
Anytown, OH 44333
Bear Town , MI 44444
Dollsville, CA 99999
New York , NY 11111
Londra , N16 6PS
Paris, 45678
Iata si versiunea Oracle:
SELECT RTRIM(vanz_oras) || ' , ' || RTRIM (vanz_stat || '
' || RTRIM(vanz_cod) AS adresa2
FROM Vanzatori
ORDER BY vanz_nume;
adresa2
..................................
Anytown, OH 44333
Bear Town ,MI 44444
Dollsville, CA 99999
New York, NY 11111
Londra, N16 6PS
Paris , 45678
Instructiunea SELECT in sine este aceeasi cu cea folosita in exemplul anterior,atat doar ca acum campul calculat este urmat de textul AS adresa2.Aceasta instruieste limbajul SQL sa creeze un camp calculat numit adresa2, care sa contina calculele specificate.Dupa cum se poate vedea, rezultatul este la fel ca inainte,dar acum coloana se numeste adresa2 si orce aplicatie client poate face referire la ea folosind acest nume,asa cum ar proceda cu orce coloana reala dintr-un tabel.Alte utilizari pentru aliasuriAliasurile au si alte utilizari.Unele dintre cele mai uzuale sunt redenumirea unei coloane,daca numele acesteia din tabel contine caractere nepermise (de exemplu spatii),si extinderea numelor de coloane ,daca numele initiale sunt fie ambigue,fie usor de citit in mod eronat
Instructiunea SELECT completata pentru regasirea tuturor informatiilor pentru eticheta postala arata acum astfel:SELECT vanz_nume,
vanz_adresa,
RTRIM (vanz_oras)+', '+RTRIM (vanz_stat)+'
'+RTRIM(vanz_cod) AS vanz_adresa2
FROM Vanzatori
ORDER BY vanz_nume;
Iata si versiunea Oracle:
SELECT vanz_nume,
vanz_adresa,
RTRIM (vanz_oras) || ' , ' || RTRIM (vanz_stat) || '
' ||RTRIM (vanz_cod) AS vanz_adresa2
FROM Vanzatori
ORDER BY vanz_nume;Nume de aliasuri. Aliasurile pot sa fie cuvinte individuale sau siruri de tip text.Daca se utilizeaza siruri de tip text,ele trebuie incluse intre apostrofuri.Practica este corecta, totusi nu-i deloc recomandata.Este adevarat ca denumirile formate din mai multe cuvinte sunt mult mai usor de inteles,dar,pe de alta parte ele creeaza tot felul de probleme pentru aplicatiile client.Ba chiar in asemenea masura incat utilizarea cea mai raspandita a aliasurilor este de a redenumi numele din mai multe cuvinte in nume formate dintr-un singur cuvant.
Coloane derivate.. Aliasurile sunt numite uneori "coloane derivate",asa ca,indiferent de termenul pe care-l veti intalni,el inseamna acelas lucru
- Efectuarea de calcule aritmetice
Alta utilizare frecventa a campurilor calculate este efectuarea de calcule aritmetice asupra datelor regasite.Sa examinam un exemplu.Tabelul comenzi contine toate comenzile primite,iar tabelul 'ComenziArticole contine articolele individuale din fiecare comanda.Urmatoarea instructiune SQL regaseste toate articolele din comanda numarul 20008:SELECT prod_id, cantitate, articol_pret
FROM ComenziArticole
WHERE comanda_nr =20008;
prod_id cantitate articol_pret
............ ........... ...........
RGAN01 5 4.9900
BRO3 5 11.9900
BNBG01 10 3.4900
BNBG02 10 3.4900
BNBG03 10 3.4900
Coloana articol_pret contine pretul unitar al fiecarui articol dintr-o comanda.Pentru ca sa aflati pretul global(pretul unitar inmultit cu cantitatea comandata),procedati astfel:SELECT prod_id,
cantitate,
articol_pret,
cantitate*articol_pret AS pret_global
FROM ComenziArticole
WHERE comanda_nr =20008
prod_id cantitate articol_pret pret_global
........... ............ .............. .............
RGAN01 5 4.9900 24.9500
BR03 5 11.9900 59.9500
BNBG01 10 3.4900 34.900
BNBG02 10 3.4900 34.900
BNBG03 10 3.4900 34.900
Coloana pret_global din rezultatul de mai sus este un camp calculat ;calculul este simpla inmultire cantitate*articol_pret.Aplicatia client poate sa foloseasca acum aceasta coloana nou calculata ,ca pe orcare alta coloana. SQL accepta operatorii aritmetici elementari enumerati mai jos.In plus, pot fi folosite parantezele ,pentru a stabili ordinea precedentei.Pentru explicatii privind precedenta,consultati Lectia 5,"Filtrarea avansata a datelor".Operatorii aritmetici SQL
Operator Descriere
..............................
+ Adunare
- Scadere
* Inmultire
/ Impartire - In lectia aceasta,ati invatat ce sunt campurile calculate si cum sa le creati.Ati folosit exemple care au demonstrat utilizarea campurilor calculate ,atat pentru concatenarea sirurilor, cat si pentru operatii aritmetice.In plus,ati aflat cum sa creati si sa folositi aliasuri,astfel ca aplicatia dumneavoastra sa poata face referire la campuri calculate.
Link-ul autorului:
www.avasilcaidaniel.com/
Comentarii
Voteaza acest articol!
Trimite un comentariu!