25분
OPTIONAL MATCH & 서브쿼리
Cypher 패턴 매칭 & 관계 탐색
OPTIONAL MATCH & 서브쿼리
그래프 이론 & Neo4j 입문 > Cypher 패턴 매칭 & 관계 탐색
SQL의 LEFT JOIN을 그래프에서 구현하기
왜 중요한가?
MATCH는 패턴이 존재하는 경우만 반환합니다. 하지만 실무에서는 **"없는 경우도 포함"**해야 할 때가 많습니다.
예: "모든 직원 목록 + 프로젝트 배정 정보 (미배정 포함)"
OPTIONAL MATCH는 SQL의 LEFT JOIN과 같은 역할을 합니다. 패턴이 없으면 null을 반환합니다.
또한 Neo4j 5부터 지원하는 CALL 서브쿼리를 사용하면 복잡한 집계를 깔끔하게 작성할 수 있습니다.
핵심 개념
OPTIONAL MATCH 기본
에디터 로딩 중...
SQL LEFT JOIN과의 비교
에디터 로딩 중...
OPTIONAL MATCH 실전 패턴
에디터 로딩 중...
CALL 서브쿼리 (Neo4j 4.1+)
에디터 로딩 중...
UNION & UNWIND
에디터 로딩 중...
자주 하는 실수
자주 하는 실수
| 실수 | 문제 | 올바른 방법 |
|---|---|---|
| OPTIONAL MATCH 후 WHERE로 null 필터 | LEFT JOIN의 의미가 사라짐 | WHERE를 OPTIONAL MATCH 안에 넣기 |
| UNION에서 컬럼 수/이름 불일치 | 에러 발생 | 반드시 같은 컬럼 이름과 수 |
| CALL 서브쿼리에서 WITH 누락 | 외부 변수 접근 불가 | 첫 줄에 WITH 명시 |
| UNWIND 빈 리스트 | 행이 0개로 사라짐 | CASE WHEN 또는 COALESCE 사용 |
에디터 로딩 중...
핵심 포인트
- • OPTIONAL MATCH = SQL LEFT JOIN (없으면 null 반환)
- • COALESCE(값, 대체값)로 null 처리
- • CALL 서브쿼리로 복잡한 집계 깔끔하게 작성
- • EXISTS { } 서브쿼리로 존재 여부 확인
- • COUNT { } 서브쿼리로 개수 조건 필터
- • UNION: 결과 합침 (같은 컬럼 필수)
- • UNWIND: 리스트를 개별 행으로 펼침