카테고리:

쿼리 구문

LIMIT / FETCH

문 또는 하위 쿼리에서 반환되는 최대 행 수를 제한합니다. LIMIT(PostgreSQL 구문) 및 FETCH(ANSI 구문)가 둘 다 지원되며 동일 결과를 생성합니다.

참고 항목:

TOP <n>

구문

PostgreSQL 구문

SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]
Copy

ANSI 구문

SELECT ...
FROM ...
[ ORDER BY ... ]
[ OFFSET <start> ] [ { ROW | ROWS } ] FETCH [ { FIRST | NEXT } ] <count> [ { ROW | ROWS } ] [ ONLY ]
[ ... ]
Copy

매개 변수

count

반환되는 행 수입니다. 음이 아닌 정수 상수여야 합니다.

NULL, 빈 문자열(''), $$$$ 값도 허용되며 “무제한”으로 처리됩니다. 이는 문에 매개 변수를 동적으로 바인딩할 때 불완전한 매개 변수 목록을 수신하는 경우의 커넥터 및 드라이버(예: JDBC 드라이버)에 주로 유용합니다.

OFFSET start

제한되거나 가져온 행이 반환되는 기준 행 번호입니다. 음이 아닌 정수 상수여야 합니다.

OFFSET 을 생략하면 결과 세트의 첫 번째 행에서 출력이 시작됩니다.

NULL, 빈 문자열(''), $$$$ 값도 허용되며 0으로 처리됩니다(즉, 행을 건너뛰지 않음). 이는 문에 매개 변수를 동적으로 바인딩할 때 불완전한 매개 변수 목록을 수신하는 경우의 커넥터 및 드라이버(예: JDBC 드라이버)에 주로 유용합니다.

ONLY

출력에 영향을 주지 않는 선택적 키워드입니다. 이는 읽는 사람에게 강조하기 위한 용도로 사용됩니다.

사용법 노트

  • ORDER BY 절은 필요하지 않습니다. 그러나 ORDER BY 절이 없으면 결과는 비결정적입니다. 쿼리 결과가 반드시 특정 순서로 되어 있지는 않기 때문입니다. 반환된 결과를 제어하려면 ORDER BY 절을 사용하십시오.

  • TOP n 및 LIMIT count 는 동등합니다.

  • LIMIT 절과 SAMPLE 절은 모두 테이블에서 행 중 일부를 반환합니다. LIMIT 절을 사용할 경우 Snowflake는 가능한 가장 빠른 방법으로 지정된 수의 행을 반환합니다. SAMPLE 절을 사용할 경우 Snowflake는 해당 절에 지정된 샘플링 방법에 따라 행을 반환합니다.

다음 예는 LIMIT의 효과를 보여줍니다. 단순화를 위해 이러한 쿼리는 ORDER BY 절을 생략하며, 출력 순서가 첫 번째 쿼리에 표시된 것과 항상 동일하다고 가정합니다. 실제 쿼리에는 ORDER BY가 포함되어야 합니다.

select c1 from testtable;

+------+
|   C1 |
|------|
|    1 |
|    2 |
|    3 |
|   20 |
|   19 |
|   18 |
|    1 |
|    2 |
|    3 |
|    4 |
| NULL |
|   30 |
| NULL |
+------+

select c1 from testtable limit 3 offset 3;

+----+
| C1 |
|----|
| 20 |
| 19 |
| 18 |
+----+

select c1 from testtable order by c1;

+------+
|   C1 |
|------|
|    1 |
|    1 |
|    2 |
|    2 |
|    3 |
|    3 |
|    4 |
|   18 |
|   19 |
|   20 |
|   30 |
| NULL |
| NULL |
+------+

select c1 from testtable order by c1 limit 3 offset 3;

+----+
| ID |
|----|
|  2 |
|  3 |
|  3 |
+----+
Copy

아래 예는 다음을 나타내기 위해 NULL을 사용하는 방법을 보여줍니다.

  • 행 수에 제한이 없습니다.

  • 행 1에서 시작합니다(행을 건너뛰지 않음)

    CREATE TABLE demo1 (i INTEGER);
    INSERT INTO demo1 (i) VALUES (1), (2);
    
    Copy
    SELECT * FROM demo1 ORDER BY i LIMIT NULL OFFSET NULL;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    Copy
    SELECT * FROM demo1 ORDER BY i LIMIT '' OFFSET '';
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    Copy
    SELECT * FROM demo1 ORDER BY i LIMIT $$$$ OFFSET $$$$;
    +---+
    | I |
    |---|
    | 1 |
    | 2 |
    +---+
    
    Copy