Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como limitar linhas em um conjunto de resultados do SQL Server

Problema:


Você gostaria de limitar as linhas em um conjunto de resultados do SQL Server.

Exemplo:


Nosso banco de dados tem uma tabela chamada toy com dados nas colunas id , name , e price .
id nome preço
161 Bicicleta BMX 200,00
121 O Robô Tobie 185,50
213 Jogo de pesca 25,00
102 Quebra-cabeças de animais 45,80
111 Conjunto de pista de corrida 126,70
233 Tijolos fáceis 21.00

Vamos selecionar os nomes e preços dos brinquedos. Mas só precisamos ver as primeiras cinco linhas.

Solução 1:

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

Segue o resultado da consulta:
nome preço
Tijolos fáceis 21.00
Jogo de pesca 25,00
Quebra-cabeças de animais 45,80
Conjunto de pista de corrida 126,70
O Robô Tobie 185,50

Discussão:


Para limitar linhas no conjunto de resultados, use ORDER BY com as cláusulas OFFSET e FETCH opcionais. Primeiro, a consulta classifica as linhas (ORDER BY). Você então informa ao SQL Server qual deve ser a primeira linha no conjunto de resultados (OFFSET...ROWS) e quantas linhas retornar (FETCH...ONLY).

A cláusula OFFSET é colocada imediatamente após ORDER BY. O número inteiro indica a primeira linha a ser contada (no SQL Server, a primeira linha é 0, a segunda linha é 1 etc.), seguida pela palavra-chave ROW ou ROWS. Você pode usar ROW ou ROWS, mas é recomendável usar ROW para 1 linha e ROWS para 0 e várias linhas. Olha a foto:

Em nosso exemplo, classificamos por preço (ORDER BY price ) e comece a retornar os resultados da primeira linha (OFFSET 0 ROWS ). Em seguida, usamos FETCH com a palavra-chave FIRST. Você pode usar FIRST ou NEXT; é recomendado usar FIRST se você estiver começando da primeira linha sem omitir nenhum registro e NEXT se alguma linha for omitida (ou seja, se o OFFSET for maior que 0).

Por fim, temos o número de linhas a serem selecionadas e a palavra-chave ROWS ONLY. Use ROWS ONLY se você estiver retornando várias linhas e ROW ONLY você está limitando o resultado a uma linha. Em nosso exemplo, limitamos a cinco linhas (FETCH FIRST 5 ROWS ONLY ).

Abaixo, temos outra consulta que limita as linhas a cinco, mas começa na quinta linha da tabela (OFFSET 4 ROWS ):

Solução 2:

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

Segue o resultado da consulta:
nome preço
O Robô Tobie 185,50
Bicicleta BMX 200,00

Observe que esta consulta retorna apenas duas linhas, não as cinco indicadas. Olha a foto:

Por que apenas duas linhas? Porque esta tabela contém apenas seis registros. Se omitirmos as primeiras quatro linhas e começarmos na linha 5, restam apenas duas linhas.

O SQL Server tem outra maneira de limitar linhas:a cláusula TOP.

Solução 3:

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

Segue o resultado da consulta:
nome preço
Tijolos fáceis 21.00
Jogo de pesca 25,00
Quebra-cabeças de animais 45,80

Se você não precisar omitir nenhuma linha, poderá usar a cláusula TOP do SQL Server para limitar as linhas retornadas. É colocado imediatamente após SELECT. A palavra-chave TOP é seguida por um número inteiro que indica o número de linhas a serem retornadas. Em nosso exemplo, pedimos por preço e, em seguida, limitou as linhas retornadas a 3.

Ao contrário do método OFFSET – FETCH, o TOP não requer ORDER BY. Aqui está um exemplo semelhante, mas sem classificar os registros:

Solução 4:

SELECT TOP 3
 name, price
FROM toy;

Segue o resultado da consulta:

Observe que diferentes registros foram retornados. Normalmente (mas nem sempre) as linhas serão mostradas na ordem em que os registros foram inseridos na tabela.

Recomendamos usar OFFSET e FETCH em vez de TOP, pois OFFSET e FETCH são padrão SQL; TOP é específico para T-SQL.