LIMIT keyword
Specify the number and position of records returned by a SELECT statement.
Other implementations of SQL sometimes use clauses such as OFFSET or ROWNUM.
Our implementation uses LIMIT for both the offset from start and limit.
Syntax
numberOfRecordsis the number of records to return.upperBoundandlowerBoundis the range of records to return.
Here's the exhaustive list of supported combinations of arguments. m and n
are positive numbers, and negative numbers are explicitly labeled -m and -n.
LIMIT n: take the firstnrecordsLIMIT -n: take the lastnrecordsLIMIT m, n: skip the firstmrecords, then take up to record numbern(inclusive)- result is the range of records
(m, n]number 1 denoting the first record - if
m > n, implicitly swap the arguments - PostgreSQL equivalent:
OFFSET m LIMIT (n-m)
- result is the range of records
LIMIT -m, -n: take the lastmrecords, then drop the lastnrecords from that- result is the range of records
[-m, -n), number -1 denoting the last record - if
m < n, implicitly swap them
- result is the range of records
LIMIT m, -n: drop the firstmand the lastnrecords. This gives you the range(m, -n). These arguments will not be swapped.
These are additional edge-case variants:
LIMIT n, 0=LIMIT 0, n=LIMIT n,=LIMIT , n=LIMIT nLIMIT -n, 0=LIMIT -n,=LIMIT -n
Examples
Examples use this schema and dataset:
CREATE TABLE tango (id LONG);
INSERT INTO tango VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
First 5 records
SELECT * FROM tango LIMIT 5;
id
----
1
2
3
4
5
Last 5 records
SELECT * FROM tango LIMIT -5;
id
----
6
7
8
9
10
Records 3, 4, and 5
SELECT * FROM tango LIMIT 2, 5;
id
----
3
4
5
Records -5 and -4
SELECT * FROM tango LIMIT -5, -3;
id
----
6
7
Records 3, 4, ..., -3, -2
SELECT * FROM tango LIMIT 2, -1;
id
----
3
4
5
6
7
8
9
Implicit argument swap, records 3, 4, 5
SELECT * FROM tango LIMIT 5, 2;
id
----
3
4
5
Implicit argument swap, records -5 and -4
SELECT * FROM tango LIMIT -3, -5;
id
----
6
7