Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
Restrictionarea si sortarea datelor



Restrictionarea si sortarea datelor


Restrictionarea si sortarea datelor




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 in care sa fie afisate. Aceasta lectie explica regulile SQL folosite pentru realizarea acestor actiuni.


Limitarea liniilor folosind  o selectare:

EMP

EMPNO

ENAME

JOB




DEPTNO

“ . returneaza toti angajatii din departamentul 10”


KING

PRESIDENT




BLAKE

MANAGER




CLARK

MANAGER




JONES

MANAGER








EMP

EMPNO

ENAME

JOB

DEPTNO


KING

PRESIDENT




CLARK

MANAGER




MILLER

CLERK




Limitarea numarului de linii folosind o selectie:

In exemplul de mai sus presupuneti ca vreti sa afisati toti angajatii din departamentul 10. Setul de linii care au valoarea 10 in coloana DEPTNO sunt singurele returnate. Aceasta metoda de restrictionare reprezinta baza clauzei WHERE in SQL.


Limitarea liniilor selectate:


Reducerea numarului de linii sectionate folosind clauze WHERE.


SELECT                    [DISTINCT]

FROM                        table

[WHERE                    condition(s)];


Clauza WHERE urmeaza dupa clauza FROM.



Limitarea liniilor selectate:

Puteti reduce numarul de linii returnate de o interogare folosind clauze WHERE. O clauza WHERE contine o conditie ce trebuie indeplinita, si urmeaza imediat dupa o clauza FROM.


In sintaxa:

WHERE                        restritioneaza interogarea la liniile ce indeplinesc 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


Folosirea clauzei WHERE:


SQL> SELECT ename, job, deptno

FROM emp

WHERE job ‘CLERK’;


ENAME

JOB

DEPTNO

JAMES

SMITH

ADAMS

MILLER

CLERK

CLERK

CLERK

CLERK






Folosirea clauzei WHERE:

In exemplul de mai sus SELECT-ul returneaza numele, functia si numarul departamentului tuturor angajatilor care au functia CLERK.

De retinut ca functia CLERK a fost specificata cu litere mari pentru a se asigura potrivirea cu functia trecuta in coloana JOB a tabelei EMP. Sirurile de caractere sunt case-sensitive.


Siruri de caractere si date


Sirurile de caractere si datele sunt incluse intre apostrofuri

Valorile de tip caracter sunt case-sensitiv iar valorile de tip data sunt format-sensitive

Formatul de data implicit este ‘DD-MON-YY’


SQL> SELECT ename, job, deptno

2 FROM emp

3 WHERE ename=’JAMES’;


Siruri de caractere si date:

Sirurile de caractere si datele in clauza WHERE trebuiesc incluse intre apostrofuri(‘ ‘). Totusi constantele numerice nu trebuiesc incluse.

Toate cautarile de tip caracter sunt case-sensitiv. In exemplul urmator, nu este returnata nici o linie deoarece tabela EMP contine toate datele in majuscule.


SQL> SELECT ename, empno, job, deptno

2 FROM emp

3 WHERE job=’clerk’;


Oracle retine datele intr-un format numeric intern, reprezentand secol, an, luna, zi, ore, minute si secunde. Afisarea implicita a datei este DD-MON-YY.

Nota: schimbarea formatului implicit va fi explicat in capitolul 3.

Valorile numerice nu sunt incluse intre apostrofuri.


Operatori de comparatie


Operator

Comentariu


Egal cu

>

Mai mare decat

>=

Mai mare sau egal

<

Mai mic decat

<=

Mai mic sau egal

<>

Diferit de


Operatori de comparatie:

Operatorii de comparatie sunt folositi in conditiile care compara doua expresii. Acestia sunt folositi in clauza WHERE in urmatorul format:


Sintaxa:

- WHERE expresie operator valoare


Exemple:

- WHERE hiredate=’01-JAN-95’

- WHERE sal>=

- WHERE ename=’SMITH’

Folosirea operatorilor de comparatie


SQL> SELECT ename, sal, com

2 FROM emp

3 WHERE sal<=comm;


ENAME

SAL

COMM

MARTIN




Folosirea operatorilor de comparatie:

