카테고리:

쿼리 구문

LIMIT / FETCH

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

참고 항목:

TOP <n>

구문

-- Postgres syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]

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

사용법 노트

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

  • countstart 는 음이 아닌 정수 상수여야 합니다.

    • count 는 반환되는 행 수를 지정합니다.

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

    • OFFSET start 은 제한된/페치된 행이 어느 행 이후에 반환되는지 행 번호를 선택적으로 지정합니다. OFFSET 을 생략하면 결과 세트의 첫 번째 행에서 출력이 시작됩니다.

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

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

  • TOP <n>LIMIT <카운트> 는 동등합니다.

다음 예는 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