sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo limitar filas en un conjunto de resultados de SQL Server

Problema:

Le gustaría limitar las filas en un conjunto de resultados de SQL Server.

Ejemplo:

Nuestra base de datos tiene una tabla llamada toy con datos en las columnas id , name y price .

id nombre precio
161 Bicicleta BMX 200,00
121 El robot Tobie 185,50
213 Juego de pesca 25,00
102 Rompecabezas de animales 45,80
111 Conjunto de pista de carreras 126,70
233 Ladrillos fáciles 21.00

Seleccionemos los nombres y precios de los juguetes. Pero solo necesitamos ver las primeras cinco filas.

Solución 1:

SELECT name, price
FROM toy
ORDER BY price
OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;

Este es el resultado de la consulta:

nombre precio
Ladrillos fáciles 21.00
Juego de pesca 25,00
Rompecabezas de animales 45,80
Conjunto de pista de carreras 126,70
El robot Tobie 185,50

Discusión:

Para limitar filas en el conjunto de resultados, use ORDER BY con las cláusulas opcionales OFFSET y FETCH. Primero, la consulta ordena las filas (ORDENAR POR). Luego le dice a SQL Server cuál debe ser la primera fila en el conjunto de resultados (OFFSET...ROWS) y cuántas filas devolver (FETCH...ONLY).

La cláusula OFFSET se coloca inmediatamente después de ORDER BY. El entero indica la primera fila a contar (en SQL Server, la primera fila es 0, la segunda fila es 1, etc.), seguida de la palabra clave ROW o ROWS. Puede usar ROW o ROWS, pero se recomienda usar ROW para 1 fila y ROWS para 0 y varias filas. Mira la imagen:

En nuestro ejemplo, ordenamos por precio (ORDER BY price ) y comience a devolver resultados desde la primera fila (OFFSET 0 ROWS ). Luego usamos FETCH con la palabra clave FIRST. Puede usar PRIMERO o SIGUIENTE; se recomienda usar PRIMERO si comienza desde la primera fila sin omitir ningún registro y SIGUIENTE si se omite alguna fila (es decir, si el DESPLAZAMIENTO es mayor que 0).

Finalmente, tenemos el número de filas a seleccionar y la palabra clave SOLAMENTE FILAS. Use SOLAMENTE FILAS si está devolviendo varias filas y SOLAMENTE FILA si está limitando el resultado a una fila. En nuestro ejemplo, lo limitamos a cinco filas (FETCH FIRST 5 ROWS ONLY ).

A continuación, tenemos otra consulta que limita las filas a cinco pero comienza desde la quinta fila de la tabla (OFFSET 4 ROWS ):

Solución 2:

SELECT name, price
FROM toy
ORDER BY price
OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY;

Este es el resultado de la consulta:

nombre precio
El robot Tobie 185,50
Bicicleta BMX 200,00

Tenga en cuenta que esta consulta devuelve solo dos filas, no las cinco indicadas. Mira la imagen:

¿Por qué sólo dos filas? Porque esta tabla solo contiene seis registros. Si omitimos las primeras cuatro filas y comenzamos en la fila 5, solo quedan dos filas.

SQL Server tiene otra forma de limitar las filas:la cláusula TOP.

Solución 3:

SELECT TOP 3
 name, price
FROM toy
ORDER BY price;

Este es el resultado de la consulta:

nombre precio
Ladrillos fáciles 21.00
Juego de pesca 25,00
Rompecabezas de animales 45,80

Si no necesita omitir ninguna fila, puede usar la cláusula TOP de SQL Server para limitar las filas devueltas. Se coloca inmediatamente después de SELECT. La palabra clave TOP va seguida de un número entero que indica el número de filas a devolver. En nuestro ejemplo, ordenamos por precio y luego limitó las filas devueltas a 3.

A diferencia del método OFFSET – FETCH, TOP no requiere ORDER BY. Aquí hay un ejemplo similar, pero sin ordenar los registros:

Solución 4:

SELECT TOP 3
 name, price
FROM toy;

Este es el resultado de la consulta:

Observe que se han devuelto diferentes registros. Por lo general (pero no siempre), las filas se mostrarán en el orden en que se insertaron los registros en la tabla.

Recomendamos usar OFFSET y FETCH en lugar de TOP, ya que OFFSET y FETCH son estándar de SQL; TOP es específico de T-SQL.