И dcw, и Dems предоставиха подходящи алтернативни заявки. Просто исках да добавя обяснение защо заявката ви не се държи по начина, по който очаквахте.
Ако имате заявка, която включва ROWNUM и ORDER BY, Oracle прилага първо ROWNUM и след това ORDER BY. Така че заявката
SELECT *
FROM emp
WHERE rownum <= 5
ORDER BY empno
получава произволни 5 реда от EMP
таблица и ги сортира - почти сигурно не това, което е било предназначено. Ако искате да получите "първите N" реда, използвайки ROWNUM, ще трябва да вложите заявката. Тази заявка
SELECT *
FROM (SELECT *
FROM emp
ORDER BY empno)
WHERE rownum <= 5
сортира редовете в таблицата EMP и връща първите 5.