LIMIT 语句经常在许多关系型数据库中使用,比如 MySQL,H2,HSQLDB。
但是 LIMIT 语句不属于 SQL 标准。
Postgresql 提供了 SQL 标准的语句来替代 LIMIT,它就是 FETCH 语句,它是在 SQL:2008 标准被提出来的。
OFFSET start { ROW | ROWS }
FETCH { FIRST | NEXT } [ row_count ] { ROW | ROWS } ONLY
FIRST 和 NEXT 是同义词,ROW 和 ROWS 是同义词,同义词可以相互替换
start 必须为 0 或正整数,如果没有 OFFSET 字句,则 start 默认为 0,如果 start 比结果集中的行数大,则查询语句不返回结果。
row_count 是大于等于 1 的整数,如果你不指定它,它默认为 1
因为表中存储的行顺序是未指定的,所以应该始终使用 FETCH 子句和 order BY 子句,以使返回结果集中的行顺序一致。
使用 FETCH 查询并选择第一条记录
SELECT
film_id,
title
FROM
film
ORDER BY
title
FETCH FIRST ROW ONLY;
等同于以下代码:
SELECT
film_id,
title
FROM
film
ORDER BY
title
FETCH FIRST 1 ROW ONLY;
尽量使用 FETCH 语句,而不是 LIMIT 语句。