Clausola superiore in SQL Server con esempi

Il più delle volte nella vita reale, cerchiamo di trovare i primi tre punteggi in una classe, i primi cinque corridori in una maratona, oi primi 10 gol del mese. Il server SQL ha una funzionalità per selezionare i record TOP n da una tabella.

Possiamo recuperare i record TOP n da una tabella senza utilizzare una clausola WHERE. TOP può anche essere utilizzato con istruzioni DML come Update e Delete. Nella maggior parte dei casi, TOP viene utilizzato con una clausola Order by per ordinare i risultati prima in ordine crescente o decrescente e quindi per recuperare i record TOP n. Una clausola order by con TOP garantisce che i dati siano stati ordinati da una tabella.

TOP è usato come limitatore di riga nel server SQL proprio come LIMIT in Mysql.

Diamo un'occhiata a un esempio di TOP usato in una tabella.

Crea tabella SSCResults (ID INT IDENTITY (1,1) PRIMARY KEY, Name VARCHAR (100), Score NUMERIC (18,2)); INSERISCI IN VALORI SSCResults ('Shailesh A', 98.0); INSERISCI IN VALORI SSCResults ('Atul K', 90.0); INSERISCI NEI VALORI SSCResults ('Vishal P', 89.0); INSERISCI NEI VALORI SSCResults ('Naryan N', 88.0); INSERISCI I VALORI SSCResults ('Rohit G', 88.0); INSERISCI NEI VALORI SSCResults ('Varsha K', 85.0); INSERISCI I VALORI SSCResults ('Sangram K', 83.0); INSERISCI NEI VALORI SSCResults ('Vish K', 79.0); SELEZIONA * DA SSCResults;


Esempio 1: selezione dei record TOP n in SQL Server: trova i primi tre punti di riferimento in una tabella SSCResults

Un modo rapido per trovarlo consiste nell'ordinare la colonna Punteggio in ordine decrescente e selezionare i primi tre record.

SELECT TOP 3 * FROM SSCResults ORDER BY Score DESC


La query sopra ha ordinato per prima cosa il campo Punteggio dal punteggio più alto al punteggio più basso, quindi ha selezionato i primi tre punteggi. SELECT * indica che vogliamo recuperare tutte le colonne dalla tabella SSCResults.

Esempio 2 - Top with Ties: gestione dei valori legati

Quando interrogiamo la tabella SSCResults, vediamo Id = 4 e Id = 5 hanno lo stesso punteggio. In questo caso, se recupero i primi quattro record dalla tabella SSCResults in base alla colonna Punteggio, Id = 5 non verrà visualizzato nell'elenco perché la condizione dei primi 4 record non è impostata per gestire uno scenario di parità.

Esaminiamo i primi quattro record della tabella SSCResults.

SELEZIONA TOP 4 * DA SSCResults


Non abbiamo visto che Id = 5 abbia lo stesso punteggio di Id = 4 nei risultati sopra riportati perché non abbiamo gestito uno scenario di parità. Per ottenere il record Id = 5, dobbiamo usare TOP con TIES.

SELEZIONA IL TOP 4 CON I LEGAMI * DA SSCResults ORDER BY Score DESC


Clausola superiore con le dichiarazioni di aggiornamento e cancellazione

Esempio 3: aggiornamento dei primi 3 record in una tabella: aggiornare i primi tre record in una tabella

Aggiorniamo il punteggio dei primi 3 marcatori dello 0,5%.

Non possiamo usare Order direttamente con una dichiarazione di aggiornamento. Dobbiamo utilizzare una sottoquery per selezionare i primi tre record e quindi aggiornare.

aggiorna SSCResults set Score = Score + 0.5 dove ID in (seleziona top 3 ID da SSCResults order by score desc);


La query precedente eseguirà prima la sottoquery per selezionare i primi tre id (i primi tre punteggi), quindi aggiornerà i punteggi aggiungendo lo 0,5 percento.

seleziona * da SSCResults ordine per punteggio desc


Possiamo vedere che le percentuali dei primi tre punteggi sono state aggiornate dello 0,5%.

Esempio 4: eliminazione dei primi 3 record in una tabella: eliminare i tre punteggi più bassi dalla tabella

ELIMINA DA SSCResults dove ID in (seleziona top 3 ID da SSCResults ordina per punteggio ASC);


Innanzitutto, la sottoquery recupererà i punteggi più bassi dalla tabella SSCResults e una query esterna cancellerà questi record in base all'ID prodotto dalla sottoquery.