{#skip-and-limit-skip-and-limit} # SKIP과 LIMIT {bdg-primary-line}`GQL 절` 작업 행을 페이지로 나눕니다. `SKIP`은 앞쪽 행을 버리고, `LIMIT`은 남길 행 수의 상한을 정합니다. `OFFSET`은 `SKIP`과 같은 뜻입니다. {#skip-and-limit-synopsis} ## 개요
{ SKIP | OFFSET } count
LIMIT count

굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.

{#skip-and-limit-description} ## 설명 `SKIP`과 `LIMIT`은 그 자체로 절이므로, 둘 중 어느 것이든 파이프라인의 어디서나 행을 페이지로 나눌 수 있습니다. [`RETURN`](return.md)이나 [`WITH`](with.md) 뒤에 쓰거나 [`MATCH`](match.md) 바로 뒤에 쓰십시오. 둘 중 하나만 써도 됩니다. - `SKIP`**과** `OFFSET`은 같은 절입니다. 선호하는 표기를 쓰십시오. ISO/IEC 39075가 먼저 나열하는 것은 `OFFSET`입니다. - *count*는 리터럴만이 아니라 표현식이며, 한 번 평가됩니다. - 음수인 개수는 오류입니다. 행 수보다 큰 개수는 오류가 아닙니다. 끝을 넘어선 `SKIP`은 행을 내놓지 않고, 끝을 넘어선 `LIMIT`은 전부를 내놓습니다. - 소수인 개수는 가장 가까운 정수로 반올림됩니다. - 두 절 모두 쿼리를 **시작**할 수 없고, 혼자서 쿼리를 끝낼 수도 없습니다. 쿼리는 여전히 `RETURN`, `FINISH`, 또는 쓰기 절로 끝나야 합니다. - [`ORDER BY`](order-by.md)가 없으면 어느 행을 받는지가 정해져 있지 않습니다. 페이지가 일정해야 한다면 언제든 먼저 정렬하십시오. - 투영 뒤에 쓸 때는 수정자를 `ORDER BY`, `SKIP`/`OFFSET`, `LIMIT` 순서로 써야 합니다. [참고](#skip-and-limit-notes)를 보십시오. {#skip-and-limit-parameters} ## 매개변수 count : 음수가 아닌 정수 표현식입니다. `SKIP`은 앞에서 그만큼의 행을 버리고, `LIMIT`은 최대 그만큼의 행을 남깁니다. {#skip-and-limit-examples} ## 예제 모든 예제는 [예제 데이터셋](../../get_started/example-dataset.md)에서 실행됩니다. {#skip-and-limit-take-the-first-few-rows} ### 앞의 몇 행만 취하기 ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film LIMIT 2; ``` ``` film ---------------- "Avatar" "Blade Runner" (2 rows) ``` {#skip-and-limit-take-a-page-from-the-middle} ### 가운데에서 한 페이지 취하기 ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film SKIP 2 LIMIT 3; ``` ``` film --------------------- "Blade Runner 2049" "Elysium" "Gattaca" (3 rows) ``` `OFFSET`도 같게 읽힙니다: ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film OFFSET 2 LIMIT 3; ``` ``` film --------------------- "Blade Runner 2049" "Elysium" "Gattaca" (3 rows) ``` {#skip-and-limit-compute-the-count} ### 개수를 계산하기 어떤 표현식이든 됩니다: ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film SKIP 1+1 LIMIT 2; ``` ``` film --------------------- "Blade Runner 2049" "Elysium" (2 rows) ``` 소수는 반올림됩니다. `LIMIT 1.5`는 두 행을 남깁니다: ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film LIMIT 1.5; ``` ``` film ---------------- "Avatar" "Blade Runner" (2 rows) ``` {#skip-and-limit-page-past-the-end} ### 끝을 넘어서 페이지 넘기기 ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film SKIP 20; ``` ``` film ------ (0 rows) ``` 영화가 18편이므로 남는 것이 없습니다. 같은 쿼리에 `LIMIT 100`을 쓰면 실패하는 것이 아니라 18편 전부를 반환합니다. {#skip-and-limit-cut-the-pipeline-down-mid-query} ### 쿼리 도중에 파이프라인을 줄이기 `MATCH` 뒤의 `LIMIT`은 뒤따르는 절이 조인해야 하는 행 수를 줄입니다: ```cypher MATCH (m:movie) ORDER BY m.year DESC LIMIT 2 MATCH (p:person)-[:directed]->(m) RETURN m.title AS film, p.name AS director ORDER BY film; ``` ``` film | director ----------------------------+-------------------- "Blade Runner 2049" | "Denis Villeneuve" "The Matrix Resurrections" | "Lana Wachowski" (2 rows) ``` {#skip-and-limit-reject-a-negative-count} ### 음수인 개수는 거부된다 ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film LIMIT -1; ``` ``` ERROR: LIMIT must not be negative ``` ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film SKIP -1; ``` ``` ERROR: OFFSET must not be negative ``` `SKIP`이 자신을 `OFFSET`으로 보고하는 것은 그 둘이 하나의 절이기 때문입니다. {#skip-and-limit-where-they-cannot-go} ### 놓일 수 없는 자리 두 절 모두 쿼리를 시작할 수 없습니다: ```cypher LIMIT 3; ``` ``` ERROR: syntax error at or near "LIMIT" LINE 1: LIMIT 3; ^ ``` 그리고 둘 다 쿼리를 닫지 못합니다: ```cypher MATCH (m:movie) LIMIT 3; ``` ``` ERROR: Cypher query must end with RETURN, FINISH or update clause ``` {#skip-and-limit-notes} ## 참고 투영 뒤에서는 수정자를 `ORDER BY`, 그다음 `SKIP`/`OFFSET`, 그다음 `LIMIT` 순서로 쓰십시오. 그 순서만 투영 안으로 접혀 들어갑니다. `LIMIT`을 `SKIP`보다 앞에 두면 뒤에 남은 `SKIP`이 그 자체로 하나의 절로 읽히므로, 그 쿼리는 더 이상 투영으로 끝나지 않습니다. 오류가 보고하는 것이 그것입니다: ```cypher MATCH (m:movie) RETURN m.title AS film ORDER BY film LIMIT 3 SKIP 2; ``` ``` ERROR: Cypher query must end with RETURN, FINISH or update clause ``` 파이프라인 가운데에서는 두 순서 모두 파싱되고, 뜻이 서로 다릅니다. 각 절은 그 앞의 절이 내놓은 행에 적용됩니다. 먼저 건너뛰면 세 번째부터 여섯 번째 행을 취합니다: ```cypher MATCH (m:movie) ORDER BY m.title SKIP 2 LIMIT 4 RETURN m.title AS film; ``` ``` film --------------------- "Blade Runner 2049" "Elysium" "Gattaca" "Inception" (4 rows) ``` 먼저 제한하면 네 행으로 잘라 낸 뒤 그중 둘을 건너뛰어 두 행이 남습니다: ```cypher MATCH (m:movie) ORDER BY m.title LIMIT 4 SKIP 2 RETURN m.title AS film; ``` ``` film --------------------- "Blade Runner 2049" "Elysium" (2 rows) ``` {#skip-and-limit-compatibility} ## 호환성 {#skip-and-limit-skip-and-offset-isoiec-39075-1619} ### SKIP과 OFFSET (ISO/IEC 39075 §16.19) 표준의 ``은 `OFFSET | SKIP`이므로 두 표기 모두 표준에 맞습니다. openCypher에는 `SKIP`만 있습니다. {#skip-and-limit-see-also} ## 관련 항목 - [`ORDER BY`](order-by.md) — 먼저 정렬해 페이지를 재현 가능하게 만들기 - [`RETURN`](return.md), [`WITH`](with.md) — 이 절들이 페이지로 나누는 투영 - [`MATCH`](match.md) — 작업을 줄이려고 파이프라인 도중에 페이지 나누기