ホームページ >データベース >mysql チュートリアル >LINQ の Skip() および Take() に相当する直接 SQL はありますか?

LINQ の Skip() および Take() に相当する直接 SQL はありますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 15:27:20887ブラウズ

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

SQL でのスキップとテイク: LINQ と同等の

LINQ の .Skip() メソッドと .Take() メソッドは、便利な作業方法を提供します。メモリ内のデータのサブセットを使用します。ただし、基になるデータ ソースが大規模な SQL データベースである状況では、多くの場合、これらの操作をメモリ内ではなく SQL 内で直接実行することが望ましいとされます。これにより、大量のデータをメモリに転送するオーバーヘッドが回避されます。

そのようなシナリオの 1 つは、データベース テーブルから特定の範囲の行を選択する必要がある場合です。 LINQ には、この目的のために .Skip() メソッドと .Take() メソッドが用意されていますが、直接同等の SQL メソッドはありますか?

SQL Server 2012 以降

SQL Server 2012 以降では、行オフセットと制限:

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

特定のテーブルから行 1000 ~ 1100 を選択するには、次のクエリを使用します:

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

このクエリは次の手順を実行します:

  1. 「Sales.SalesOrderHeader」テーブルを、 「OrderDate」列。
  2. 「OFFSET」句を使用して最初の 1000 行をスキップします。
  3. 「FETCH NEXT」句を使用して次の 100 行を取得します。

このソリューションは、すべての行を選択する必要がなくなり、メモリ内で同じ操作を実行するよりもはるかに効率的です。最初の 1000 を破棄し、次の 100 を手動で選択します。

以上がLINQ の Skip() および Take() に相当する直接 SQL はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。