Sentencia LIMIT existe en oracle, MySQL y postgresql

La Sentencia LIMIT existe en oracle, MySQL y postgresql.

Todos sabemos que MySQL tiene una sentencia limit:

SELECT * FROM emp LIMIT 0, 30;

En postgresql es al revés:

SELECT * FROM emp LIMIT 30, 0;

Pues bien, oracle, como no iba a ser menos, también la tiene:

SELECT FROM emp WHERE rownum < 100;
SELECT FROM emp WHERE rownum > 100 AND rownum < 200;
SELECT * FROM emp WHERE rownum BETWEEN 100 AND 200

Pongo a continuación los comentarios que no se verñian de otro modo al migrar el blog.


OracleUSer 27 marzo, 2008, 04:29 no funciona asi, si utilizas order by:(


Jose Sanchez 27 marzo, 2008, 21:46 Mirando la página de oracle lo tienes aquí con order by:

select *
from
( select *
from emp
order by sal desc )
where ROWNUM <= 5;

http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html (enlace no funciona)


Broda Noel 10 mayo, 2012, 14:32 Gente,
Esto no funciona, porque ROWNUM tendría que «no cambiar de orden» en caso que se ordene.
Si se hace un ORDERBY, los valores ROWNUM de cada registro sigue siendo el mismo, ya que es algo así como el numero de registro en la tabla, el cual nunca cambia.
De esa forma es totalmente imposible ordenar.

O sea, prueben esto:
Hagan un Query buscando PERSONAS, ordenenlo por APELLIDO ASC. Anoten que registros les trae. Luego ordenenlo por APELLIDO DESC y verán que trae lo mismo, siendo que debería traer otra cosa muy diferente a lo que debería traer. Se pierde el orden.
No prueben con 100 y 200, prueben con valores muy pequeños


Jose 10 mayo, 2012, 14:53 Estimado Broda, en el artículo no hablo del order by, sólo en un comentario posterior sacado de la web de oracle, un ejemplo que no he probado por cierto.

Si quieres solucionar tu problema vas a tener que seguir probado y buscando 🙂