2. Clauzele WHERE si ORDER BY



Obiective

De cele mai multe ori avem nevoie ca rezultatele intoarse de o interogare a bazei de date sa fie intr-o anumita ordine sau sa fie limitate de anumite conditii. De aceea obiectivele lectiei sunt:

Clauza WHERE

Putem limita randurile selectate cu ajutorul clauzei WHERE. Ea trebuie sa urmeze clauzei FROM.

Clauza FROM trebuie sa fie urmata de o conditie, care daca este adevarata, intoarce randurile care indeplinesc conditia.

Sintaxa :

 
SELECT *|coloana|expresie [alias]
FROM tablela
WHERE conditie;

Exemplu

Listati toti angajatii care sunt in departamentul 20.


Clauza WHERE poate compara valori in coloana, valori literale, expresii aritmetice sau functii.

In sintaxa:

WHERE-restrictioneaza cererea la randurile care indeplinesc o conditite;

conditie- este alcatuita din trei elemente :

A.Operatorii de comparatie (operatori logici)

Operator Semnificatie
=
egal cu
>
mai mare decat
>=
mai mare sau egal
<
mai mic decat
< =
mai mic sau egal
<>
diferit
!=
diferit
^=
diferit

Operatorii de comparatie sunt folositi in conditiile care compara o expresie cu o alta expresie sau valoare.

Exemplu

Listeaza toti angajatii care au comisionul mai mic sau egal cu 500.


Alias-urile nu pot fi folosite in clauza WHERE.

B.Sirurile de caractere si date calendaristice

Pentru a putea folosi in clauza WHERE siruri de caractere si date calendaristice acestea trebuie introduse intre ghilimele simple (' '), singura exceptie fiind constantele numerice.

Exemplu

Listeaza toti angajatii care sunt pe pozitia de 'CLERK'.


Exemplu

Listeaza toti angajatii care au data de angajare 17-DEC-1980.


Exemplu

Listeaza toti angajatii care sunt in departamentul 10.


Atentie! Conteaza daca caracterele sunt scrise cu litere mari sau cu litere mici.

Datele calendaristice sunt inregistrate in baza de date intr-un format numeric intern: secol, an, luna, ziua, ora, minute, secunde.Formatul de afisare este: DD-MON-RR. Acesta foate fi schimbat(vedeti in alta lectie).

C.Conditii de comparare

In SQL sunt 4 operatori care pot fi folositi pentru toate tipurile de date:

Operator Semnificatie
BETWEEN...AND...
intre 2 valori (inclusiv)
IN (lista)
compara cu o lista de valori
LIKE
compara cu un model de tip caracter
IS NULL
este o valoare nula

1.BETWEEN...AND...

Conditia BETWEEN poate fi folosita pentru a selecta randuri pe baza unui interval de valori(continut in conditie).Intervalul este inclusiv, are olimita inferioara si o limita superioara si neaparat prima specificata trebuie sa fie limita inferioara.

Exemplu

Listeaza toti angajatii care au salariul intre 1000 si 2000.



2.IN

Conditia IN testeaza valorile dintr-o lista specificata.Pot fi folosite orice tipuri de date, cu precizarea ca pentru sirurile de caractere si date calendaristice trebuie folosite ghilimelele simple (' ').

Exemplu

Listeaza toti angajatii care au salariul in lista (3631, 1432,4000, 5000).


Exemplu

Listeaza toti angajatii care au numele in lista ('SMITH', 'BLAKE', 'TURNER').



3.LIKE

Daca nu se cunoaste valoarea exacta cautata, cu ajutorul conditie LIKE putem sa selectam randurile care se potrivesc cu un model specificat de caractere.

Operatia de cautare dupa un model poate fi asemanata cu o cautare "wildcard".Pentru construirea modelului sirului cautat pot fi folosite 2 simboluri:

Aceste simboluri pot fi folosite in orice combinatie de caractere literale.

Exemplu

Listeaza toti angajatii al caror nume incepe cu litera S.


Exemplu

Listeaza toti angajatii care au numele de 4 caractere.


Exemplu

Listeaza toti angajatii care al doilea caracter din nume 'o'.



ESCAPE- cand sunt cautate chiar caracterele % sau _. Acesta specifica caracterul care este "sarit".

Sintaxa :

 
SELECT coloana
FROM tablela
WHERE coloana LIKE '%sa\_%' ESCAPE '\';

ESCAPE identifica '\' drept caracterul care trebuie "sarit".El precede caracterul '_' astfel incat acesta va fi considerat drept literal.

4.Conditia IS NULL

