Documente Academic
Documente Profesional
Documente Cultură
LES02
LES02
Obiective:
La terminarea acestei lectii ar trebui sa puteti:
• Limita numarul de linii returnat de o interogare
• Sorta liniile returnate de o interogare
Telul lectiei:
La citirea datelor dintr-o baza de date, s-ar putea sa trebuiasca sa reduci numarul de linii afisate sau sa
specifici ordinea în care sa fie afisate. Aceasta lectie explica regulile SQL folosite pentru realizarea
acestor actiuni.
În sintaxa:
WHERE restritioneaza interogarea la liniile ce îndeplinesc conditia.
condition e compusa din nume de coloane, expresii, constante si operatori de
comparatie.
Clauza WHERE poate compara valorile din coloane, valori literale, expresii aritmetice sau functii.
Clauza WHERE e compusa din trei elemente:
• Numele coloanei
• Operatorul de comparatie
• Nume de coloana, constanta sau lista de valori
2
SQL> SELECT ename, empno, job, deptno
2 FROM emp
3 WHERE job=’clerk’;
Oracle retine datele într-un format numeric intern, reprezentând secol, an, luna, zi, ore, minute si
secunde. Afisarea implicita a datei este DD-MON-YY.
Nota: schimbarea formatului implicit va fi explicat în capitolul 3.
Valorile numerice nu sunt incluse între apostrofuri.
Operatori de comparatie
Operator Comentariu
= Egal cu
> Mai mare decât
>= Mai mare sau egal
< Mai mic decât
<= Mai mic sau egal
<> Diferit de
Operatori de comparatie:
Operatorii de comparatie sunt folositi în conditiile care compara doua expresii. Acestia sunt folositi în
clauza WHERE în urmatorul format:
Sintaxa:
- WHERE expresie operator valoare
Exemple:
- WHERE hiredate=’01-JAN-95’
- WHERE sal>=1500
- WHERE ename=’SMITH’
Folosirea operatorilor de comparatie
3
Operator Semnificatie
BETWEEN Între doua valori (inclusiv)
…AND…
IN(lista) Potriveste orice valoare din lista
LIKE Potriveste un tip de caracter
IS NULL Este o valoare nula
Limita Limita
inferioara superioara
ENAME SAL
MARTIN 1250
TURNER 1500
WARD 1250
ADAMS 1100
MILLER 1300
Operatorul BETWEEN:
Liniile pot fi afisate bazându-ne pe un interval de valori folosind operatorul BETWEEN. Intervalul
specificat contine o limita inferioara si o limita superioara.
SELECT-ul de mai sus returneaza linii din tabela EMP pentru toti angajatii cal caror salariu este
cuprins între 1000 si 1500.
Valorile specificate cu operatorul BETWEEN sunt inclusive. Prima data trebuie specificata o
linie inferioara.
Folosirea operatorului IN
Daca în lista sunt folosite caractere sau date, acestea trebuiesc incluse între apostrofuri (‘ ‘).
• Operatorul LIKE se foloseste pentru a efectua cautari cu caractere wildcard în siruri valide de
cautare.
• Conditiile cautarii pot contine fie caractere literale, fie numere
- % înseamna zero sau mai multe caractere
- _ înseamna un singur caracter
Operatorul LIKE:
Nu întotdeauna stii valoarea exacta pe care o cauti. Poti selecta linii care se potrivesc dupa un tip de
caractere folosind operatorul LIKE. Operatia de potrivire dupa un tip de caractere este referita ca o
cautare cu caractere wildcard. Pot fi folosite doua simboluri pentru construirea sirurilor de cautare.
Simbol Descriere
% Reprezinta orice secventa de doua sau mai multe caractere
_ Reprezinta un singur caracter
SELECT-ul de mai sus numele angajatilor din tabela EMP pentru toti angajatii ai caror nume începe cu
“S”. Numele care încep cu “s” nu vor fi returnate.
Operatorul LIKE poate fi folosit ca scurtatura pentru câteva comparatii facute cu BETWEEN.
Urmatorul exemplu afiseaza numele si data angajarii, angajati între ianuarie 1981 si decembrie 1981.
5
SQL> SELECT ename
2 FROM emp
3 WHERE ename LIKE ‘_A%’:
ENAME
JAMES
WARD
Optiunea ESCAPE:
Când este nevoie de o potrivire exacta a caracterelor “%” si “_” trebuie folosita optiunea ESCAPE.
Aceasta optiune specifica care este caracterul ESCAPE. Pentru a afisa numele tuturor angajatilor care
contine secventa “A_B” se va folosi urmatorul SELECT:
Optiunea ESCAPE identifica caracterul backslash (\) ca fiind caracter ESCAPE. În tipar caracterul
ESCAPE precedeaza caracterul underscore (_). Acest lucru face ca Oracle sa interpreteze caracterul
underscore literal.
ENAME MGR
KING
Operatorul IS NULL:
Operatorul IS NULL cauta valorile nule. O valoare nula e o valoare care nu e disponibila, neatribuita,
necunoscuta sau neaplicabila. Din aceasta cauza nu poate fi testata cu (=) deoarece o valoare nula nu
poate fi egala sau inegala cu orice valoare. Exemplul de mai sus returneaza numele si managerul
tuturor angajatilor care nu au manager.
De exemplu, pentru a afisa numele, slujba si comisionul tuturor angajatilor care nu au dreptul la
comision se va folosi urmatorul SELECT:
6
ENAME JOB COMM
KING PRESIDENT
BLAKE MANAGER
CLARK MANAGER
Operatori logici
Operator Comentariu
AND Returneaza TRUE daca ambele componente ale conditiei sunt
adevarate
OR Returneaza TRUE daca una din componentele conditiei este
adevarata
NOT Returneaza TRUE daca conditia este falsa
Operatori logici:
Un operator logic combina rezultatul a doua componente de tip conditie pentru a produce un singur
rezultat bazat pe acestea sau pentru a inversa rezultatul unei singure conditii. În SQL sunt disponibili
trei operatori logici:
• AND
• OR
• NOT
Toate exemplele de pâna acum au specificat conditii numai în clauza WHERE. Se pot folosi câteva
conditii într-o clauza WHERE folosind operatorii AND si OR.
Operatorul AND:
În exemplul de mai sus ambele conditii trebuie sa fie adevarate pentru a fi selectata vreo înregistrare.
De acea un angajat care are este CLERK si câstiga mai mult de 1100 va fi selectat.
Toate cautarile de tip caracter sunt case-sensitiv. Nu va fi returnata nici o linie daca CLERK nu
este scris cu majuscule. Sirurile tip caracter trebuiesc incluse între apostrofuri.
7
Tabela de adevar a operatorului AND:
Tabela urmatoare arata rezultatul combinarii a doua expresii cu AND:
Folosirea operatorului OR
Operatorul OR:
În exemplul de mai sus, oricare din conditii poate fi adevarata pentru a fi selectata vreo înregistrare. De
aceea un angajat care are slujba de CLERK sau câstiga mai mult de 1100 va fi selectat.
Tabela de adevar a operatorului OR:
Urmatoarea tabela arata rezultatele combinarii a doua expresii cu OR:
OR TRUE FALSE UNKNOWN
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE UNKNOWN
UNKNOWN TRUE UNKNOWN UNKNOWN
ENAME JOB
KING PRESIDENT
MARTIN SALESMAN
ALLEN SALESMAN
TURNER SALESMAN
WARD SALESMAN
8
Operatorul NOT:
În exemplul de mai sus este afisat numele si slujba tuturor angajatilor a caror slujba nu este CLERK,
MANAGER sau ANALST.
Tabela de adevar a operatorului NOT:
Tabela urmatoare arata rezultatul aplicarii operatorului NOT unei conditii:
Nota: de asemenea operatorul NOT poate fi folosit cu alti operatori SQL cum ar fi BETWEEN, LIKE
si NULL.
… WHERE job NOT IN (‘CLERK’, ‘ANALYST’)
… WHERE sal NOT BETWEEN 1000 AND 1500
… WHERE comm IS NOT NULL
Reguli de precedenta
Reguli de precedenta
9
Reguli de precedenta
Folosirea parantezelor:
În exemplul de mai sus sunt doua conditii:
• Prima conditie este ca slujba sa fie PRESIDENT sau SALESMAN.
• A doua conditie este ca salariul sa fie mai mare de 1500.
De aceea SELECT-ul citeste urmatoarele:
“Selecteaza linia daca angajatul este PRESIDENT sau SALESMAN si daca angajatul câstiga mai mult
de 1500.”
Clauza ORDER BY
10
unde: ORDER BY specifica ordinea în care sunt afisate liniile.
ASC ordoneaza liniile ascendent – implicit.
DESC ordoneaza liniile descendent.
Daca nu este folosita clauza ORDER BY ordinea sortarii este nedefinita si Serverul Oracle
poate sa nu afiseze liniile în aceeasi ordine, pentru aceeasi interogare, de doua ori. Folositi clauza
ORDER BY pentru a afisa liniile într-o ordine specifica.
11
EMPNO ENAME ANNSAL
7369 SMITH 9600
7900 JAMES 11400
7876 ADAMS 13200
7654 MARTIN 15000
7521 WARD 15000
7934 MILLER 15600
7844 TURNER 18000
…
12
REZUMAT
Sumar:
În aceasta lectie s-a învatat despre restrictionarea si sortarea liniilor returnate de un SELECT. De
asemenea s-ai învatat cum se implementeaza diversi operatori.
Sumarul temei
• Selectarea datelor si schimbarea ordinii linilor afisate
• Restrictionarea liniilor folosind clauze WHERE
• Folosirea ghilimelelor în aliasul coloanelor
Sumarul temei:
Aceasta tema va ofera o varietate de exercitii ce folosesc clauze WHERE si clauze ORDER BY.
1. Afisati numele si salariul angajatilor care castiga mai mult de 2850$. Salvati instructiunea SQL
intr-un fisier p1.sql si apoi rulati-l.
2. Afisati numele angajatului cu marca 7566 precum si numarul departamentului in care lucreaza.
3. Modificati p1.sql astfel incat sa afisati numele si salariul tuturor angajatilor a caror salarii nu intra
in intervalul 1500$ si 2850$. Salvati instructiunea in fisierul p3.sql si apoi rulati-l.
4. Afisati numele, meseria si data de inceput pentru cei care s-au angajat intre 20.02.1981 si
1.05.1981. Afisarea sa fie facuta in ordinea crescatoare a datei de angajare.
5. Afisati numele angajatilor si numerele de departament ale celor care muncesc in departamentele 10
si 30, ordonati alfabetic dupa nume.
6. Modificati fisierul p3.sql si listati numele si salariul celor care castiga mai mult de 1500$ si sunt in
departamentele 10 sau 30. Redenumiti coloanele Angajat si Salar Lunar. Salvati modificarile in
fisierul p6.sql si apoi rulati-l.
7. Afisati numele si data angajarii pentru cei care au fost angajati in 1982.
8. Afisati numele si meseria pentru angajatii care nu au manager.
9. Afisati numele, salariul si comisionul pentru oti angajatii care au comision. Sortati datele in ordine
descendenta dupa salariu si comision.
10. Afisati numele angajatilor care au a treia litera a numelui ‘A’.
11. Afisati numele angajatilor care au 2 de ‘L’ in numele lor si sunt din departamentul 30 sau au
manager cu marca 7782.
12. Afisati numele, meseria si salariul pentru toti cei care sunt functionari sau analisti si salariul lor nu
este egal cu 1000$ sau 3000$ sau 5000$.
13. Modificati p6.sql si afisati numele, salariul si comisionul pentru toti angajatii care au comisionul
mai mare decat salariul marit cu 10%. Salvati modificarile in fisierul p13.sql si apoi rulati-l.
13