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 |
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 |