LIMIT | FETCH FIRST
LIMIT和FETCH FIRST都可以限制结果集中的行数。Limit和offset可以配合使用进行分页查询。
LIMIT
LIMIT { count | ALL }
下面的查询限制返回的行数为5:
SELECT * FROM fruit LIMIT 5;
LIMIT ALL 与省略LIMIT的作用一样。
FETCH FIRST
FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES
FETCH FIRST支持FIRST或NEXT关键字以及ROW或ROWS关键字。这些关键字等效,不影响query执行。
- 如果FETCH FIRST未指定数量,默认为1:
SELECT orderdate FROM orders FETCH FIRST ROW ONLY; orderdate -------------- 2020-11-11 SELECT * FROM new_orders FETCH FIRST 2 ROW ONLY; orderkey | orderstatus | totalprice | orderdate --------------|-------------|------------|-------------- 202011181113 | online | 9527.0 | 2020-11-11 202011181114 | online | 666.0 | 2020-11-11 (2 rows)
- 如果使用了OFFSET,则LIMIT或FETCH FIRST会在OFFSET之后应用于结果集:
SELECT * FROM (VALUES 5, 2, 4, 1, 3) t(x) ORDER BY x OFFSET 2 FETCH FIRST ROW ONLY; x --- 3 (1 row)
- 对于FETCH FIRST子句,参数ONLY或WITH TIES控制结果集中包含哪些行。
如果指定了ONLY参数,则结果集将限制为包含参数数量的前若干行。
如果指定了WITH TIES参数,则要求必须带ORDER BY子句。其结果集中包含符合条件的前若干行基本结果集以及额外的行。这些额外的返回行与基本结果集中最后一行的ORDER BY的参数一样:
CREATE TABLE nation (name varchar, regionkey integer); insert into nation values ('ETHIOPIA',0),('MOROCCO',0),('ETHIOPIA',2),('KENYA',2),('ALGERIA',0),('MOZAMBIQUE',0); --返回regionkey与第一条相同的所有记录。 SELECT name, regionkey FROM nation ORDER BY regionkey FETCH FIRST ROW WITH TIES; name | regionkey ------------|----------- ALGERIA | 0 ETHIOPIA | 0 MOZAMBIQUE | 0 MOROCCO | 0 (4 rows)