In exemplul de mai sus SELECT-ul returneaza numele, salariul si comisionul din tabela EMP, unde salariul angajatului este mai mic sau egal decat valoarea comisionului. De retinut ca nu este o valoare explicita in clauza WHERE. Cele doua valori comparate sunt luate din coloanele SAL, respectiv COMM din tabela EMP.




Operator

Semnificatie

BETWEEN

. AND .


Intre doua valori (inclusiv)

IN(lista)

Potriveste orice valoare din lista

LIKE

Potriveste un tip de caracter

IS NULL

Este o valoare nula


Folosirea operatorului BETWEEN


Operatorul BETWEEN  se foloseste la afisarea valorilor dintr-un interval.


SQL> SELECT ename, sal

2 FROM emp

3 WHERE sal BETWEEN 1000 AND 1500;



Limita Limita

inferioara superioara


ENAME

SAL

MARTIN

TURNER

WARD

ADAMS

MILLER








Operatorul BETWEEN:

Liniile pot fi afisate bazandu-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 intre 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

MGR





FORD

SMITH

SCOTT

ADAMS









Operatorul IN:

Pentru a cauta valori intr-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 in lista de nume din clauza WHERE.


SQL> SELECT empno, ename, mgr, deptno

2 FROM emp

3 WHERE ename IN (‘FORD’, ‘ALLEN’);


Daca in lista sunt folosite caractere sau date, acestea trebuiesc incluse intre apostrofuri (‘ ‘).


Folosirea operatorului LIKE


Operatorul LIKE se foloseste pentru a efectua cautari cu caractere wildcard in siruri valide de cautare.

Conditiile cautarii pot contine fie caractere literale, fie numere

% inseamna zero sau mai multe caractere

inseamna un singur caracter


SQL> SELECT ename

2 FROM emp

3 WHERE ename LIKE ‘S%’;


Operatorul LIKE:

Nu intotdeauna 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 incepe cu “S”. Numele  care incep cu “s” nu vor fi returnate.

Operatorul LIKE poate fi folosit ca scurtatura pentru cateva comparatii facute cu BETWEEN. Urmatorul exemplu afiseaza numele si data angajarii, angajati intre ianuarie 1981 si decembrie 1981.


SQL> SELECT ename, hiredate

2 FROM emp

3 WHERE hiredate LIKE ‘%81’;


Folosirea operatorului LIKE


Pot fi combinate diferite tipuri de potriviri pe caracter


SQL> SELECT ename

2 FROM emp

3 WHERE ename LIKE ‘_A%’:


ENAME


JAMES

WARD


Se poate folosi identificatorul ESCAPE pentru a cauta caracterele “%” si “_”.


Combinari de caractere wildcard:

Simbolurile % si _ pot fi folosite in orice combinatie cu caracterele literale. Exemplul de mai sus afiseaza numele tuturor angajatilor care au al doilea caracter “A”.


Optiunea ESCAPE:

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


SQL> SELECT ename

2 FROM emp

3 WHERE ename LIKE ‘%A_%B’ ESCAPE ‘’;


Optiunea ESCAPE identifica caracterul backslash ( ) ca fiind caracter ESCAPE. In tipar caracterul ESCAPE precedeaza caracterul underscore (_). Acest lucru face ca Oracle sa interpreteze caracterul underscore literal.


Folosirea operatorului IS NULL


Testarea valorilor nule cu operatorul IS NULL

SQL> SELECT ename, mgr

2 FROM emp

3 WHERE mgr IS NULL;


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:


SQL> SELECT ename, job, comm

2 FROM emp

3 WHERE comm IS NULL


ENAME

JOB

COMM

KING

BLAKE

CLARK

PRESIDENT

MANAGER

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. In SQL sunt disponibili trei operatori logici:

AND

OR

NOT

Toate exemplele de pana acum au specificat conditii numai in clauza WHERE. Se pot folosi cateva conditii intr-o clauza WHERE folosind operatorii AND si OR.


Folosirea operatorului AND


AND cere ca ambele conditii sa fie adevarate.


SQL> SELECT empno, ename, job, sal

2 FROM emp