Pentru a verifica valorile de tip NULL exista conditia IS NULL sau negarea acesteia IS NOT NULL. O valoare nula este o valoare care este sau incorecta, sau necunoscuta, sau inaplicabila de aceea nu poate fi testata cu "=". O valoare nula nu este la fel cu "zero" care este un numar.

Daca valoarea NULL este utilizata intr-o comparatie, atunci operatorul de comparatie trebuie sa fie IS NULL sau IS NOT NULL altfel rezultatul este intotdeauna FALSE.

Exemplu

Listeaza toti angajatii care nu au comision.



5.Negarea expresiilor


Operator Semnificatie
!=
diferit de (pt anumite s.o)
^=
diferit de (pt anumite s.o)
<>
diferit de
NOT BETWEEN
nu se afla intre 2 valori date
NOT IN
nu se afla intr-o lista
NOT LIKE
diferit de sirul
IS NOT NULL
nu este o valoare nula


D.Operatori logici

Operator Semnificatie
AND
Intoarce Adevarat (true) daca ambele conditii sunt adevarate
OR
Intoarce Adevarat (True) daca una din conditii este adevarata
NOT
Intoarce Adevarat (True) daca conditia e falsa

Acesti operatori sunt folositi pentru a compune expresii logice. Cu ajutorul lor putem folosi mai multe conditii in clauza WHERE. Randul/randurile sunt intoarse doar daca AND/OR/NOT intorc adevarat (true).

1.Operatorul AND

Exemplu

Listeaza toti angajatii care sunt in departamentul 30 si au comision.


2.Operatorul OR

Exemplu

Listeaza toti angajatii care sunt in departamentul 30 sau au comision.


3.Operatorul NOT


E.Prioritatea de executie


Ordinea de executie Operator
1.
Operatorii aritmetici
2.
Operatorii de concatenare
3.
3.Conditiile de comparare
4.
IS [NOT] NULL, LIKE, [NOT] IN
5.
[NOT] BETWEEN
6.
Operatorul logic NOT
7.
Operatorul logic AND
8.
Operatorul logic Or

Exemplu



Dar ordinea se poate modifica daca se folosesc paranteze.

Exemplu



Clauza ORDER BY

In mod normal (fara clauza ORDER BY) randurile sunt returnate intr-o ordine convenita de Oracle insa ea fiind consistenta de la cerere la cerere. Cu ajutorul clauzei ORDER BY randurile vor fi afisate in ordinea solicitata ( cu toate acestea nu se va modifica ordinea interna a randurilor din baza de date).Ea trebuie sa fie ultima clauza din cerere

Sintaxa :

 

SELECT coloana
FROM tablela
[WHERE conditie] [ORDER BY {coloana, expresie} [ASC/DESC]];

In sintaxa:

ORDER BY -Specifica ordinea in care sunt ordonate randurile

ASC -Ordoneaza randurile crescator

DESC -Ordoneaza randurile descrescator

Exemplu

Listati toti angajatii ordonandu-i dupa data de angajare (in ordine crescatoare).



Exemplu

Listati toti angajatii ordonandu-i dupa data de angajare ( in ordine crescatoare).



Exemplu

Listati toti angajatii ordonandu-i dupa data de angajare ( in ordine descrescatoare).



Mai putem ordona randurile returnate cu ajutorul alias-urilor.

Exemplu

Listati toti angajatii ordonandu-i dupa salariul anual: sal*12 salanual ( in ordine crescatoare).



Randurile mai pot fi ordonate si dupa mai multe coloane. Numarul de coloane dupa care se pot ordona randurile intoarse este numarul maxim de coloane existente in tabela.

Exemplu

Listati toti angajatii ordonandu-i dupa data de angajare, salariu si comision ( in ordine crescatoare).



In clauza ORDER BY se pot folosi coloane care nu sunt continute in SELECT.

Exemplu

Listati toti angajatii ordonandu-i dupa salariu ( in ordine crescatoare).



Exercitii

1. Listati toti angajatii care au salariul intre 1500 si 3000.


2.Listati numele angajatilori ordonandu-i in ordine alfabetica.


3.Listati toti angajatii ai caror nume contin NE sau LL in interior.


4. Listati toti angajatii care nu au manager.


5.Listati toti angajatii care au fost angajati in anul 1980.


6. Afisati numele, salariul anual si comisionul pentru toti vanzatorii ai caror salariu lunar este ami mare decat comisionul lor. Iesirea va fi ordonata dupa salariu, cele mai mari primele. Daca doi sau mai multi angajati au acelasi salariu trebuie sortati dupa nume in ordinea celor mai mari salarii.



Capitolul precedent Acasa Capitolul urmator