LIMIT в C#
Ограничение LIMIT обрезает число строк в
ответе, OFFSET пропускает указанное
количество строк сверху. Вместе они задают
постраничный вывод.
Без ORDER BY порядок строк не
гарантирован, поэтому для стабильных страниц
сортируют по ключу. Запрос с
ORDER BY v DESC LIMIT 1 вернёт
максимальное значение 3:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.14" />
</ItemGroup>
</Project>
using Microsoft.Data.Sqlite;
using SqliteConnection db = new("Data Source=:memory:");
db.Open();
using (SqliteCommand c = db.CreateCommand())
{
c.CommandText = "CREATE TABLE IF NOT EXISTS t (v INT); INSERT INTO t VALUES (1),(2),(3)";
c.ExecuteNonQuery();
}
using SqliteCommand q = db.CreateCommand();
q.CommandText = "SELECT v FROM t ORDER BY v DESC LIMIT 1";
Console.WriteLine(q.ExecuteScalar());
Запрос LIMIT 2 OFFSET 2 после сортировки
пропускает две строки и берёт две следующие.
Это вторая страница по два элемента. Пустой
результат возможен, если OFFSET больше
числа строк - это не ошибка SQL.
Добавьте идентификаторы от 1 до
4. В порядке возрастания пропустите
первые два, возьмите два следующих и выведите
больший из них.