En este artículo, exploraremos el concepto de las consultas SELECT TOP de SQL y cómo se pueden utilizar para limitar el conjunto de resultados de una consulta. También proporcionaremos ejemplos para reforzar el aprendizaje.
Introducción
La cláusula TOP en SQL Server nos permite limitar el número de filas devueltas por una consulta. Se puede utilizar para recuperar un número específico de filas o un porcentaje de filas de una tabla. La cláusula TOP se utiliza a menudo en conjunto con la cláusula ORDER BY para asegurar un cierto orden del conjunto de resultados.
Sintaxis
La sintaxis de la cláusula TOP es la siguiente:
SELECT TOP (expresión) [PORCENTAJE] [CON LAZOS] FROM nombre_tabla
El parámetro expresión
define cuántas filas se devuelven de la consulta. Por ejemplo, para recuperar las primeras 10 filas de una tabla, podemos establecer la expresión como 10.
Ejemplos
Veamos algunos ejemplos para entender cómo funciona la cláusula TOP.
Ejemplo 1: Recuperar un número específico de filas
SELECT TOP (5) Nombre, NumeroProducto, CostoEstandar FROM Produccion.Producto;
En este ejemplo, recuperamos 5 filas aleatorias de la tabla Producto.
Ejemplo 2: Recuperar un porcentaje de filas
SELECT TOP (20) PORCENTAJE Nombre, NumeroProducto, CostoEstandar FROM Produccion.Producto;
En este ejemplo, recuperamos el 20 por ciento de las filas de la tabla Producto.
Ejemplo 3: Utilizar la palabra clave CON LAZOS
SELECT TOP (1) CON LAZOS Nombre, NumeroProducto, CostoEstandar FROM Produccion.Producto ORDER BY CostoEstandar DESC;
La palabra clave CON LAZOS nos permite incluir filas en el conjunto de resultados que tienen el mismo valor que la última fila. En este ejemplo, la consulta devolverá todas las filas que tienen el mismo costo que el producto de mayor costo.
Utilizando Variables con la Cláusula TOP
También podemos utilizar variables con la cláusula TOP para establecer dinámicamente el número de filas que se devolverán. Aquí tienes un ejemplo:
DECLARE @Val AS INT SET @Val = 3 SELECT TOP (@Val) Nombre, NumeroProducto, CostoEstandar FROM Produccion.Producto ORDER BY CostoEstandar DESC;
En este ejemplo, asignamos un valor a la variable @Val
y la consulta devolverá las primeras @Val
filas que coincidan con el valor asignado.
Utilizando TOP con las Sentencias UPDATE y DELETE
La cláusula TOP también se puede utilizar con las sentencias UPDATE y DELETE para limitar el número de filas afectadas por la operación.
Sentencia UPDATE
UPDATE TOP (10) Produccion.ListaColoresProducto SET Color = 'Rosa';
En este ejemplo, la sentencia de actualización solo afectará a las primeras 10 filas de la tabla ListaColoresProducto.
Sentencia DELETE
DELETE TOP (1) FROM Produccion.ListaColoresProducto;
En este ejemplo, se eliminará una fila aleatoria de la tabla ListaColoresProducto.
Comparación con SET ROWCOUNT y ROW_NUMBER
Existen formas alternativas de lograr resultados similares a la cláusula TOP.
SET ROWCOUNT
La opción SET ROWCOUNT limita el número de filas devueltas por una consulta. Sin embargo, es importante tener en cuenta que no considera el optimizador de consultas y puede tener un peor rendimiento en comparación con la cláusula TOP.
SET ROWCOUNT 4 SELECT Nombre, NumeroProducto, CostoEstandar FROM Produccion.Producto;
En este ejemplo, la consulta procesará todo el conjunto de resultados pero solo devolverá 4 filas.
Función ROW_NUMBER
La función ROW_NUMBER asigna números temporales al conjunto de resultados de una consulta. Se puede utilizar como alternativa a la cláusula TOP.
SELECT * FROM ( SELECT Nombre, NumeroProducto, CostoEstandar, ROW_NUMBER() OVER (ORDER BY CostoEstandar DESC) AS RN FROM Produccion.Producto ) AS TMP_TBL WHERE RN <= 4;
En este ejemplo, la consulta devolverá las primeras 4 filas de la tabla Producto.
Conclusión
En este artículo, hemos discutido las consultas SELECT TOP de SQL y cómo se pueden utilizar para limitar el conjunto de resultados de una consulta. También hemos explorado algunas alternativas a la cláusula TOP. Comprender la cláusula TOP es esencial para controlar el número de filas devueltas por una consulta y optimizar el rendimiento de la consulta.