TOP

SQL TOP, LIMIT, FETCH FIRST y ROWNUM

SQL SELECT TOP Descripción

La expresión SELECT TOP se utiliza para especificar el número de registros a seleccionar.

SQL SELECT TOP es útil para tablas grandes con miles de registros, ya que devolver una gran cantidad de registros puede afectar el rendimiento del sistema.


No todos los sistemas de bases de datos admiten la expresión SELECT TOP. MySQL admite la expresión LIMIT para seleccionar un número limitado de registros, mientras que Oracle usa FETCH FIRST n ROWS SOLAMENTE y ROWNUM.

SQL Server / MS Access Sintaxis:

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition

MySQL Sintaxis:

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number

Oracle 12 Sintaxis:

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY

Sintaxis Oracle obsoleta:

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

Sintaxis Oracle obsoleta (con ORDER BY):

SELECT *
FROM (SELECT column_name(s) FROM table_name ORDER BY column_name(s))
WHERE ROWNUM <= number

Base de datos de demostración

El siguiente es un ejemplo de la tabla "Customers" ("Clientes") de la base de datos "Northwind":

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.5021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.5023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Ejemplos de SQL TOP, LIMIT y FETCH FIRST

La siguiente instrucción SQL selecciona los primeros tres registros de la tabla "Customers" (para SQL Server/MS Access):

SELECT TOP 3 * 
FROM Customers

La siguiente declaración SQL muestra un ejemplo equivalente para MySQL:

Run SQLSELECT * 
FROM Customers 
LIMIT 3

La siguiente declaración SQL muestra un ejemplo equivalente para Oracle:

SELECT * 
FROM Customers 
FETCH FIRST 3 ROWS ONLY

SQL TOP PORCENTAJE Ejemplo

La siguiente instrucción SQL selecciona el primer 50% de los registros de la tabla "Customers" (para SQL Server/MS Access):

SELECT TOP 50 PERCENT * 
FROM Customers

La siguiente declaración SQL muestra un ejemplo equivalente para Oracle:

SELECT * 
FROM Customers 
FETCH FIRST 50 PERCENT ROWS ONLY

Usando la expresión WHERE

La siguiente instrucción SQL selecciona los primeros tres registros de la tabla "Customers" donde el país es "Germany" (para SQL Server/MS Access):

SELECT TOP 3 * 
FROM Customers 
WHERE Country = 'Germany'

La siguiente declaración SQL muestra un ejemplo equivalente para MySQL:

Run SQLSELECT * 
FROM Customers 
WHERE Country = 'Germany' 
LIMIT 3

La siguiente declaración SQL muestra un ejemplo equivalente para Oracle:

SELECT * 
FROM Customers 
WHERE Country = 'Germany' 
FETCH FIRST 3 ROWS ONLY