CATEGORII DOCUMENTE |
La sfarsitul anului scolar, dirigintele clasei va roaga sa-l ajutati sa afle care sunt primii trei elevi din clasa, in ordinea descrescatoare a mediei generale, pentru a sti cui sa dea premiile. Asadar se pune problema ca la afisarea datelor dintr-o tabela sa afisati doar primele n linii.
Pentru aceasta veti avea nevoie de pseudocoloana ROWNUM care returneaza numarul de ordine al unei linii intr-o tabela. De exemplu comanda urmatoare va afisa codul, numele si prenumele persoanelor impreuna cu numarul de ordine al acestora in tabela persoane
SELECT cod, nume, prenume, rownum
FROM persoane
rezultatul este cel din tabelul urmator:
Tabelul II.1.24.
COD |
NUME |
PRENUME |
ROWNUM |
Ionescu |
Gheorghe | ||
Georgescu |
Maria | ||
Marinescu |
Angela | ||
Antonescu |
Elena | ||
Bischin |
Paraschiva | ||
Olaru |
Angela | ||
Vasilescu |
Vasile | ||
Popescu |
Ioan |
Desi ne-am astepta ca intr-o comanda SELECT care foloseste clauza ORDER BY ROWNUM sa ne afiseze numarul de ordine al inregistrarilor in ordinea data de ORDER BY, acest lucru nu se intampla, numarul de ordine fiind cel din tabela initiala. Observati in acest sens tabelul II.1.25 afisat la rularea comenzii urmatoare
select rownum, cod, nume, prenume,
localitate, firma, job, salariu
from persoane
order by salariu desc
Tabelul II.1.25.
ROWNUM |
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Marinescu |
Angela |
| |||||
Olaru |
Angela |
| |||||
Popescu |
Ioan |
Bucuresti | |||||
Vasilescu |
Vasile |
| |||||
Georgescu |
Maria |
| |||||
Antonescu |
Elena |
| |||||
Bischin |
Paraschiva |
| |||||
Ionescu |
Gheorghe |
|
Asadar daca dorim sa afisam primele 3 inregistrari din tabela initiala vom putea scrie simplu:
SELECT cod, nume, prenume, rownum
FROM persoane
WHERE ROWNUM<=3
afisandu-se rezultatul dorit (tabelul II.1.26.)
Tabelul II.1.26.
COD |
NUME |
PRENUME |
ROWNUM |
Ionescu |
Gheorghe | ||
Georgescu |
Maria | ||
Marinescu |
Angela |
insa, pentru a afisa persoanele cu cele mai mici trei salarii, comanda urmatoare nu afiseaza ceea ce am dori, deaorece Oracle prima data va returna primele trei inregistrari din tabela persoane si abia apoi le va sorta:
select rownum, cod, nume, prenume,
localitate, firma, job, salariu
from persoane
where rownum<=3
order by salariu desc
comanda aceasta afisand: Tabelul II.1.27.
ROWNUM |
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Marinescu |
Angela |
Sibiu | |||||
Georgescu |
Maria |
Iasi | |||||
Ionescu |
Gheorghe |
Brasov |
Pentru a obtine rezultatul dorit de noi vom folosi o subinterogare astfel
select *
from (select * from persoane
order by salariu)
where rownum<=3
In acest fel am fortat Oracle sa sorteze mai intai liniile si apoi sa afiseze primele trei linii din tabela obtinuta.
Tabelul II.1.28.
COD |
NUME |
PRENUME |
LOCALITATE |
FIRMA |
JOB |
SALARIU |
Ionescu |
Gheorghe |
Brasov | ||||
Bischin |
Paraschiva |
Brasov | ||||
Antonescu |
Elena |
Sibiu |
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1780
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved