Официально нет, нет. *
Как правило, вам понадобится абстрагированная функция на уровне доступа к базе данных, которая будет справляться с вами; намекните, что вы находитесь на MySQL или PostgreSQL, и он может добавить к вашему запросу предложение LIMIT или rownum над подзапросом для Oracle и так далее. Если он не знает, что может сделать что-то из этого, вернитесь к извлечению лота и возвращению только части полного списка.
*: eta: есть сейчас, в ANSI SQL: 2003. Но это не поддерживается глобально, часто работает плохо, и это немного болезненно, потому что вам нужно переместить / скопировать ваш ORDER в новое место в выражении, что усложняет автоматическое перенос:
SELECT * FROM (
SELECT thiscol, thatcol, ROW_NUMBER() OVER (ORDER BY mtime DESC, id) AS rownumber
)
WHERE rownumber BETWEEN 10 AND 20 -- care, 1-based index
ORDER BY rownumber;
Существует также суффикс "FETCH FIRST n ROWS ONLY" в SQL: 2008 (и DB2, где он возник). Но, подобно префиксу TOP в SQL Server и аналогичному синтаксису в Informix, вы не можете указать начальную точку, поэтому вам все равно придется выбирать и выбрасывать некоторые строки.