Toppklausul i SQL Server med exempel

För det mesta försöker vi hitta de tre bästa poängen i en klass, de fem bästa löparena i ett maraton eller de 10 bästa målen i månaden. SQL-servern har en funktion för att välja TOP n-poster från en tabell.

Vi kan hämta TOP n-posterna från ett bord utan att använda en WHERE-klausul. TOP kan också användas med DML-satser som Uppdatering och Radera. För det mesta används TOP med en Order by-klausul för att sortera resultaten först i stigande eller fallande ordning och sedan för att hämta TOP n-posterna. En order enligt klausul med TOP gör att vi har sorterat data från ett bord.

TOP används som en radbegränsare i SQL-servern, precis som LIMIT i Mysql.

Låt oss ta en titt på ett exempel på TOP som används i ett bord.

Skapa tabell SSCRsults (Id INT IDENTITY (1,1) PRIMÄR NYCKEL, Namn VARCHAR (100), Poäng NUMMER (18,2)); INSERT INTO SSCResults VALUES ('Shailesh A', 98,0); INSERT INTO SSCResults VALUES ('Atul K', 90,0); INSERT INTO SSCResults VALUES ('Vishal P', 89,0); INSERT INTO SSCResults VALUES ('Naryan N', 88,0); INSERT IN I SSCResults VALUES ('Rohit G', 88,0); INSERT INTO SSCResults VALUES ('Varsha K', 85,0); INSERT INTO SSCResults VALUES ('Sangram K', 83,0); INSERT INTO SSCResults VALUES ('Vish K', 79,0); VÄLJ * FRÅN SSCResults;


Exempel 1 - Välja TOP n-poster i SQL Server: Hitta de tre bästa poängen i en SSCResults-tabell

Ett snabbt sätt att hitta det här är att sortera poängkolumnen i fallande ordning och välj de tre bästa posterna.

VÄLJ TOPP 3 * FRÅN SSCResults BESTÄLL AV POST DESC


Förfrågan ovan har sorterat poängfältet från högsta poäng till lägsta poäng först och sedan valt de tre bästa poängen. SELECT * indikerar att vi vill hämta alla kolumnerna från SSCResults tabellen.

Exempel 2 - Topp med slipsar: Hantera bundna värden

När vi frågar SSCResults tabellen ser vi Id = 4 och Id = 5 har samma poäng. Om jag hämtar de fyra bästa posterna från SSCResults-tabellen baserat på poängkolumnen, skulle Id = 5 inte dyka upp i listan eftersom Top 4-postens villkor inte är inställt för att hantera ett slipsscenario.

Låt oss fråga de översta fyra posterna från SSCResults tabellen.

VÄLJ TOP 4 * FRÅN SSCResults


Vi såg inte att Id = 5 har samma poäng som Id = 4 i resultaten ovan eftersom vi inte hanterade ett slipsscenario. För att få ID = 5-posten måste vi använda TOP med band.

VÄLJ TOPP 4 WITH TIES * FRÅN SSCResults BESTÄLL AV POST DESC


Toppklausul med uppdatering och radering av uttalanden

Exempel 3 - Uppdatering av topp 3 poster i ett bord: Uppdatera de tre bästa posterna i en tabell

Låt oss uppdatera poängen för de 3 bästa poängen med 0,5 procent.

Vi kan inte använda Order by direkt med en uppdatering. Vi måste använda en underfråga för att välja de tre bästa posterna och uppdatera sedan.

uppdatera SSCResults set Score = Score + 0,5 var ID i (välj topp 3 ID från SSCResults ordning med poäng desc);


Förfrågan ovan kommer att exekvera underfrågan först för att välja de tre bästa idsna (topp tre scorer), och sedan uppdateras deras poäng genom att lägga till 0,5 procent.

välj * från SSCResults ordning med poäng avkänning


Vi kan se att de tre bästa poängen har uppdaterats med 0,5 procent.

Exempel 4 - Radera de tre högsta posterna i ett bord: Radera de tre lägsta poängen från tabellen

DELETE från SSCResults där ID i (välj topp 3 ID från SSCResults ordning med poäng ASC);


Först kommer underfrågan att hämta de lägsta poängen från tabellen SSCResults, och en yttre fråga kommer att radera dessa poster baserat på det ID som produceras av underfrågan.