让我们讨论一下使用PostgreSQL LIMIT子句将输出限制在一个指定的值的来龙去脉。
尽管LIMIT子句是一个可选的语句,但当你不希望一个查询返回成千上万的记录时,它是非常方便的。
基本用法
LIMIT子句是非常直接的。查询的一般语法是:
SELECT select_lst FROM table LIMIT {number | ALL }
LIMIT值是一个整数,指定了输出的行数限制。
例如,如果一个查询返回100条记录,而你把限制值设置为5,则只显示5条记录。
注意:除非查询本身返回的值少于LIMIT子句中指定的值,否则限制值总是设置返回值。
如果LIMIT值被设置为0,查询将返回一个空集合。另一方面,如果没有为LIMIT子句设置值(NULL),查询将返回相同的值,因为它没有指定LIMIT子句。
PostgreSQL限制子句的例子
让我们通过例子来说明如何使用LIMIT子句。
例1
第一个例子显示了LIMIT子句的一个简单用法。在这个例子中,我们将使用样本的sakila数据库。
考虑到film表;我们可以通过查询来确定记录的数量。
SELECT count(*) FROM film;
count
-------
1000
(1 row)
在这个例子中,该表包含1000条记录。倾倒所有的记录可能不是很有效。相反,我们可以把输出限制在10条记录上,如。
SELECT film_id, title, release_year, rating FROM film LIMIT 10;
这个命令将返回过滤后的信息,如下表所示。

例2
在大多数情况下,当限制输出时,最好是按特定的列排序。这样做可以让你对返回的值有一个了解。
例如,我们可以按film_id对前面的例子中的输出进行排序。
下面是一个查询的例子。
SELECT film_id, title, release_year, rating FROM film ORDER BY film_id LIMIT 10;
在这个例子中,结果是按film_id以升序排列的--不像前面的例子,结果是随机排列的。

例3
LIMIT子句有一个朋友。OFFSET子句与LIMIT子句非常相似,但是只跳过指定的行数。
例如,为了从第100行开始计算结果,我们可以将偏移量设置为:。
SELECT film_id, title, release_year, rating FROM film ORDER BY film_id OFFSET 99;
在这个例子中,结果从第100行开始向前。

同样地,将结果按照特定的顺序排列也是很好的方法。
例4
你也可以在同一个查询中使用LIMIT和OFFSET子句。例如,考虑下面的查询。
SELECT film_id, title, release_year, rating FROM film ORDER BY film_id OFFSET 3 LIMIT 10;
LIMIT和OFFSET的顺序是不相关的,因为OFFSET首先被评估,然后是LIMIT子句。

例5
如前所述,你可以使用LIMIT 0,它不会返回任何记录。然而,它确实会返回列的内容。
SELECT * FROM film ORDER BY film_id LIMIT 0;

例6
你也可以将LIMIT子句与ORDER BY结合起来使用,以获得特定数量的最后元素。
例如,为了得到一个表中的最后5个元素,我们可以将ORDER BY子句设置为DESC,并将值限制为5,如:
SELECT film_id, title, release_year, rating FROM film ORDER BY film_id DESC LIMIT 5;
在这个例子中,我们应该得到最后的5个元素,即。

结论
在这个快速指南中,我们讨论了LIMIT和OFFSET子句的作用。我们还使用了几个例子来说明如何利用它的功能来获得自定义的结果。