Neo4j Cypher 쿼리
Cypher 키워드
대부분의 프로그래밍 언어와 마찬가지로 Cypher에는 쿼리 부분의 특정 작업을 위해 예약된 몇 개의 단어가 있다. Neo4j에서 데이터를 생성, 읽기, 업데이트 또는 삭제할 수 있어야 하며 키워드는 이러한 기능을 수행하는데 도움이 된다. 두 가지 일반적인 키워드에 대해 자세히 살펴보겠다(자세한 내용은 이후에 가이드에서 다룰 예정이다).
MATCH
Cypher의 MATCH
키워드는 데이터베이스에서 기존 노드, 관계, 레이블, 속성 또는 패턴을 검색하는 것이다. SQL에 익숙하다면 SQL에서의 SELECT
와 MATCH
는 거의 비슷하게 동작한다.
MATCH
를 사용하여 데이터베이스에서 모든 노드 레이블을 찾고, 특정 노드를 검색하고, 특정 관계가 있는 모든 노드를 찾아 내며, 노드 및 관계의 패턴을 찾는 등의 작업을 수행할 수 있다.
RETURN
Cypher의 RETURN
키워드는 Cypher 쿼리에서 반환할 수 있는 값 또는 결과를 지정한다. 쿼리 결과에서 노드, 관계, 노드 및 관계 속성 또는 패턴을 반환하도록 Cypher에 지시할 수 있고, 데이터 저장을 수행할 때는 필요하지 않지만, 읽기에는 필요하다.
RETURN
는 노드 및 관계 변수를 사용할 때 중요해진다. 노드, 관계, 속성 또는 패턴을 다시 가져오려면 반환하려는 데이터에 대해 MATCH
절에 변수를 지정해야 한다.
사이퍼 예제
MATCH
, RETURN
키워드를 사용하여 지금까지 배운 구문의 몇 가지 예를 살펴보겠다. 각 예제는 우리가 하고자 하는 것에 대한 설명으로 시작하고 Neo4j 브라우저에서 실행된 쿼리 결과 아래에 이미지를 보여준다.
-
예제 1: Person 그래프에서 레이블이 지정된 노드를 찾는다.
RETURN
에서Person
노드를 검색하려면, 노드에 대해p
와 같은 변수를 사용해야 한다.MATCH (p:Person) RETURN p LIMIT 1
-
예제 2:
Person
그래프에서 이름이 ‘Tom Hanks’인 노드를 찾는다. 나중에 같은 이름을 참조하는 한 변수 이름을 원하는 대로 지정할 수 있다.MATCH (tom:Person {name: 'Tom Hanks'}) RETURN tom
-
예제 3: Tom Hanks가 감독한
Movie
를 찾는다.MATCH (:Person {name: 'Tom Hanks'})-[:DIRECTED]->(movie:Movie) RETURN movie
-
예제 4: Tom Hanks가 감독한 것을 찾지만 이번에는 영화 제목만 반환한다.
MATCH (:Person {name: 'Tom Hanks'})-[:DIRECTED]->(movie:Movie) RETURN movie.title
별칭 반환 값
모든 속성이 movie.title
위의 예와 같이 단순하지는 않다. 일부 속성은 속성 길이, 여러 단어로 된 설명, 개발자 전문 용어 및 기타 단축키로 인해 이름이 잘못되었다. 이러한 명명 규칙은 특히 보고서 및 기타 사용자 대면 인터페이스에서 끝나는 경우 읽기 어려울 수 있다.
// 이름이 좋지 않은 속성
MATCH (tom:Person {name:'Tom Hanks'})-[rel:DIRECTED]-(movie:Movie)
RETURN tom.name, tom.born, movie.title, movie.released
SQL과 마찬가지로 AS
키워드를 사용하고 더 간단한 이름으로 속성의 별칭을 지정하여, 반환 결과의 이름을 바꿀 수 있다. 고객의 주문과 주문 항목 수를 나열하는 목업 예제를 볼 수 있다.
SQL과 마찬가지로 AS
키워드를 사용하고 속성에 더 간편한 이름으로 별칭을 지정하여 결과의 변수명을 바꿀 수 있음
고객의 주문과 주문의 항목 수를 나열하기 위한 예제
//cleaner printed results with aliasing
MATCH (tom:Person {name:'Tom Hanks'})-[rel:DIRECTED]-(movie:Movie)
RETURN tom.name AS name, tom.born AS `Year Born`, movie.title AS title, movie.released AS `Year Released`
별칭 앞뒤에 백틱(`) 문자를 사용하여 공백이 있는 반환 별칭을 지정할 수 있다(
movie.released AS `Year Released`
). 공백이 포함된 별칭이 없으면 백틱을 사용할 필요가 없다.