Cypher 쿼리 가이드
Cypher는 그래프 데이터베이스의 선언적 쿼리 언어입니다. 노드와 관계를 괄호와 화살표 패턴으로 표현해 그래프 데이터를 조회합니다.
D.Hub의 그래프 탐색기에서 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 — 결과 수 제한
반환할 결과 수를 제한합니다. 범위가 넓은 쿼리에는 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") |
결과 표시와 조회 범위
결과 화면 선택
그래프 탐색기의 쿼리 결과는 그래프, 테이블, 텍스트 화면에서 확인합니다. 그래프 화면은 연결 구조를, 테이블 화면은 행과 컬럼을, 텍스트 화면은 원본 결과를 표시합니다.
LIMIT사용: 많은 노드가 반환되면 시각화 성능이 저하됩니다. 쿼리에LIMIT을 지정합니다.- 메타데이터 패널 활용: 왼쪽 패널에서 라벨이나 관계 타입을 누르면 해당 타입의 데이터를 조회합니다.
성능 주의
MATCH (n) RETURN n처럼 전체 그래프를 조회하는 쿼리는 데이터가 많을 경우 브라우저 성능에 영향을 줍니다. LIMIT을 지정하거나 라벨 조건을 추가해야 합니다.