Operatorii si conditiile sunt utilizate pentru a efectua operatii, cum ar fi adunarea si scaderea, sau comparatii ale datelor individuale într-o instructiune SQL. Operatorii sunt reprezentati de un singur caracter sau de cuvinte rezervate.
O conditie este o expresie compusa din mai multi operatori sau expresii care prin evaluare dau rezultatul True, False sau Unknown.
Exista doua tipuri de operatori: binari si unari. Operatorii unari opereaza asupra unui singur operand. De exemplu, pentru a indica un numar negativ cu modulul 10, folositi operatorul unar (-) pentru a 16416j923q scrie -10. Operatorii binari opereaza asupra a doi operanzi. De exemplu, pentru a scadea doua numere veti scrie 6-4.
Operatorii si conditiile sunt elemente necesare ale oricarui limbaj de calculator. Ele va permit sa efectuati operatii aritmetice, comparatii de date si numeroase alte manipulari ale datelor necesare în aplicatiile dumneavoastra.
Aceste instrumente Oracle va ajuta sa selectati anumite seturi de linii. De exemplu, daca solicitati un set de linii în care nr_dept = 15, veti primi numai liniile în care nr_dept este egal cu 15. în acest exemplu, a fost folosit operatorul =.
Operatorii sunt folositi pentru manipularea datelor si articolelor individuale si returnarea unui rezultat. Paragrafele care urmeaza'prezinta diverse tipuri de operatori: aritmetici, caracter, de comparatie, logici, pe multimi si alte tipuri.
Operatorii aritmetici sunt utilizati în expresii SQL pentru adunarea, scaderea, înmultirea, împartirea si negarea valorilor datelor. Rezultatul acestor expresii este o valoare numerica. In tabelul 11.1 sunt prezentati operatorii aritmetici.
Tabelul 11.1 Operatorii aritmetici
Operator |
Descriere |
Indica o expresie pozitiva sau negativa. Acesti operatori sunt unari. |
|
Înmultire. Operator binar. |
|
Împartire. Operator binar. |
|
Adunare. Operator binar. |
|
Scadere. Operator binar. |
În exemplul urmator este folosit operatorul unar - într-o expresie de evaluare:
select nume_oras from clima_oras where temp_medie = - 10;
În exemplul urmator este folosit operatorul binar aritmetic +:
update comenzi
set cant_comandata = cant_comandata + 100;
Nu folositi niciodata doua semne minus (-) într-o expresie aritmetica pentru a indica scaderea unui numar negativ. Semnul - este rezervat în Oracle pentru a indica începutul comentariilor. Prin urmare, orice urmeaza dupa semnul - va fi interpretat drept comentariu.
sirurile de caractere sunt manipulate cu operatori ^caracter. Cel mai comun operator caracter este operatorul de concatenare II. în exemplul urmator, sunt concatenate doua siruri de caractere pentru a obtine un nou sir de caractere:
select 'Numarul articolului este ' | | nr art f rom lista_articole;
Rezultat
'Numarul articolului este QA910233
Daca ambele siruri sunt de tip char, sirul rezultant este de tip char cu o lungime prestabilita de 255 de caractere. Daca cel putin unul dintre siruri este de tip varchar2, sirul rezultant este de tip varchar2 'cu o lungime prestabilita de 2000 de caractere! Daca unul dintre siruri este nul, sirul rezultant devine egal cu sirul ne-nul. Este recomandabil sa folositi functia nvl înainte de a utiliza un nul într-o concatenare. Functia nvl converteste expresia nul într-un sir de lungime zero.
Operatorii de comparatie sunt folositi pentru compararea unei expresii cu alta expresie. Rezultatul comparatiei este True, False sau Unknown. în tabelul 11.2 sunt enumerati operatorii de comparatie împreuna cu descrierea fiecaruia.
Tabelul 11.2. Operatorii de comparatie
Operator |
Descriere |
Egal cu |
|
!=, <>, ^= |
Diferit de |
> |
Mai mare decât |
< |
Mai mic decât |
>= |
Mai mare sau egal cu |
<= |
Mai mic sau egal cu |
IN |
Egal cu oricare membru al |
NOT IN |
Diferit de oricare membru al |
IS NULL |
Testeaza aparitia nulurilor |
IS NOT NULL |
Testeaza neaparitia nulurilor |
LIKE |
Returneaza True atunci când prima expresie se încadreaza în tiparul celei de-a doua expresii. Sunt permise caracterele de înlocuire (%) si se face deosebirea între majuscule si litere mici. |
ALL |
Compara o valoare cu toate valorile dintr-o lista |
ANY, SOME |
Compara o valoare cu fiecare dintre valorile dintr-o lista |
EXISTS |
Are valoarea True daca o subinterogare returneaza cel putin o linie |
BETWEEN x and y |
Mai mare sau egal cu x si mai mic sau egal cu y |
Exemplele care urmeaza ilustreaza utilizarea operatorilor de comparatie.
Acest exemplu returneaza toate liniile în care cantitatea comandata este mai mare sau egala cu 10000:
select * from lista_comenzi where cant_comandata > 10000;
Exemplul urmator returneaza numele si telefonul clientilor pentru care câmpul de comentarii este completat (nu este nul):
select nume_client, tel_client f rom lista_comenzi where obs_client is not nuli;
Exemplul urmator foloseste operatorul ANY pentru a verifica existenta numelui unui oras în registrul de oaspeti. Aceasta instructiune este evaluata la valoarea True daca este returnata cel putin o linie:
select * from registru
where oras = any (select nume_oras from ang);
Acest exemplu verifica daca o anumita valoare se gaseste în domeniul furnizat în instructiune:
select marca_ang, sal_crt from ang
where sal crt
between 45000 and 60000;
Unul dintre cei mai populari si mai utili operatori este operatorul LIKE. în acest exemplu, instructiunea select citeste toate liniile în care nume_mat_prima începe cu literele Sulfat de:
select * from materii_prime
where nume_mat_prima like 'Sulfat de% ' ;
Un operator logic este utilizat pentru a produce un singur rezultat prin combinarea a doua conditii distincte. Operatorii logici sunt prezentati în tabelul 11.3.
Tabel 11.3. Operatorii logici
Operator |
Descriere |
AND |
Returneaza True daca ambele conditii sunt adevarate; în caz contrar, retumeaza False. |
OR |
Returneaza True daca cel putin una dintre conditii este adevarata sau necunoscuta (Unknown); în caz contrar, returneaza False. |
NOT |
Returneaza True daca conditia care urmeaza este falsa; în caz contrar, returneaza True. De exemplu, conditia din instructiunea urmatoare este falsa; prin urmare instructiunea select returneaza True si este executata. |
Select * from ang where not (data_ang > 01-Jan-2000) (nu s-au facut inca angajari în viitor).
Exemplul urmator utilizeaza operatorul logic OR pentru a selecta salariatii care au fost angajati înainte de l Ianuarie 1990 sau care apartin de departamentul 31:
select * from lista ang
where data_ang < 'O1-JAN-1990' OR
nr_dept = '31';
Operatorii de compunere combina rezultatele a doua interogari distincte într-un singur rezultat. Operatorii de compunere sunt descrisi în Tabelul 11.4.
Tabelul 11.4 Operatorii de compunere
Operator |
Descriere |
UNION |
Returneaza toate liniile distincte din ambele interogari |
UNION ALL |
Returneaza toate liniile din ambele interogari, inclusiv liniile duplicate |
INTERSECT |
Returneaza toate liniile selectate de ambele interogari |
MINUS |
Returneaza toate liniile distincte care se gasesc în prima interogare dar nu si în a doua interogare |
Instructiunea care urmeaza returneaza numai acele linii care exista în seturile de rezultate ale ambelor interogari. Practic, numai acele numere de articole care sa gasesc atât în tabelul LISTA_ARTICOLE, cât si în tabelul ARTICOLE_NOI sunt returnate în acest exemplu:
select nr_art from lista_articole
intersect
select nr_art from articole_noi;
Într-o singura instructiune SQL pot exista mai multi operatori de compunere. Acesti operatori de compunere au prioritate egala, prin urmare programul Oracle îi evalueaza de la stânga spre dreapta.
Prioritatea reprezinta ordinea în care programul Oracle evalueaza diversii operatori din aceeasi expresie.
Fiecare operator are o prioritate predefînita. Programul Oracle evalueaza operatorii cu cea mai înalta prioritate înaintea operatorilor cu prioritate mai scazuta. Operatorii cu prioritate egala sunt evaluati de la stânga spre dreapta.
În tabelul 11.5 sunt enumerati operatorii în ordinea prioritatii.
Tabelul 11.5. Operatorii în ordinea prioritatii
Operator |
Descriere |
Comanda de continuare SQL*Plus |
|
& |
Prefixeaza parametrii |
& & |
Prefix de substitutie |
Prefix pentru variabile gazda |
|
Separator de variabile |
|
Încadreaza subinterogarile |
|
Încadreaza o expresie literala |
|
" |
Încadreaza sinonimul unui tabel sau al unei coloane |
" |
Încadreaza o expresie literala |
Precede numele unei baze de date |
|
Schimba ordinea normala de evaluare a operatorilor |
|
Semnele plus si minus |
|
Înmultire si împartire |
|
Adunare si scadere |
|
II |
Operator de concatenare a sirurilor de caractere |
NOT |
Inverseaza rezultatul unei expresii |
AND |
True daca ambele conditii sunt adevarate |
OR |
True daca cel putin una dintre conditii este adevarata |
UNION |
Returneaza toate liniile distincte din ambele interogari |
UNION ALL |
Returneaza toate liniile din ambele interogari, inclusiv liniile duplicate |
INTERSECT |
Returneaza toate liniile selectate de ambele interogari |
MINUS |
Returneaza toate liniile distincte care se gasesc în prima interogare dar nu si în a doua interogare |
Oracle prevede înca doi operatori care nu se încadreaza în nici unul dintre grupurile anterioare. Acestia sunt operatorii prior si outer join.
Operatorul prior este utilizat într-o clauza connect pentru a evalua structura ierarhica a unei expresii. Atunci când este folosit într-o instructiune select, acest operator forteaza afisarea rezultatelor unei interogari în format ierarhic, radacina fiind afisata prima, dupa care sunt afisati fiii. Exemplul urmator ilustreaza ierarhia unei scheme organizatorice. Presedintele companiei reprezinta radacina schemei, iar angajatii sunt fiii.
select substr(lpad(' ',2*(level - 1)) ! !nume_ang,l,15)
nume_ang, marca_ang, marca_sef, functie from aiîg
connect by prior marca_ang = marca_sef start with functie = 'PREsEDINTE';
Rezultat:
NUME ANG |
MARCA ANG |
MARCA sEF |
FUNCŢIE |
KING |
|
PREsEDINTE |
|
JONES |
MANAGER |
||
SCOTT |
ANALIST |
||
ADAMS |
SECRETAR |
||
FORD |
ANALIST |
||
SMITH |
SECRETAR |
||
BLAKE |
MANAGER |
||
ALLEN |
AGENT VÂNZĂRI |
||
WARD |
AGENT VÂNZĂRI |
||
MARTIN |
AGENT VÂNZĂRI |
||
TURNER |
AGENT VÂNZĂRI |
||
JAMES |
SECRETAR |
||
CLARK |
MANAGER |
||
MILLER |
SECRETAR |
Operatorul outer join este reprezentat de semnul plus (+). Acest operator indica faptul ca precedenta coloana este coloana dupa care se face reuniunea externa într-o reuniune. Pentru o descriere completa a reuniunii externe, consultati Capitolul 14, "Functii avansate".
Conditiile sunt utilizate în instructiuni de evaluare. Ele sunt folosite ca expresii care pot avea fie valoarea True fie False. Conditiile returneaza întotdeauna o valoare care poate fi True, False sau Unknown. Iata un exemplu de conditie foarte simpla:
ang.nr_dept = dept.nr_dept
Conditiile pot avea diverse forme în functie de scopul în care sunt folosite. Urmeaza o serie de exemple care ilustreaza diversele forme ale unei instructiuni conditionale.
Forma 1: Compararea a doua expresii
cantl + cant2 > 1500;
Forma 2: Conditie care reuneste alti operatori într-o singura instructiune conditionala
(nr_dept = 15) OR (oras = 'Boston');
Forma 3: Test pentru verificarea incluziunii într-un domeniu
puncte_marcate between 15 AND 20;
Forma 4: Test pentru detectarea nulurilor
descriere_echipament ÎS nuli;
Forma 5: Verificarea apartenentei într-o lista sau într-o subinterogare
select * from lista_articole where not (cod_clasa_art = '35A');
Forma 6: Testarea existentei liniilor într-o interogare
select * from dept where exists
(Select nr_dept, nume_dept from ang where dept.nr_dept = ang.nr_dept);
Conditiile pot fi utilizate în numeroase situatii. Puteti folosi o conditie în clauza where a urmatoarelor instructiuni:
delete
update
select
In comanda select, puteti folosi o conditie cu urmatoarele clauze:
where having start with
Conditiile pot fi utilizate atât în instructiuni simple, cum ar fi art_l = art_2, cât si in situatii mai complexe în care se folosesc operatori logici pentru a reuni mai multe conditii într-una singura. De exemplu, instructiunea urmatoare utilizeaza operatorul logic OR pentru a combina doua conditii diferite într-o singura instructiune conditionala:
(salariu_crt >= salariu_max) OR (data_angajare < "01-JAN-1975');
Operatorii si conditiile sunt folosite de Oracle pentru a efectua operatii aritmetice si comparatii de date. Operatorii au o ordine de prioritate predefinita pe care programul Oracle o ia în consideratie la evaluarea instructiunilor.
Operatorii si conditiile sunt elemente necesare ale limbajului SQL care va permit sa efectuati comparatii, anumite manipulari de date, si operatii aritmetice.
Un operator este un caracter sau un cuvânt rezervat utilizat într-o instructiune SQL pentru a efectua o actiune sau o operatie asupra elementelor unei expresii. O conditie va permite sa combinati una sau mai multe expresii sau operatori logici cu una dintre diversele sintaxe ale instructiunilor conditionale.
|