Documente Academic
Documente Profesional
Documente Cultură
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.
Limitarea liniilor folosind o selectare:
EMP
EMPNO
7839
7698
7782
7566
ENAME
KING
BLAKE
CLARK
JONES
JOB
PRESIDENT
MANAGER
MANAGER
MANAGER
DEPTNO
10
30
10
20
returneaza toti
angajatii din
departamentul 10
EMP
EMPNO
7839
7782
7934
ENAME
KING
CLARK
MILLER
JOB
PRESIDENT
MANAGER
CLERK
DEPTNO
10
10
10
SELECT
FROM
[WHERE
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
Folosirea clauzei WHERE:
SQL> SELECT ename, job, deptno
2
FROM emp
3
WHERE job CLERK;
ENAME
JAMES
SMITH
ADAMS
MILLER
JOB
CLERK
CLERK
CLERK
CLERK
DEPTNO
30
20
20
10
Toate cautarile de tip caracter sunt case-sensitiv. n exemplul urmator, nu este returnata nici o linie
deoarece tabela EMP contine toate datele n majuscule.
SQL> SELECT ename, empno, job, deptno
2
FROM emp
3 WHERE job=clerk;
Oracle retine datele ntr-un format numeric intern, reprezentnd 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 dect
Mai mare sau egal
Mai mic dect
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
SQL> SELECT ename, sal, com
2 FROM emp
3 WHERE sal<=comm;
ENAME
MARTIN
SAL
1250
COMM
1400
Operator
BETWEEN
AND
IN(lista)
LIKE
IS NULL
Semnificatie
ntre doua valori (inclusiv)
Potriveste orice valoare din lista
Potriveste un tip de caracter
Este o valoare nula
Folosirea operatorului BETWEEN
Limita
superioara
ENAME
MARTIN
TURNER
WARD
ADAMS
MILLER
SAL
1250
1500
1250
1100
1300
Operatorul BETWEEN:
Liniile pot fi afisate bazndu-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
Operatorul IN se foloseste pentru a testa valorile dintr-o lista.
SQL> SELECT empno, ename, sal, mgr
2
FROM
emp
3 WHERE mgr IN (7902, 7566, 7788);
EMPNO ENAME
SAL
4
MGR
7902 FORD
3000
7566
7369 SMITH
800
7902
7788 SCOTT
3000
7566
7876 ADAMS
1100
7788
Operatorul IN:
Pentru a cauta valori ntr-o lista se foloseste operatorul IN.
Exemplul de mai sus afiseaza numarul, numele, salariul angajatului si numarul managerului sau din toti
angajatii ai caror manageri au numarul 7902, 7566 sau 7788.
Operatorul IN poate fi folosit cu orice tip de data. Urmatorul exemplu returneaza o linie din tabela
EMP pentru fiecare angajat al carui nume este inclus n lista de nume din clauza WHERE.
SQL> SELECT empno, ename, mgr, deptno
2
FROM
emp
3 WHERE ename IN (FORD, ALLEN);
Daca n lista sunt folosite caractere sau date, acestea trebuiesc incluse ntre apostrofuri ( ).
Folosirea operatorului LIKE
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
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 cteva comparatii facute cu BETWEEN.
Urmatorul exemplu afiseaza numele si data angajarii, angajati ntre ianuarie 1981 si decembrie 1981.
SQL> SELECT ename, hiredate
2
FROM
emp
3 WHERE hiredate LIKE %81;
5
MGR
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.
6
De exemplu, pentru a afisa numele, slujba si comisionul tuturor angajatilor care nu au dreptul la
comision se va folosi urmatorul SELECT:
SQL> SELECT ename, job, comm
2
FROM
emp
3 WHERE comm IS NULL
ENAME
KING
BLAKE
CLARK
JOB
PRESIDENT
MANAGER
MANAGER
COMM
Operatori logici
Operator
AND
Comentariu
Returneaza TRUE daca ambele componente ale conditiei sunt
adevarate
Returneaza TRUE daca una din componentele conditiei este
adevarata
Returneaza TRUE daca conditia este falsa
OR
NOT
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 pna acum au specificat conditii numai n clauza WHERE. Se pot folosi cteva
conditii ntr-o clauza WHERE folosind operatorii AND si OR.
Folosirea operatorului AND
AND cere ca ambele conditii sa fie adevarate.
SQL>
2
3
4
SELECT
FROM
WHERE
AND
EMPNO ENAME
7876 ADAMS
7934 MILLER
JOB
CLERK
CLERK
Operatorul AND:
7
SAL
1100
1300
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 cstiga 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.
TRUE
TRUE
FALSE
UNKNOWN
FALSE
FALSE
FALSE
FALSE
UNKNOWN
UNKNOWN
FALSE
UNKNOWN
Folosirea operatorului OR
OR cere ca una din conditii sa fie adevarata.
SQL> SELECT empno, ename, job, sal
2
FROM
emp
3 WHERE sal>=1100
4
OR
job=CLERK;
EMPNO
7839
7698
7782
7566
7654
ENAME
KING
BLAKE
CLARK
JONES
MARTIN
JOB
PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SAL
5000
2850
2450
2975
1250
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 cstiga 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
Folosirea operatorului NOT
SQL> SELECT ename, job
2
FROM
emp
3 WHERE job NOT IN (CLERK, MANAGER, ANALYST);
8
ENAME
KING
MARTIN
ALLEN
TURNER
WARD
JOB
PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN
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:
NOT
TRUE
FALSE
FALSE
TRUE
UNKNOWN
UNKNOWN
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
Ordinea evaluarii
1
2
3
4
Operator
Toti operatorii de comparatie
NOT
AND
OR
SELECT
FROM
WHERE
OR
AND
ENAME
KING
MARTIN
ALLEN
TURNER
WARD
SAL
5000
1250
1600
1500
1250
9
SELECT
FROM
WHERE
OR
AND
ENAME
KING
ALLEN
SAL
5000
1600
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 cstiga mai mult
de 1500.
Clauza ORDER BY
SQL> SELECT
ename, job, deptno, hiredate
2
FROM
emp
3
ORDER BY hiredate;
ENAME
SMITH
ALLEN
JOB
CLERK
SALESMAN
DEPTNO HIREDATE
20 17-DEC-80
30 20-FEB-81
10
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.
Sortarea n ordine descendenta
SQL> SELECT
ename, job, deptno, hiredate
2
FROM
emp
3
ORDER BY hiredate DESC;
ENAME
ADAMS
SCOTT
MILLER
JAMES
FORD
KING
MARTIN
JOB
CLERK
ANALYST
CLERK
CLERK
ANALYST
PRESIDENT
SALESMAN
DEPTNO
20
20
10
30
20
10
30
HIREDATE
12-JAN-83
09-DEC-82
23-JAN-82
03-DEC-81
03-DEC-81
17-NOV-81
28-SEP-81
EMPNO
7369
7900
7876
7654
7521
7934
7844
ENAME
SMITH
JAMES
ADAMS
MARTIN
WARD
MILLER
TURNER
ANNSAL
9600
11400
13200
15000
15000
15600
18000
DEPTNO
10
10
10
20
SAL
5000
2450
1300
3000
Exemplu:
Sa se afiseze numele si salariul tuturor angajatilor. Rezultatele sa se afiseze dupa numarul
departamentului si dupa aceea n ordine descrescatoare dupa salariu:
SQL> SELECT
ename, sal
2
FROM
emp
3
ORDER BY deptno, sal DESC;
REZUMAT
SELECT
[DISTINCT] {*, coloana [alias], .}
FROM
tabela
[WHERE
conditie(s)]
[ORDER BY {coloana, epresie, alias} [ASC|DESC]];
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
Practica:
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 intrun 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.
13
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.
14