3 WHERE sal>=1100

4 AND job=’CLERK’;




EMPNO

ENAME

JOB

SAL



ADAMS

MILLER

CLERK

CLERK




Operatorul AND:

In exemplul de mai sus ambele conditii trebuie sa fie adevarate pentru a fi selectata vreo inregistrare. De acea un angajat care are este CLERK si castiga 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 intre apostrofuri.




Tabela de adevar a operatorului AND:

Tabela urmatoare arata rezultatul combinarii a doua expresii cu AND:


AND

TRUE

FALSE

UNKNOWN

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

ENAME

JOB

SAL







KING

BLAKE

CLARK

JONES

MARTIN

PRESIDENT

MANAGER

MANAGER

MANAGER

SALESMAN







Operatorul OR:

In exemplul de mai sus, oricare din conditii poate fi adevarata pentru a fi selectata vreo inregistrare. De aceea un angajat care are slujba de CLERK sau castiga 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’);


ENAME

JOB


KING

MARTIN

ALLEN

TURNER

WARD

PRESIDENT

SALESMAN

SALESMAN

SALESMAN

SALESMAN


Operatorul NOT:

In 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

UNKNOWN


FALSE

TRUE

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

Operator


Toti operatorii de comparatie


NOT


AND


OR


Precedenta regulilor se poate schimba folosind paranteze.


Reguli de precedenta


SQL> SELECT ename, job, sal

2 FROM emp

3 WHERE job=’SALESMAN’

4 OR job=’PRESIDENT’

5 AND sal>=1500;


ENAME

JOB

SAL


KING

MARTIN

ALLEN

TURNER

WARD

PRESIDENT

SALESMAN

SALESMAN

SALESMAN

SALESMAN








Exemplu de precedenta a operatorului AND:

In exemplul de mai sus sunt doua conditii:

Prima conditie este ca slujba sa fie PRESIDENT si salariul sa fie mai mare de 1500.

A doua conditie este ca slujba sa fie SALESMAN.

De aceea SELECT-ul citeste dupa cum urmeaza:

“Selecteaza linia daca un angajat este PRESIDENT si castiga mai mult de 1500 sau daca angajatul este SALESMAN.”


Reguli de precedenta


Folosirea parantezelor pentru a forta prioritatea


SQL> SELECT ename, job, sal

2 FROM emp

3 WHERE (job=’ SALESMAN’

4 OR job=’PRESIDENT’)

5 AND sal>1500;


ENAME

JOB

SAL


KING

ALLEN

PRESIDENT

SALESMAN




Folosirea parantezelor:

In 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 castiga mai mult de 1500.”


Clauza ORDER BY


Selecteaza liniile cu clauza ORDER BY

ASC: in ordine ascendenta, implicit

DESC: in ordine descendenta

Clauza ORDER BY este ultima in SELECT.


SQL> SELECT ename, job, deptno, hiredate

2 FROM emp

3 ORDER BY hiredate;


ENAME

JOB

DEPTNO

HIREDATE


SMITH

ALLEN


CLERK

SALESMAN



17-DEC-80

20-FEB-81


Clauza ORDER BY:

Ordinea liniilor returnate de o interogare nu este definita. clauza ORDER BY poate fi folosita pentru a sorta liniile. Daca este folosita trebuie pusa ultima. Se poate specifica sortarea dupa o expresie sau dupa un alias.

Sintaxa:

SELECT expresie

FROM table

[WHERE condition(s)]

