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.