Para limitar el número de filas devueltas en SQL Server hacemos lo siguiente:
SELECT TOP 5, * FROM tabla ORDER BY columna_sueldo;
En MySQL es también muy sencillo:
SELECT * FROM tabla ORDER BY columna_sueldo LIMIT 5;
lo que hacen ambas consultas es primero ordenar las filas según el campo indicado (columna_sueldo) y luego mostrarme los 5 primeros campos, si omitimos el order by primero seleccionará las filas en su orden natural y luego nos devolverá los primeros 5 campos.
En Oracle hacemos lo siguiente:
SELECT * FROM tabla WHERE rownum <= 5;
Esto hace lo segundo que mencionábamos en el párrafo anterior selecciona todas las filas y luego nos devuelve las 5 primeras según como lo ordeno.
Ahora si querríamos que nos muestre los 5 sueldos más altos en la tabla empleados por ejemplo pensaríamos en hacer lo siguiente:
SELECT * FROM tabla_Empleado WHERE rownum <= 5 ORDER BY columna_sueldo;
Pero si ejecutamos la consulta no nos devuelve los datos que esperábamos, ¿Qué paso?
Lo que paso fue que Oracle primero selecciono las 5 primeras filas y esas 5 primeras las ordeno según el sueldo, porque la sentencia WHERE siempre se ejecuta antes que ORDER BY. Entonces ¿Cómo solucionamos esto? pues con subconsultas aquí el código:
SELECT * FROM ( SELECT * FROM empleados ORDER BY sueldo) WHERE rownum <= 5;
Explicación del código:
En esta consulta lo primero que se va a ejecutar va a ser la subconsulta, con esto aseguramos que nos ordene las filas según el sueldo y luego se ejecutará el WHERE que nos seleccionará las primeras 5 columnas.
Como siempre las Sistemas de Gestión de Bases de Datos al igual que muchas otras tecnologías haciendo las cosas como mejor les parezca sin estandarizar las cosas nos terminan complicando a nosotros.