Самый естественный и эффективный способ сделать пейджинг - использовать конструкцию LIMIT / OFFSET (TOP в мире Sybase). DBin-зависимый способ должен знать, на каком движке он работает, и применять правильную конструкцию SQL.
По крайней мере, я так и видел в коде независимых библиотек БД. Вы можете абстрагировать логику подкачки, как только получите данные из движка с конкретным запросом.
Если вы действительно ищете решение с одним предложением SQL, не могли бы вы показать, что вы имеете в виду? Как и SQL для решения временной таблицы. Это, вероятно, даст вам более актуальные предложения.
РЕДАКТИРОВАТЬ:
Я хотел увидеть, о чем ты думаешь, потому что я не мог найти способ сделать это с временными таблицами и не использовать конструкцию, специфичную для движка. Вы использовали конкретные конструкции в примере. Я до сих пор не вижу способа реализовать подкачку в базе данных только с помощью (реализованного) стандартного SQL. Вы можете привести всю таблицу в стандартном SQL и страницу в приложении, но это явно глупо.
Таким образом, вопрос теперь будет больше похож на «Есть ли способ реализовать пейджинг без использования LIMIT / OFFSET или эквивалентного?» и я думаю, что ответ "Sanely, нет". Вы можете попробовать использовать курсоры, но вы также станете жертвой конкретных предложений / поведения базы данных.
Мне пришла в голову глупая идея (читай глупо): добавить в таблицу столбец страницы, скажем, создать тест таблицы (id int, имя varchar, phone varchar, page int), а затем получить страницу 1 с помощью select * из таблицы, где page = 1. Но это означает необходимость добавления кода для поддержки этого столбца, что опять-таки может быть сделано либо путем объединения всей базы данных, либо с использованием специальных конструкций базы данных. Это помимо необходимости добавлять разные столбцы для каждого возможного заказа и многих других недостатков.
Я не могу предоставить доказательства, но я действительно думаю, что вы просто не можете сделать это разумно.