본문으로 건너뛰기
버전: v0.1.0

Cypher 쿼리 가이드

Cypher는 그래프 데이터베이스의 선언적 쿼리 언어입니다. SQL이 관계형 데이터베이스를 다루듯, Cypher는 그래프의 노드와 관계를 직관적인 패턴 문법으로 조회하고 조작할 수 있게 해줍니다.

D.Hub의 Graph Explorer에서 Cypher 쿼리를 직접 실행하여 온톨로지 데이터를 탐색할 수 있습니다.

기본 문법

MATCH — 패턴 매칭

그래프에서 특정 패턴에 해당하는 데이터를 찾습니다.

MATCH (n)
RETURN n
LIMIT 25

WHERE — 조건 필터링

MATCH로 찾은 결과에 조건을 적용합니다.

MATCH (p:Person)
WHERE p.age >= 30
RETURN p.name, p.age

RETURN — 결과 반환

조회할 데이터의 형태를 지정합니다. 별칭(AS)을 사용할 수 있습니다.

MATCH (p:Person)
RETURN p.name AS 이름, p.age AS 나이

ORDER BY — 정렬

결과를 특정 속성 기준으로 정렬합니다.

MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC

LIMIT — 결과 수 제한

반환되는 결과의 개수를 제한합니다. 대량 데이터 조회 시 반드시 사용을 권장합니다.

MATCH (n)
RETURN n
LIMIT 100

노드 패턴

노드는 소괄호 ()로 표현합니다. 라벨과 속성을 지정할 수 있습니다.

패턴설명
(n)임의의 노드
(p:Person)Person 라벨을 가진 노드
(p:Person {name: "Alice"})특정 속성값을 가진 노드
(n:Person:Employee)복수 라벨을 가진 노드

관계 패턴

관계는 대괄호 []와 화살표 ->, <-로 표현합니다.

패턴설명
(a)-[r]->(b)a에서 b로의 관계
(a)<-[r]-(b)b에서 a로의 관계
(a)-[r]-(b)방향 무관
(a)-[:BOUGHT]->(b)BOUGHT 타입 관계
(a)-[*1..3]->(b)1~3 홉 거리의 가변 길이 관계

자주 사용하는 쿼리 패턴

1. 모든 노드 조회

MATCH (n)
RETURN n
LIMIT 100

2. 특정 라벨의 노드 조회

MATCH (p:Person)
RETURN p
LIMIT 50

3. 속성 조건으로 필터링

MATCH (p:Product)
WHERE p.price > 10000 AND p.category = "Electronics"
RETURN p.name, p.price
ORDER BY p.price DESC

4. 관계를 통한 연결 탐색

MATCH (c:Customer)-[:PURCHASED]->(p:Product)
RETURN c.name, p.name
LIMIT 50

5. 다중 관계 경로 탐색

MATCH (a:Person)-[:WORKS_FOR]->(company:Organization)-[:LOCATED_IN]->(city:City)
RETURN a.name, company.name, city.name

6. 최단 경로 찾기

MATCH path = shortestPath(
(a:Person {name: "Alice"})-[*]-(b:Person {name: "Bob"})
)
RETURN path

7. N-hop 이웃 조회

MATCH (start:Person {name: "Alice"})-[*1..2]-(neighbor)
RETURN DISTINCT neighbor
LIMIT 50

8. 집계 — 노드 개수 세기

MATCH (n)
RETURN labels(n) AS label, count(*) AS count
ORDER BY count DESC

9. 집계 — 관계별 통계

MATCH ()-[r]->()
RETURN type(r) AS relationship, count(*) AS count
ORDER BY count DESC

10. 그룹별 상위 N건 조회

MATCH (c:Customer)-[:PURCHASED]->(p:Product)
RETURN c.name, count(p) AS purchase_count
ORDER BY purchase_count DESC
LIMIT 10

11. 패턴 존재 여부 확인

MATCH (p:Person)
WHERE EXISTS {
MATCH (p)-[:PURCHASED]->(:Product {category: "Books"})
}
RETURN p.name

12. 리스트 수집 및 활용

MATCH (c:Customer)-[:PURCHASED]->(p:Product)
RETURN c.name, collect(p.name) AS purchased_products
LIMIT 20

유용한 내장 함수

함수설명예시
count()개수 세기count(n)
collect()결과를 리스트로 수집collect(n.name)
labels()노드의 라벨 조회labels(n)
type()관계 타입 조회type(r)
properties()모든 속성을 맵으로 조회properties(n)
size()리스트 크기size(collect(n))
coalesce()NULL일 때 대체값 반환coalesce(n.name, "Unknown")
toUpper()대문자 변환toUpper(n.name)
toString()문자열 변환toString(n.age)
date()날짜 생성date("2025-01-01")

Graph Explorer에서 사용 시 팁

결과 뷰 활용

Graph Explorer에서 쿼리 결과는 그래프, 테이블, 텍스트 3가지 뷰로 확인할 수 있습니다. 구조 파악에는 그래프 뷰, 데이터 분석에는 테이블 뷰, 디버깅에는 텍스트 뷰가 적합합니다.

  • LIMIT 사용 습관화: 대량의 노드가 반환되면 시각화 성능이 저하됩니다. 항상 LIMIT을 붙여주세요.
  • 메타데이터 패널 활용: 왼쪽 패널에서 라벨이나 관계 타입을 클릭하면 해당 타입의 데이터를 바로 조회할 수 있습니다.
  • 확장 탐색: 그래프 뷰에서 노드를 더블클릭하면 연결된 이웃 노드를 추가로 조회합니다.
성능 주의

MATCH (n) RETURN n처럼 전체 그래프를 조회하는 쿼리는 데이터가 많을 경우 브라우저 성능에 영향을 줄 수 있습니다. 반드시 LIMIT을 지정하거나 라벨 조건을 추가하세요.