Maison >base de données >tutoriel mysql >Existe-t-il un équivalent SQL direct à Skip() et Take() de LINQ ?

Existe-t-il un équivalent SQL direct à Skip() et Take() de LINQ ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 15:27:20888parcourir

Is There a Direct SQL Equivalent to LINQ's Skip() and Take()?

Skip and Take en SQL : un équivalent LINQ

Les méthodes .Skip() et .Take() de LINQ offrent un moyen pratique de travailler avec un sous-ensemble de données en mémoire. Toutefois, dans les situations où la source de données sous-jacente est une base de données SQL volumineuse, il est souvent préférable d'effectuer ces opérations directement dans SQL plutôt qu'en mémoire. Cela évite la surcharge liée au transfert de grandes quantités de données en mémoire.

Un de ces scénarios est celui où vous devez sélectionner une plage spécifique de lignes dans une table de base de données. LINQ fournit les méthodes .Skip() et .Take() à cet effet, mais existe-t-il un équivalent SQL direct ?

SQL Server 2012 et supérieur

SQL Server 2012 et versions ultérieures ont introduit une nouvelle syntaxe pour le décalage et la limitation des lignes :

OFFSET (@Skip) ROWS
FETCH NEXT (@Take) ROWS ONLY

Pour sélectionner des lignes 1000-1100 d'une table spécifique, vous utiliseriez la requête suivante :

SELECT *
FROM Sales.SalesOrderHeader 
ORDER BY OrderDate
OFFSET 1000 ROWS
FETCH NEXT 100 ROWS ONLY

Cette requête effectuera les étapes suivantes :

  1. Trier la table 'Sales.SalesOrderHeader' dans ordre croissant par la colonne 'OrderDate'.
  2. Ignorer les 1 000 premières lignes en utilisant la clause 'OFFSET'.
  3. Prenez les 100 lignes suivantes en utilisant la clause 'FETCH NEXT'.

Cette solution est bien plus efficace que d'effectuer la même opération en mémoire, car cela évite d'avoir à sélectionner toutes les lignes, pour ensuite supprimer les 1 000 premières et sélectionner les 100 suivantes manuellement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn