Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come limitare le righe in un set di risultati di SQL Server

Problema:

Vuoi limitare le righe in un set di risultati di SQL Server.

Esempio:

Il nostro database ha una tabella chiamata toy con i dati nelle colonne id , name e price .

id prezzo
161 Bicicletta BMX 200.00
121 Il robot Tobie 185.50
213 Gioco di pesca 25.00
102 Enigmi di animali 45.80
111 Set di piste 126,70
233 Mattoni facili 21:00

Selezioniamo i nomi e i prezzi dei giocattoli. Ma abbiamo solo bisogno di vedere le prime cinque righe.

Soluzione 1:

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

Ecco il risultato della query:

nome prezzo
Mattoni facili 21:00
Gioco di pesca 25.00
Enigmi di animali 45.80
Set di piste 126,70
Il robot Tobie 185.50

Discussione:

Per limitare le righe nel set di risultati, utilizzare ORDER BY con le clausole OFFSET e FETCH facoltative. Innanzitutto, la query ordina le righe (ORDER BY). Quindi dici a SQL Server quale dovrebbe essere la prima riga nel set di risultati (OFFSET...ROWS) e quante righe restituire (FETCH...ONLY).

La clausola OFFSET è inserita immediatamente dopo ORDER BY. Il numero intero indica la prima riga da contare (in SQL Server, la prima riga è 0, la seconda riga è 1 e così via), seguita dalla parola chiave ROW o ROWS. È possibile utilizzare ROW o ROWS, ma si consiglia di utilizzare ROW per 1 riga e ROWS per 0 e più righe. Guarda l'immagine:

Nel nostro esempio, ordiniamo per prezzo (ORDER BY price ) e inizia a restituire i risultati dalla prima riga (OFFSET 0 ROWS ). Quindi utilizziamo FETCH con la parola chiave FIRST. Puoi usare FIRST o NEXT; si consiglia di utilizzare FIRST se si parte dalla prima riga senza omettere alcun record e NEXT se vengono omesse righe (cioè se OFFSET è maggiore di 0).

Infine, abbiamo il numero di righe da selezionare e la parola chiave SOLO RIGHE. Usa SOLO RIGHE se stai restituendo più righe e SOLO RIGHE stai limitando il risultato a una riga. Nel nostro esempio, lo limitiamo a cinque righe (FETCH FIRST 5 ROWS ONLY ).

Di seguito, abbiamo un'altra query che limita le righe a cinque ma inizia dalla quinta riga nella tabella (OFFSET 4 ROWS ):

Soluzione 2:

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

Ecco il risultato della query:

nome prezzo
Il Robot Tobie 185.50
Bicicletta BMX 200.00

Si noti che questa query restituisce solo due righe, non le cinque indicate. Guarda l'immagine:

Perché solo due righe? Perché questa tabella contiene solo sei record. Se omettiamo le prime quattro righe e iniziamo dalla riga 5, rimangono solo due righe.

SQL Server ha un altro modo per limitare le righe:la clausola TOP.

Soluzione 3:

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

Ecco il risultato della query:

nome prezzo
Mattoni facili 21:00
Gioco di pesca 25.00
Enigmi di animali 45.80

Se non è necessario omettere alcuna riga, è possibile utilizzare la clausola TOP di SQL Server per limitare le righe restituite. Viene posizionato immediatamente dopo SELECT. La parola chiave TOP è seguita da un numero intero che indica il numero di righe da restituire. Nel nostro esempio, abbiamo ordinato per prezzo e quindi limitato le righe restituite a 3.

A differenza del metodo OFFSET – FETCH, TOP non richiede ORDER BY. Ecco un esempio simile, ma senza ordinare i record:

Soluzione 4:

SELECT TOP 3
 name, price
FROM toy;

Ecco il risultato della query:

Si noti che sono stati restituiti record diversi. Di solito (ma non sempre) le righe vengono visualizzate nell'ordine in cui i record sono stati inseriti nella tabella.

Si consiglia di utilizzare OFFSET e FETCH invece di TOP, poiché OFFSET e FETCH sono standard SQL; TOP è specifico per T-SQL.