Ответ 1
ANSI/ISO SQL: 2003 введено окно функций:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY age ASC) AS rownum,
person_id,
person_name,
age
FROM person
) AS foo
WHERE rownum <= 3
Microsoft SQL Server поддерживает этот синтаксис с SQL Server 2005. http://msdn.microsoft.com/en-us/library/ms189798(v=sql.90).aspx
ANSI/ISO SQL: 2008 представил более простой синтаксис для FETCH FIRST
, который может быть более похож на синтаксис Microsoft/Sybase TOP
:
SELECT person_id, person_name, age FROM person
FETCH FIRST 3 ROWS ONLY
Microsoft еще не поддерживает этот синтаксис. См. Также http://en.wikipedia.org/wiki/Select_(SQL)#Limiting_result_rows
Если вы все еще используете Microsoft SQL Server 2000, вы должны прочитать вопрос, который я опубликовал некоторое время, о том, как делать запросы "подкачки": Эмуляция предложения MySQL LIMIT в Microsoft SQL Server 2000