提要:本教程将介绍如何通过 LIMIT 子句,从 SELECT 查询结果中,获取子集。

PostgreSQL LIMIT 子句简介

PostgreSQL 的 LIMITSELECT 语句的可选子句,它获取查询返回的行的子集。

其语法如下:

SELECT
 *
FROM
 table_name
LIMIT n;

上面的语句将返回查询中的 n 行数据。如果这个 n0NULL,那么,结果和省略 LIMIT 是一样的。

如果要在返回 n 行前跳过若干行,可以使用 LIMITOFFSET子句,如下所示:

SELECT
 *
FROM
 table
LIMIT n OFFSET m;

这个语句在返回 n 行数据前,会先跳过 m 行。如果 m0,那它的结果和省略 OFFSET 是一样的。

MySQL用户注意:在 MySQL 中,使用 LIMIT m,n 实现类似的功能。在 PostgreSQL 是不能使用 LIMIT m,n 形式的,会得到类似以下的错误信息:

[SQL]SELECT * FROM sjk66 LIMIT 10,20;

[Err] 错误:  不支持 LIMIT #,# 语法
LINE 1: SELECT * FROM sjk66 LIMIT 10,20;
                            ^
HINT:  LIMIT和OFFSET子句要分隔开

由于数据库表中的行的顺序是不可预知的,所以当您使用 LIMIT 子句时,应始终使用 ORDER BY 子句来控制行的顺序。如果你不这样做,你会得到一个不可预知的结果集。

如果将 OFFSET 设置过大,可能导致性能下降,因为即使没有返回跳过的行,PostgreSQL 仍然需要计算数据库服务器内 OFFSET 跳过的行。

PostgreSQL LIMIT 示例

下面,通过一些示例来理解 PostgreSQL 的 LIMIT 子句。我们将使用示例数据库里的 film 表来作演示。

film表结构

使用以下语句,可以获取到经过 film_id 排序后的前 5 行数据:

SELECT
 film_id,
 title,
 release_year
FROM
 film
ORDER BY
 film_id
LIMIT 5;

film_id limit 5

要在跳过 3 行后,获取 4 行记录,使用以下语句。同样的,也是使用 film_id 排序:

SELECT
 film_id,
 title,
 release_year
FROM
 film
ORDER BY
 film_id
LIMIT 4 OFFSET 3;

film_id limit 4 offset 3

我们经常使用 LIMIT 子句来获取表中,特定数量的,某项最高或最低的数据,比如,获取租金最贵的 10 部电影。首先,要以 rental_rate (租金)字段进行倒序排序(DESC),然后从中选出前10名(LIMIT 10),SQL 语句如下:

SELECT
 film_id,
 title,
 rental_rate
FROM
 film
ORDER BY
 rental_rate DESC
LIMIT 10;

租金最贵的10部电影

相关主题

上一篇:PostgreSQL的WHERE
下一篇:PostgreSQL的LIKE