Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment limiter les lignes dans un jeu de résultats SQL Server

Problème :

Vous souhaitez limiter les lignes dans un jeu de résultats SQL Server.

Exemple :

Notre base de données a une table nommée toy avec des données dans les colonnes id , name , et price .

identifiant nom prix
161 Vélo BMX 200.00
121 Le robot Tobie 185,50
213 Jeu de pêche 25.00
102 Puzzles d'animaux 45,80
111 Ensemble de piste de course 126,70
233 Briques faciles 21.00

Choisissons les noms et les prix des jouets. Mais nous n'avons besoin de voir que les cinq premières lignes.

Solution 1 :

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

Voici le résultat de la requête :

nom prix
Briques faciles 21.00
Jeu de pêche 25.00
Puzzles d'animaux 45,80
Ensemble de piste de course 126,70
Le robot Tobie 185,50

Discussion :

Pour limiter le nombre de lignes dans le jeu de résultats, utilisez ORDER BY avec les clauses facultatives OFFSET et FETCH. Tout d'abord, la requête trie les lignes (ORDER BY). Vous indiquez ensuite à SQL Server quelle doit être la première ligne du jeu de résultats (OFFSET...ROWS) et le nombre de lignes à renvoyer (FETCH...ONLY).

La clause OFFSET est placée immédiatement après ORDER BY. L'entier indique la première ligne à compter (dans SQL Server, la première ligne est 0, la deuxième ligne est 1, etc.), suivi du mot-clé ROW ou ROWS. Vous pouvez utiliser ROW ou ROWS, mais il est recommandé d'utiliser ROW pour 1 ligne et ROWS pour 0 et plusieurs lignes. Regardez l'image :

Dans notre exemple, nous trions par prix (ORDER BY price ) et commencez à renvoyer les résultats à partir de la première ligne (OFFSET 0 ROWS ). Ensuite, nous utilisons FETCH avec le mot-clé FIRST. Vous pouvez utiliser PREMIER ou SUIVANT ; il est recommandé d'utiliser FIRST si vous partez de la première ligne sans omettre aucun enregistrement et NEXT si des lignes sont omises (c'est-à-dire si le DECALAGE est supérieur à 0).

Enfin, nous avons le nombre de lignes à sélectionner et le mot clé ROWS ONLY. Utilisez ROWS ONLY si vous renvoyez plusieurs lignes et ROW ONLY si vous limitez le résultat à une seule ligne. Dans notre exemple, nous le limitons à cinq lignes (FETCH FIRST 5 ROWS ONLY ).

Ci-dessous, nous avons une autre requête qui limite les lignes à cinq mais commence à partir de la cinquième ligne du tableau (OFFSET 4 ROWS ):

Solution 2 :

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

Voici le résultat de la requête :

nom prix
Le robot Tobie 185,50
Vélo BMX 200.00

Notez que cette requête ne renvoie que deux lignes, et non les cinq indiquées. Regardez l'image :

Pourquoi seulement deux rangées ? Parce que cette table ne contient que six enregistrements. Si nous omettons les quatre premières lignes et commençons à la ligne 5, il ne reste que deux lignes.

SQL Server dispose d'un autre moyen de limiter les lignes :la clause TOP.

Solution 3 :

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

Voici le résultat de la requête :

nom prix
Briques faciles 21.00
Jeu de pêche 25.00
Puzzles d'animaux 45,80

Si vous n'avez pas besoin d'omettre de lignes, vous pouvez utiliser la clause TOP de SQL Server pour limiter les lignes renvoyées. Il est placé immédiatement après SELECT. Le mot-clé TOP est suivi d'un entier indiquant le nombre de lignes à renvoyer. Dans notre exemple, nous avons commandé par prix puis limité les lignes renvoyées à 3.

Contrairement à la méthode OFFSET - FETCH, TOP ne nécessite pas ORDER BY. Voici un exemple similaire, mais sans trier les enregistrements :

Solution 4 :

SELECT TOP 3
 name, price
FROM toy;

Voici le résultat de la requête :

Notez que différents enregistrements ont été renvoyés. Habituellement (mais pas toujours), les lignes seront affichées dans l'ordre dans lequel les enregistrements ont été insérés dans la table.

Nous vous recommandons d'utiliser OFFSET et FETCH au lieu de TOP, car OFFSET et FETCH sont des standards SQL ; TOP est spécifique à T-SQL.