CATEGORII DOCUMENTE |
Ati fost probabil destul de des in situatia de a trebui sa ordonati anumite date pe baza unor criterii orarecare. Imaginati-va cam ce ar insemna sa cautati numarul de telefon al unei persoane intr-o carte de telefoane in care persoanele sunt trecute intr-o ordine aleatoare, nu ordonate alfabetic asa cum suntem noi obisnuiti.
Pentru a preciza criteriile dupa care se ordoneaza datele folosim clauza ORDER BY. In aceasta clauza se vor preciza coloanele sau expresiile dupa care se vor ordona liniile unei tabele inainte de a fi afisate.
De exemplu, afisarea datelor din tabela persoane in ordine alfabetica (crescatoare) a localitatii se face folosind comanda:
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Ionescu |
Gheorghe |
Brasov | ||||
Bischin |
Paraschiva |
Brasov | ||||
Popescu |
Ioan |
Bucuresti | ||||
Vasilescu |
Vasile |
Cluj-Napoca | ||||
Georgescu |
Maria |
Iasi | ||||
Olaru |
Angela |
Ploiesti | ||||
Marinescu |
Angela |
Sibiu | ||||
Antonescu |
Elena |
Sibiu |
SELECT * FROM persoane Tabelul II.1.16.
ORDER BY localitate
Se observa ca exista mai multe persoane din aceeasi localitate. Daca vrem ca persoanele din aceeasi localitate sa fie ordonate descrescator dupa salariu scriem:
SELECT * FROM persoane
ORDER BY localitate, salariu DESC
optiunea DESC precizeaza ca sortarea se face descrescator. Pentru a sorta crescator se poate preciza acest lucru cu optiunea ASC, dar aceasta este optionala deoarece implicit datele sunt sortate crescator.
Rezultatul rularii comenzii anterioare este cel din tabelul II.1.17.
Tabelul II.1.17.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Bischin |
Paraschiva |
Brasov | ||||
Ionescu |
Gheorghe |
Brasov | ||||
Popescu |
Ioan |
Bucuresti | ||||
Vasilescu |
Vasile |
Cluj-Napoca | ||||
Georgescu |
Maria |
Iasi | ||||
Olaru |
Angela |
Ploiesti | ||||
Marinescu |
Angela |
Sibiu | ||||
Antonescu |
Elena |
Sibiu |
Haideti sa sortam acum tabela persoane dupa codul firmei. Vom scrie:
SELECT * FROM persoane ORDER BY firma
Rularea acestei comenzi duce la afisarea tabelului II.1.18. Sa observam ca Marinescu Angela, deoarece nu are completat codul firmei (valoarea coldlui firmei este null) a fost afisata ultima. Asadar la ordonarea crescatoare (implicita) valorile nule se trec la sfarsit, in timp ce la sortarea descrescatoare valorile nule apar la inceput.
Tabelul II.1.18.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Antonescu |
Elena |
Sibiu | ||||
Popescu |
Ioan |
Bucuresti | ||||
Vasilescu |
Vasile |
Cluj-Napoca | ||||
Ionescu |
Gheorghe |
Brasov | ||||
Bischin |
Paraschiva |
Brasov | ||||
Olaru |
Angela |
Ploiesti | ||||
Georgescu |
Maria |
Iasi | ||||
Marinescu |
Angela |
Sibiu |
Comanda
SELECT * FROM persoane
ORDER BY firma DESC
va face ca Marinescu Angela sa fie afisata prima (tabelul II.1.19).
Tabelul II.1.19.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Marinescu |
Angela |
Sibiu | ||||
Georgescu |
Maria |
Iasi | ||||
Ionescu |
Gheorghe |
Brasov | ||||
Olaru |
Angela |
Ploiesti | ||||
Bischin |
Paraschiva |
Brasov | ||||
Vasilescu |
Vasile |
Cluj-Napoca | ||||
Antonescu |
Elena |
Sibiu | ||||
Popescu |
Ioan |
Bucuresti |
In criteriile de ordonare pot sa apara si expresii nu doar coloane din tabela interogata. Astfel putem scrie:
SELECT * FROM persoane ORDER BY prenume || nume
reztatul fiind cel din tabelul II.1.20.
De asemenea putem preciza ca sortarea sa se faca dupa o expresie care apare in clauza SELECT prin indicarea pozitiei expresiei respective in lista de expresii din clauza SELECT. Astfel comanda
SELECT nume, prenume, salariu
FROM persoane ORDER BY 3 DESC
va sorta descrescator liniile dupa salariu, deoarece in caluza SELECT, salariu este a treia expresie (Atentie! In tabela persoane salariul este coloana a 7-a):
Tabelul II.1.20.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Antonescu |
Elena |
Sibiu | ||||
Bischin |
Paraschiva |
Brasov | ||||
Georgescu |
Maria |
Iasi | ||||
Ionescu |
Gheorghe |
Brasov | ||||
Marinescu |
Angela |
Sibiu | ||||
Olaru |
Angela |
Ploiesti | ||||
Popescu |
Ioan |
Bucuresti | ||||
Vasilescu |
Vasile |
Cluj-Napoca |
Tabelul II.1.21.
NUME |
PRENUME |
SALARIU |
Marinescu |
Angela | |
Olaru |
Angela | |
Popescu |
Ioan | |
Vasilescu |
Vasile | |
Georgescu |
Maria | |
Antonescu |
Elena | |
Ionescu |
Gheorghe | |
Bischin |
Paraschiva |
Mai mult in clauza ORDER BY putem folosi aliasul unei coloane ca in exemplul urmator:
SELECT nume||' '||prenume AS 'Nume si prenume', salariu
FROM persoane
ORDER BY 'Nume si prenume'
rezultatul fiind cel din tabelul II.1.22.
Desigur clauzele WHERE si ORDER BY pot aparea impreuna in aceeasi comanda, ordinea in care acestea apar fiind WHERE si apoi ORDER BY, aceasta fiind si ordinea in care sunt executate: mai intai sunt selectate liniile care trebuie sa fie afisate si abia apoi sunt sortate conform criteriului stabilit prin clauza ORDER BY. De exemplu, pentru a afisa in ordine descrescatoare a salariilor doar persoanele din Brasov si Sibiu scriem:
SELECT * FROM persoane
WHERE localitate IN ('Sibiu', 'Brasov')
ORDER BY salariu DESC
rezultatul rularii acestei comenzi fiind cel din tabelul II.1.23.
Tabelul II.1.22.
Nume si prenume |
SALARIU |
Antonescu Elena | |
Bischin Paraschiva | |
Georgescu Maria | |
Ionescu Gheorghe | |
Marinescu Angela | |
Olaru Angela | |
Popescu Ioan | |
Vasilescu Vasile |
Tabelul II.1.23.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Marinescu |
Angela |
Sibiu | ||||
Antonescu |
Elena |
Sibiu | ||||
Ionescu |
Gheorghe |
Brasov | ||||
Bischin |
Paraschiva |
Brasov |
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2013
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved