Clause supérieure dans SQL Server avec exemples

La plupart du temps, dans la vie réelle, nous essayons de trouver les trois meilleurs scores d'une classe, les cinq meilleurs coureurs d'un marathon ou les 10 premiers objectifs du mois. SQL Server dispose d'une fonctionnalité permettant de sélectionner les n premiers enregistrements d'une table.

Nous pouvons récupérer les enregistrements TOP n d'une table sans utiliser de clause WHERE. TOP peut également être utilisé avec des instructions DML telles que Update et Delete. La plupart du temps, TOP est utilisé avec une clause Order by pour trier les résultats d'abord par ordre croissant ou décroissant, puis pour récupérer les enregistrements TOP n. Une clause order by avec TOP garantit que nous avons trié les données d'une table.

TOP est utilisé comme limiteur de lignes dans le serveur SQL, tout comme LIMIT dans Mysql.

Jetons un coup d'oeil à un exemple de TOP utilisé dans un tableau.

Créer une table SSCResults (Id INT IDENTITY (1,1) PRIMARY KEY, Nom VARCHAR (100), Score NUMERIC (18,2)); INSERT IN SSCResults VALUES ('Shailesh A', 98.0); INSERT IN SSCResults VALUES ('Atul K', 90,0); INSERT IN SSCResults VALUES ('Vishal P', 89.0); INSERT IN SSCResults VALUES ('Naryan N', 88,0); INSERT IN SSCResults VALUES ('Rohit G', 88,0); INSERT INTO SSCResults VALUES ('Varsha K', 85.0); INSERT IN SSCResults VALUES ('Sangram K', 83.0); INSERT IN SSCResults VALUES ('Vish K', 79,0); SELECT * FROM SSCResults;


Exemple 1 - Sélection d'enregistrements TOP n dans SQL Server: recherchez les trois meilleurs marqueurs dans une table SSCResults

Une solution rapide consiste à trier la colonne Score par ordre décroissant et à sélectionner les trois premiers enregistrements.

SELECT TOP 3 * FROM SSCResults ORDER BY Score DESC


La requête ci-dessus a trié le champ Score du score le plus élevé au score le plus bas en premier, puis les trois premiers scores ont été sélectionnés. SELECT * indique que nous voulons récupérer toutes les colonnes de la table SSCResults.

Exemple 2 - Top avec liens: traiter avec des valeurs liées

Lorsque nous interrogeons la table SSCResults, nous voyons que Id = 4 et Id = 5 ont le même score. Dans ce cas, si je récupère les quatre premiers enregistrements de la table SSCResults en fonction de la colonne Score, Id = 5 n'apparaîtra pas dans la liste car la condition des 4 premiers enregistrements n'est pas configurée pour gérer un scénario d'égalité.

Interrogeons les quatre premiers enregistrements de la table SSCResults.

SELECT TOP 4 * FROM SSCResults


Nous n'avons pas vu que Id = 5 avait le même score que Id = 4 dans les résultats ci-dessus parce que nous n'avions pas géré d'égalité. Pour obtenir l'enregistrement Id = 5, nous devons utiliser TOP avec TIES.

SÉLECTIONNEZ LES 4 MEILLEURES LIENS * DE SSCResults ORDER BY Score DESC


Clause supérieure avec instructions de mise à jour et de suppression

Exemple 3 - Mise à jour des 3 premiers enregistrements d'une table: mettez à jour les trois premiers enregistrements d'une table

Mettons à jour le score des 3 meilleurs marqueurs de 0,5%.

Nous ne pouvons pas utiliser Order by directement avec une instruction Update. Nous devons utiliser une sous-requête pour sélectionner les trois premiers enregistrements, puis les mettre à jour.

update SSCResults set Score = Score + 0.5 où ID est entré (sélectionnez les 3 premiers ID dans l'ordre SSCResults par score);


La requête ci-dessus exécute d'abord la sous-requête pour sélectionner les trois premiers identifiants (les trois meilleurs marqueurs), puis met à jour leurs scores en ajoutant 0,5%.

select * from SSCResults ordre par score desc


Nous pouvons voir que les pourcentages des trois meilleurs scores ont été mis à jour de 0,5%.

Exemple 4 - Suppression des 3 premiers enregistrements d'un tableau: supprimez les trois scores les plus bas du tableau

DELETE FROM SSCResults avec ID dans (sélectionnez les 3 premiers ID dans l'ordre SSCResults by score ASC);


Tout d'abord, la sous-requête va extraire les scores les plus bas de la table SSCResults et une requête externe supprimera ces enregistrements en fonction de l'ID généré par la sous-requête.