SQL SELECT TOP, LIMIT, FETCH FIRST

La cláusula SELECT TOP en SQL se usa para especificar el número de registros a devolver.

La cláusula SELECT TOP es útil en tablas grandes con miles de registros. Se suele utilizar para revisar una muestra de valores y no hacer una consulta que devuelva miles de registros y tarde demasiado en cargar los datos, y así evitar también que afecte al rendimiento.


Sintaxis SELECT TOP

Ten en cuenta que la cláusula TOP es específica de SQL Server y no está disponible en todas las bases de datos. En otras bases de datos como MySQL, PostgreSQL o SQLite, se utiliza la cláusula LIMIT para lograr el mismo resultado:

No todos los sistemas de bases de datos admiten la cláusula SELECT TOP. MySQL admite la cláusula LIMIT para seleccionar un número limitado de registros, mientras que Oracle usa ROWNUM.

SELECT TOP en SQL Server / MS Access Sintaxis

SELECT TOP numero|PERCENT nombre_columna(s)
FROM nombre_tabla
WHERE condicion;

LIMIT en MySQL Sintaxis

SELECT nombre_columna(s)
FROM nombre_tabla
WHERE condicion
LIMIT numero;

FETCH FIRST en Oracle 12 Sintaxis

SELECT nombre_columna(s)
FROM nombre_tabla
ORDER BY nombre_columna
FETCH FIRST número ROWS ONLY;

SELECT TOP con la cláusula WHERE

La siguiente instrucción SQL selecciona los primeros tres registros de la tabla “Clientes”, donde el país es “España”:

SELECT TOP 3 * 
FROM Clientes
WHERE Pais='España';

En este caso, la consulta selecciona los primeros 3 registros de la tabla «Clientes» donde el valor de la columna «Pais» es igual a «España». La consulta devuelve todas las columnas (* indica todas las columnas) para los registros que cumplen con la condición especificada.


SELECT TOP PERCENT (Con Porcentaje)

La siguiente instrucción SQL selecciona el primer 30% de los registros de la tabla “Clientes” para los registros que en la columna «Pais» son «España»:

SELECT TOP 30 PERCENT 
FROM Clientes
WHERE Pais='España';

LIMIT en MySQL

Supongamos que tenemos una tabla llamada Clientes con las columnas id, nombre, apellido y edad, y queremos obtener solo los 5 primeros registros:

SELECT *
FROM ClientesLIMIT 5;

Esta consulta devolverá los primeros 5 registros de la tabla Clientes.

FETCH FIRST n ROWS ONLY en Oracle

Supongamos que tenemos una tabla llamada Empleados con las columnas id, nombre, salario y queremos obtener los 5 empleados con los salarios más altos:

SELECT id, nombre, salario
FROM Empleados
ORDER BY salario DESC
FETCH FIRST 5 ROWS ONLY;

Esta consulta devolverá los 5 empleados con los salarios más altos de la tabla Empleados, ordenados de mayor a menor salario.