Cómo Seleccionar la n-ésima Fila
en una Tabla de Base de Datos SQL
Cuando trabajas con datos en una base de datos, puede que necesites seleccionar un ítem específico, como la n-ésima fila
en una tabla. Sin embargo, diferentes bases de datos tienen formas ligeramente variadas de lograr esto, y aprender a hacerlo en múltiples sistemas SQL puede ser increíblemente útil. En esta publicación de blog, exploraremos enfoques agnósticos a bases de datos así como soluciones específicas para bases de datos SQL populares como SQL Server, MySQL, PostgreSQL, SQLite y Oracle.
Enfoque Agnóstico a Bases de Datos
Antes de profundizar en los detalles de cada base de datos, comencemos con un método que puede considerarse más universal. Aunque algunas características pueden no ser compatibles en todas las plataformas SQL, existen estrategias generales que simplifican la selección de la n-ésima fila
.
Usando LIMIT y OFFSET (PostgreSQL y MySQL)
Para bases de datos como PostgreSQL y MySQL, puedes utilizar la siguiente sintaxis SQL:
SELECT ... LIMIT y OFFSET x
- LIMIT especifica cuántas filas deseas recuperar.
- OFFSET especifica desde qué punto deseas comenzar a recuperar filas.
Así que, por ejemplo, para seleccionar la décima fila, harías:
SELECT * FROM tablename LIMIT 1 OFFSET 9;
Esta sintaxis es útil para paginar datos o, como en nuestro caso, obtener una fila específica.
Soluciones Específicas para Bases de Datos
SQL Server
Con SQL Server, especialmente versiones anteriores a SQL Server 2012, puedes utilizar funciones de ventana para lograr resultados similares. Aquí te mostramos cómo hacerlo usando un ejemplo común:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders
)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000;
- ROW_NUMBER() genera un número secuencial para las filas en el conjunto de resultados basado en el orden especificado.
- Ajusta
WHERE RowNumber = 1000000
para especificar qué fila recuperar.
PostgreSQL y SQLite (Versión 3.25.0+)
A partir de PostgreSQL 8.4, se admiten las funciones de ventana estándar, lo que te permite usar un enfoque similar al de SQL Server:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
- Reemplaza
n
con el número de fila deseado. Esta estructura seguirá funcionando de manera efectiva en SQLite a partir de la versión 3.25.0.
Oracle y DB2
Para Oracle y DB2, también admiten funciones de ventana. La sintaxis es similar a la de PostgreSQL:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
FROM tablename
) AS foo
WHERE rownumber <= n;
El uso de ROW_NUMBER()
garantiza que puedas acceder a filas específicas basadas en el orden que defines.
Conclusión
Seleccionar la n-ésima fila
de una base de datos SQL es una tarea común que puede ser abordada de diversas maneras dependiendo de la base de datos que se esté utilizando. Entender las diferentes sintaxis y métodos te permite trabajar de manera más efectiva en diferentes sistemas. Ya sea que estés consultando en SQL Server, MySQL, PostgreSQL, SQLite u Oracle, ahora tienes las herramientas necesarias para obtener las filas exactas que necesitas.
Para más lecturas, siempre puedes consultar detalles más intrincados sobre técnicas de consulta SQL en el sitio web de Troels Arvin. ¡Feliz consulta!