SKIP과 LIMIT#
GQL 절
작업 행을 페이지로 나눕니다. SKIP은 앞쪽 행을 버리고, LIMIT은 남길 행 수의 상한을 정합니다.
OFFSET은 SKIP과 같은 뜻입니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
SKIP과 LIMIT은 그 자체로 절이므로, 둘 중 어느 것이든 파이프라인의 어디서나 행을 페이지로 나눌
수 있습니다. RETURN이나 WITH 뒤에 쓰거나 MATCH 바로 뒤에
쓰십시오. 둘 중 하나만 써도 됩니다.
SKIP과OFFSET은 같은 절입니다. 선호하는 표기를 쓰십시오. ISO/IEC 39075가 먼저 나열하는 것은OFFSET입니다.count는 리터럴만이 아니라 표현식이며, 한 번 평가됩니다.
음수인 개수는 오류입니다. 행 수보다 큰 개수는 오류가 아닙니다. 끝을 넘어선
SKIP은 행을 내놓지 않고, 끝을 넘어선LIMIT은 전부를 내놓습니다.소수인 개수는 가장 가까운 정수로 반올림됩니다.
두 절 모두 쿼리를 시작할 수 없고, 혼자서 쿼리를 끝낼 수도 없습니다. 쿼리는 여전히
RETURN,FINISH, 또는 쓰기 절로 끝나야 합니다.ORDER BY가 없으면 어느 행을 받는지가 정해져 있지 않습니다. 페이지가 일정해야 한다면 언제든 먼저 정렬하십시오.투영 뒤에 쓸 때는 수정자를
ORDER BY,SKIP/OFFSET,LIMIT순서로 써야 합니다. 참고를 보십시오.
매개변수#
- count
음수가 아닌 정수 표현식입니다.
SKIP은 앞에서 그만큼의 행을 버리고,LIMIT은 최대 그만큼의 행을 남깁니다.
예제#
모든 예제는 예제 데이터셋에서 실행됩니다.
앞의 몇 행만 취하기#
MATCH (m:movie)
RETURN m.title AS film
ORDER BY film
LIMIT 2;
film
----------------
"Avatar"
"Blade Runner"
(2 rows)
가운데에서 한 페이지 취하기#
MATCH (m:movie)
RETURN m.title AS film
ORDER BY film
SKIP 2
LIMIT 3;
film
---------------------
"Blade Runner 2049"
"Elysium"
"Gattaca"
(3 rows)
OFFSET도 같게 읽힙니다:
MATCH (m:movie)
RETURN m.title AS film
ORDER BY film
OFFSET 2
LIMIT 3;
film
---------------------
"Blade Runner 2049"
"Elysium"
"Gattaca"
(3 rows)
개수를 계산하기#
어떤 표현식이든 됩니다:
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는 두 행을 남깁니다:
MATCH (m:movie)
RETURN m.title AS film
ORDER BY film
LIMIT 1.5;
film
----------------
"Avatar"
"Blade Runner"
(2 rows)
끝을 넘어서 페이지 넘기기#
MATCH (m:movie)
RETURN m.title AS film
ORDER BY film
SKIP 20;
film
------
(0 rows)
영화가 18편이므로 남는 것이 없습니다. 같은 쿼리에 LIMIT 100을 쓰면 실패하는 것이 아니라 18편
전부를 반환합니다.
쿼리 도중에 파이프라인을 줄이기#
MATCH 뒤의 LIMIT은 뒤따르는 절이 조인해야 하는 행 수를 줄입니다:
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)
음수인 개수는 거부된다#
MATCH (m:movie) RETURN m.title AS film ORDER BY film LIMIT -1;
ERROR: LIMIT must not be negative
MATCH (m:movie) RETURN m.title AS film ORDER BY film SKIP -1;
ERROR: OFFSET must not be negative
SKIP이 자신을 OFFSET으로 보고하는 것은 그 둘이 하나의 절이기 때문입니다.
놓일 수 없는 자리#
두 절 모두 쿼리를 시작할 수 없습니다:
LIMIT 3;
ERROR: syntax error at or near "LIMIT"
LINE 1: LIMIT 3;
^
그리고 둘 다 쿼리를 닫지 못합니다:
MATCH (m:movie) LIMIT 3;
ERROR: Cypher query must end with RETURN, FINISH or update clause
참고#
투영 뒤에서는 수정자를 ORDER BY, 그다음 SKIP/OFFSET, 그다음 LIMIT 순서로 쓰십시오. 그
순서만 투영 안으로 접혀 들어갑니다. LIMIT을 SKIP보다 앞에 두면 뒤에 남은 SKIP이 그 자체로
하나의 절로 읽히므로, 그 쿼리는 더 이상 투영으로 끝나지 않습니다. 오류가 보고하는 것이 그것입니다:
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
파이프라인 가운데에서는 두 순서 모두 파싱되고, 뜻이 서로 다릅니다. 각 절은 그 앞의 절이 내놓은 행에 적용됩니다. 먼저 건너뛰면 세 번째부터 여섯 번째 행을 취합니다:
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)
먼저 제한하면 네 행으로 잘라 낸 뒤 그중 둘을 건너뛰어 두 행이 남습니다:
MATCH (m:movie) ORDER BY m.title LIMIT 4 SKIP 2 RETURN m.title AS film;
film
---------------------
"Blade Runner 2049"
"Elysium"
(2 rows)
호환성#
SKIP과 OFFSET (ISO/IEC 39075 §16.19)#
표준의 <offset synonym>은 OFFSET | SKIP이므로 두 표기 모두 표준에 맞습니다. openCypher에는
SKIP만 있습니다.