Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Functii de uz general

sql



+ Font mai mare | - Font mai mic



Functii de uz general

Pe langa functiile care controleaza modul de formatare sau conversie al datelor, Oracle ofera cateva functii de uz general, care specifica modul in care sunt tratate valorile NULL

NVL(val1,val2) - functia returneaza valoarea val1, daca aceasta este nenula, iar daca val1 este NULL atunci va returna valoarea val2. Functia NVL poate lucra cu date de tip caracter, numeric sau data calendaristica, insa este obligatoriu ca cele doua valori sa aiba acelasi tip.



select first_name, commission_pct, NVL(commission_pct,0.8)

from employees

where employee_id between 140 and 150

rezultatul returnat de aceasta comanda este cel din figura II.2.14.

FIRST_NAME

COMMISSION_PCT

NVL(COMMISSION_PCT,0.8)

Trenna

Curtis

Randall

Peter

Eleni

Figura II.2.14. Functia NVL

NVL2(val1,val2,val3) - daca valoarea val1 nu este nula atunci functia va returna valoarea val2, iar daca val1 are valoarea NULL atunci functia va returna valoarea val3 (vezi figura II.2.15.).

select first_name, commission_pct,

NVL2(commission_pct,'ARE','NU ARE')

from employees where employee_id between 140 and 150

FIRST_NAME

COMMISSION_PCT

NVL2(COMMISSION_PCT,'ARE','NUARE')

Trenna

NU ARE

Curtis

NU ARE

Randall

NU ARE

Peter

NU ARE

Eleni

ARE

Figura II.2.15 Functia NVL2

NULLIF(expr1,expr2) - daca cele doua expresii sunt egale, functia returneaza NULL. Daca valorile celor doua expresii sunt diferite atunci functia va returna valoarea primei expresii (vezi figura II.2.16.).

select employee_id, first_name, last_name,

NULLIF(length(first_name),length(last_name))

from employees where employee_id between 103 and 142

EMPLOYEE_ID

FIRST_NAME

LAST_NAME

NULLIF(LENGTH(FIRST_NAME),LENGTH(LAST_NAME))

Alexander

Hunold

Bruce

Ernst

Diana

Lorentz

Kevin

Mourgos

Trenna

Rajs

Curtis

Davies

Figura II.2.16 Functia NULLIF

COALESCE(expr1, expr2, , exprn) - functia returneaza valoarea primei expresii nenule (vezi figura II.2.17).

select coalesce(null, null, '33', 'test') from dual

COALESCE(NULL,NULL,'33','TEST')

Figura II.2.17 Functia COALESCE

II.2.8 Functii si expresii conditionale

Oracle SQL ofera posibilitatea de a construi expresii alternative asemanatoare structurilor IF-THEN-ELSE prezente in alte limbaje.

DECODE(expresie, val11, val12, val21, val22, , valn1, valn2, val) aceasta compara valoarea expresiei cu valorile val11 val21 valn1. Daca valoarea expresiei este egala cu valoarea vali1, atunci functia va returna valoarea vali2. Daca functia nu este egala cu nici una din valorile vali1, atunci functia va returna valoarea val

select DECODE('Maria' ,'Dana', 'Ea este Ana' ,

'Maria','Ea este Maria' ,

'Nu e nici Ana nici Maria')

from dual

aceasta comanda va afisa mesajul Ea este Maria insa urmatoarea comanda va afisa Nu e nici Ana nici Maria

select DECODE('Valeria' ,'Dana', 'Ea este Ana' ,

'Maria','Ea este Maria' ,

'Nu e nici Ana nici Maria')

from dual

In locul functiei DECODE se poate folosi expresia conditionala CASE. Functia CASE utilizeaza cuvintele cheia when then else, si end pentru a indica ramura selectata. In general orice apel al functiei DECODE poate fi transcris folosind functia CASE. Chiar daca o expresie folosind CASE este mai lunga decat expresia echivalenta care foloseste functia DECODE, varianta cu CASE este mult mai usor de citit si greselile sunt depistate mai usor. In plus varianta CASE este compatibila ANSI-SQL

