// 변수 없을 때
MATCH (:Person)
Return Person
// 변수 있을 때
MATCH (p:Person)
RETURN p
// 변수만 돌려줌
MATCH (Person)
RETURN Person
관계
관계는 언제나 화살표로 방향을 가지고 있음
방향이 선언되지 않은 경우 MATCH 구문을 사용함
방향이 특정되지 않았다는 것은, 어느 방향으로든 가능하다는 의미
아래 예시는 쿼리문이 아니라 설명임
// 오른쪽 방향 [p:Person]-[:LIKES]->(t:Technology)
// 왼쪽방향 [p:Person]<-[:LIKES]-(t:Technology)
// 방향 없을 때 (p:Person)-[:LIKES]-(t:Technology)
### 관계 타입
* 관계 타입은 자연어 처럼 노드들이 서로 관계하는지를 알려준다
* 관계 타입은 **관계들을 카테고리 화** 시킨다.
* 이는 라벨이 노드들을 하나로 묶는것과 비슷한 역할
* 또한 노드들이 서로 어떻게 관계하는지를 설명한다
```cypher
MATCH (p:Person)-[r:LIKES]->(t:Technology)
RETURN p,r,t
// 프로퍼티 생성
CREATE (p:Person {name:'Sally'})-[r:IS_FRIENDS_WITH]->(p:Person {name:'John'})
RETURN p, r
// 이건 쿼리가 아님
(p:Person {name: "Sally"})-[r:LIKES]->(g:Technology {type: "Graphs"})
쿼리문
// 생성
CREATE (p:Person {name: "Sally"})-[r:LIKES]->(t:Technology {type: "Graphs"})
// 조회
MATCH (p:Person {name: "Sally"})-[r:LIKES]->(t:Technology {type: "Graphs"})
RETURN p,r,t
// 조회
MATCH (p:Product)
RETURN p.productName, p.unitPrice
ORDER BY p.unitPrice DESC
LIMIT 10;
// WHERE 문 이용한 조회
MATCH (p:Product)
WHERE p.productName = 'Chocolade'
RETURN p.productName, p.unitPrice;
// properties 조회
MATCH (p:Product {productName:'Chocolade'})
RETURN p.productName, p.unitPrice;
// IN 이용한 조회
MATCH (p:Product)
WHERE p.productName IN ['Chocolade','Chai']
RETURN p.productName, p.unitPrice;
// LIKE 이용한 조회
MATCH (p:Product)
WHERE p.productName STARTS WITH 'C' AND p.unitPrice > 100
RETURN p.productName, p.unitPrice;
// 정규식을 이용한 조회
MATCH (p:Product)
WHERE p.productName =~ '^C.*'
RETURN p.productName, p.unitPrice
// JOIN 을 이용한 조회
MATCH (p:Product {productName:'Chocolade'})<-[:ORDERS]-(:Order)<-[:PURCHASED]-(c:Customer)
RETURN DISTINCT c.companyName;
OPTIONAL MATCH
optional match는 OUTER JOIN 과 같음
MATCH (c:Customer {companyName:'Drachenblut Delikatessen'}) OPTIONAL MATCH (p:Product)<-[o:ORDERS]-(:Order)<-[:PURCHASED]-(c) RETURN p.productName, toInteger(sum(o.unitPrice * o.quantity)) AS volume ORDER BY volume DESC;
인덱싱
CREATE INDEX Product_productName IF NOT EXISTS FOR (p:Product) ON p.productName;
CREATE INDEX Product_unitPrice IF NOT EXISTS FOR (p:Product) ON p.unitPrice;