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.