[ORDER BY [ASC|DESC];


unde:              ORDER BY                   specifica ordinea in 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 in aceeasi ordine, pentru aceeasi interogare, de doua ori. Folositi clauza ORDER BY pentru a afisa liniile intr-o ordine specifica.


Sortarea in ordine descendenta


SQL> SELECT ename, job, deptno, hiredate

2 FROM emp

3 ORDER BY hiredate DESC;


ENAME

JOB

DEPTNO

HIREDATE


ADAMS

SCOTT

MILLER

JAMES

FORD

KING

MARTIN


CLERK

ANALYST

CLERK

CLERK

ANALYST

PRESIDENT

SALESMAN








12-JAN-83

09-DEC-82

23-JAN-82

03-DEC-81

03-DEC-81

17-NOV-81

28-SEP-81



Ordonarea implicita a datelor:

Ordinea implicita a sortarii datelor este cea ascendenta:

Valorile numerice sunt afisate incepand cu cea mai mica valoare – de exemplu 1- 999.

Datele sunt afisate incepand cu cea mai timpurie – de exemplu 01-JAN-92 inaintea lui 01-JAN-95.

Valorile tip caracter sunt afisate in ordine alfabetica – de exemplu A inaintea lui Z.

Valorile nule sunt afisate ultimele pentru secvente ascendente si primele pentru secvente descendente.


Inversarea ordinii implicite:

Pentru a inversa ordinea in care sunt afisate liniile trebuie specificat cuvantul cheie DESC dupa numele coloanei in clauza ORDER BY. In exemplul de mai sus rezultatele sunt sortate dupa cei mai recenti angajati dintre salariati.



Sortarea dupa aliasul coloanei



SQL> SELECT empno, ename, sal*12 annsal

2 FROM emp

3 ORDER BY annsal;





EMPNO

ENAME

ANNSAL










SMITH

JAMES

ADAMS

MARTIN

WARD

MILLER

TURNER









Sortarea dupa aliasul coloanei:

Se poate folosi alias al unei coloane in clauza ORDER BY. In exemplul de mai sus datele sunt sortate dupa salariul anual.


Sortarea dupa mai multe coloane


Ordinea listei facuta de clauza ORDER BY este ordinea sortarii.

SQL> SELECT ename, deptno, sal

2 FROM emp

3 ORDER BY deptno, sal, DESC;


ENAME

DEPTNO

SAL


KING

CLARK

MILLER

FORD











Se poate face sortare si dupa o coloana care nu este in lista SELECT-ului.


Sortarea dupa mai multe coloane:

Rezultatele interogarii pot fi sortate dupa mai multe coloane. Limita sortarii este data de numarul de coloane din tabela respectiva.

In clauza ORDER BY trebuiesc specificate coloanele si separate prin virgule. Daca se doreste schimbarea ordinii afisarii unei coloane se specifica DESC dupa numele coloanei respective. Se poate ordona dupa coloane care nu sunt incluse in SELECT-ul respectiv.

Exemplu:

Sa se afiseze numele si salariul tuturor angajatilor. Rezultatele sa se afiseze dupa numarul departamentului si dupa aceea in ordine descrescatoare dupa salariu:


SQL> SELECT ename, sal

2 FROM emp

3 ORDER BY deptno, sal DESC;





REZUMAT


SELECT       [DISTINCT]

FROM tabela

[WHERE       conditie(s)]

[ORDER BY [ASC|DESC]];


Sumar:

In aceasta lectie s-a invatat despre restrictionarea si sortarea liniilor returnate de un SELECT. De asemenea s-ai invatat cum se implementeaza diversi operatori.


Sumarul temei

Selectarea datelor si schimbarea ordinii linilor afisate

Restrictionarea liniilor folosind clauze WHERE

Folosirea ghilimelelor in aliasul coloanelor



Practica:

Aceasta tema va ofera o varietate de exercitii ce folosesc clauze WHERE si clauze ORDER BY.


Afisati numele si salariul angajatilor care castiga mai mult de 2850$. Salvati instructiunea SQL intr-un fisier p1.sql si apoi rulati-l.

Afisati numele angajatului cu marca 7566 precum si numarul departamentului in care lucreaza.

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.

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.

Afisati numele angajatilor si numerele de departament ale celor care muncesc in departamentele 10 si 30, ordonati alfabetic dupa nume.

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.

Afisati numele si data angajarii pentru cei care au fost angajati in 1982.

Afisati numele si meseria pentru angajatii care nu au manager.

Afisati numele, salariul si comisionul pentru oti angajatii care au comision. Sortati datele in ordine descendenta dupa salariu si comision.

Afisati numele angajatilor care au a treia litera a numelui ‘A’.

Afisati numele angajatilor care au 2 de ‘L’ in numele lor si sunt din departamentul 30 sau au manager cu marca 7782.

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

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.




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright