Baze de date
Restrictionarea si sortarea datelorRestrictionarea 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
EMP
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.
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:
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’
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.
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
Operatori de comparatie: Operatorii de comparatie sunt folositi in conditiile care compara doua expresii. Acestia sunt folositi in clauza WHERE in urmatorul format: Sintaxa:
Exemple:
Folosirea operatorilor de comparatie
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.
Folosirea operatorului BETWEEN Operatorul BETWEEN se foloseste la afisarea valorilor dintr-un interval.
Limita Limita inferioara superioara
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.
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.
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
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.
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.
Folosirea operatorului LIKE Pot fi combinate diferite tipuri de potriviri pe caracter
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:
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
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:
Operatori logici
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.
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:
Folosirea operatorului OR OR cere ca una din conditii sa fie adevarata.
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:
Folosirea operatorului NOT
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:
Nota: de asemenea operatorul NOT poate fi folosit cu alti operatori SQL cum ar fi BETWEEN, LIKE si NULL.
Reguli de precedenta
Precedenta regulilor se poate schimba folosind paranteze. Reguli de precedenta
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
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.
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:
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
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
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.
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:
REZUMAT
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.
|