Cele doua comenzi de mai sus por fi transcrise cu ajutorul functiei CASE astfel

select CASE 'Maria'

WHEN 'Dana' THEN 'Ea este Ana'

WHEN 'Maria' THEN 'Ea este Maria'

ELSE 'Nu e nici Ana nici Maria'

END

from dual

select CASE 'Valeria'



WHEN 'Dana' THEN 'Ea este Ana'

WHEN 'Maria' THEN 'Ea este Maria'

ELSE 'Nu e nici Ana nici Maria'

END

from dual

3.Interogari multiple

In capitolele anterioare am aflat cum putem afisa informatii din baza de date, insa la fiecare rulare a unei comenzi SELECT am afisat date dintr-o singura tabela.

Unul dintre rezultatele procesului de normalizare este acela ca datele sunt memorate, de cele mai multe ori, in tabele diferite. De aceea, la afisarea diferitelor rapoarte va trebui sa puteti prelua date din mai multe tabele printr-o singura comanda SQL.

Din fericire SQL ofera facilitati pentru combinarea datelor din mai multe tabele si afisarea lor intr-un singur raport. O astfel de operatie se numeste join, sau interogare multipla.

Pe parcursul acestui capitol vom folosi ca exemple tabela Persoane a carei cheie primara este atributul IdPersoana tabela Firme a carei cheie primara este atributul IdFirm, si tabela Joburi cu cheia primara IdJob. Presupunem ca aceste tabele contin urmatoarele inregistrari:

Tabelul II.3.1. Tabela Persoane

IDPERSOANA

NUME

PRENUME

LOCALITATE

IDFIRM

IDJOB

Ionescu

Gheorghe

Brasov

Vasilescu

Vasile

Cluj-Napoca

Popescu

Ioan

Bucuresti

Georgescu

Maria

Iasi

Marinescu

Angela

Sibiu

Antonescu

Elena

Sibiu

Bischin

Paraschin

Brasov

Olaru

Angela

Ploiesti

Tabelul II.3.2. Tabela Firme

IdFirm

Nume

Localitate

SC Crisib SA

Sibiu

SC SoftCom

Alba Iulia

SC TimTip

Timisoara

Brasoveanca

Brasov

Tabelul II.3.3. Tabela Joburi

IdJob

Nume

Reprezentant Vanzari

Manager

Operator IT

Programator

Administrator

Administrator retea

In Oracle exista doua moduri diferite de a scrie joinurile:

Prima metoda foloseste sintaxa specifica Oracle. In acest caz conditiile de join sunt incluse in clauza WHERE. Aceasta metoda este mai usor de inteles, insa are dezavantajul ca in aceeasi clauza WHERE se includ atat conditiile de filtrare a inregistrarilor afisate cat si conditiile de join.

A doua varianta foloseste sintaxa ANSI/ISO, care este putin mai greoaie, insa comenzile scrise folosind aceasta sintaxa sunt portabile si in alte SGBD-uri care folosesc limbajul SQL.

Indiferent de sintaxa folosita exista mai multe moduri de legare a tabelelor si anume:

Produsul cartezian - leaga fiecare inregistrare dintr-o tabela cu toate inregistrarile din cealalta tabela.

Equijoin - sunt legate doua tabele cu ajutorul unei conditii de egalitate

NonEquijoin in acest caz conditia de join foloseste alt operator decat operatorul de egalitatea

SelfJoin - este legata o tabela cu ea insasi, e folosita de obicei in conjunctie cu relatiile recursive.

OuterJoin - sunt o extensie a equijoinului, cand pentru unele inregistrari dintr-o tabela nu exista corespondent in cealalta tabela, si dorim ca aceste inregistrari fara corespondent sa fie totusi afisate.




Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1345
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved