25

OPTIONAL MATCH & 서브쿼리

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: 리스트를 개별 행으로 펼침