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
Libérer: 2024-12-15 15:27:20
original
887 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal