WITH를 사용하면 다음 쿼리 부분으로 전달되기 전에 출력을 조작할 수 있고, 결과 집합의 항목 수 및/또는 모양을 조작할 수 있음
WITH의 일반적인 용도
다른 MATCH 절에 전달되는 항목 수를 제한
ORDER BY와 LIMIT를 결합하면 몇 가지 기준에 따라 상위 X개 항목을 가져온 다음 그래프에서 추가 데이터를 가져올 수 있음
다음 쿼리 부분에서 사용할 표현식의 결과를 포함하는 새 변수를 도입하는 데 사용할 수 있음
편의상 와일드카드 *는 현재 범위에 있는 모든 변수로 확장되어 다음 쿼리 부분으로 전달 됨
집계된 값을 필터링
WITH는 WHERE의 술어에서 사용할 수 있는 집계를 도입하는 데 사용되며 이러한 집계 식은 결과에 새 바인딩을 만듬
판독값을 그래프 업데이트와 분리하는데 사용
쿼리의 모든 부분은 읽기 전용이거나 쓰기 전용이어야 하며 쓰기 부분에서 읽기 부분으로 이동할 때 반드시 WITH 절로 전환해야 함
MATCH (george {name: 'George'})<--(otherPerson)
WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName
WHERE upperCaseName STARTS WITH 'C'
RETURN otherPerson.name
MATCH (person)-[r]->(otherPerson)
WITH *, type(r) AS connectionType
RETURN person.name, otherPerson.name, connectionType
MATCH (david {name: 'David'})--(otherPerson)-->()
WITH otherPerson, count(*) AS foaf
WHERE foaf > 1
RETURN otherPerson.name
MATCH (n)
WITH n
ORDER BY n.name DESC
LIMIT 3
RETURN collect(n.name)
MATCH (n {name: 'Anders'})--(m)
WITH m
ORDER BY m.name DESC
LIMIT 1
MATCH (m)--(o)
RETURN o.name