그림처럼 쓰는 패턴, MATCH
Cypher는 찾고 싶은 그래프 모양을 글자로 그려서 질문합니다. 패턴을 읽고 쓰는 법과 국제 표준 GQL과의 관계를 봅니다.
이번 회차, 내 속도로.
기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 31로 돌아옵니다.
난이도·관심 주제 고르기
1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.
이렇게 다녀와요 1단계 · 약 12분
- 출발 · DAY 31MATCH 패턴
- 1. 관심 주제OPTIONAL MATCH·null추가 13 · 새 추가 수업
- 복귀 · DAY 31원래 회차 이어가기
- OPTIONAL MATCH·null · DAY 31·32에서 MATCH와 WHERE를 배운 뒤, 관계가 없는 노드가 결과에서 조용히 사라지는 문제를 다루러 옵니다.
선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.
핵심 개념
Cypher는 그래프 모양을 ASCII 문자로 그립니다. 괄호 ()는 노드, -[]->는 방향 있는 관계, 콜론 뒤는 레이블이나 관계 타입입니다. MATCH (p:Person)-[:WORKS_AT]->(l:Lab) RETURN p.name, l.name은 ‘사람이 연구실에서 일한다’ 모양과 일치하는 부분 그래프를 모두 찾아, 일치 하나마다 결과 한 행을 만듭니다.
패턴 안의 p, l 같은 변수는 일치한 노드에 묶입니다. 같은 변수를 두 번 쓰면 같은 노드여야 하고, (:Paper)처럼 변수를 생략하면 그 노드를 지나기는 하되 결과에서 참조하지 않습니다. 공저자 패턴 (a:Person)-[:AUTHORED]->(:Paper)<-[:AUTHORED]-(b:Person)은 논문 하나에서 만나는 두 사람을 찾습니다. 민수와 지아가 함께 쓴 논문이 하나면 (민수, 지아)와 (지아, 민수) 두 행이 나옵니다.
Cypher는 Neo4j에서 만들어졌고 openCypher 프로젝트를 통해 다른 구현에도 공개되었습니다. 2024년 4월에는 속성 그래프 질의 언어의 국제 표준 GQL(ISO/IEC 39075:2024)이 발행되었습니다. Neo4j 문서는 GQL이 MATCH/RETURN 같은 Cypher의 질의 구성 방식을 많이 받아들였고, Cypher가 GQL 필수 기능의 대부분을 지원한다고 설명합니다. 다만 두 언어가 완전히 같지는 않아서, Cypher의 예전 문법 일부는 GQL 비호환으로 표시됩니다.
관계형 쪽에서도 SQL:2023에 그래프 패턴 질의 확장(SQL/PGQ)이 추가되어 비슷한 패턴 문법을 씁니다. 패턴 질의의 성질도 알아 둡니다. MATCH는 모양이 정확히 맞는 것만 돌려주므로 관계가 없는 사람은 결과에서 빠집니다. 결과가 없다는 것은 ‘그 사실이 거짓’이라는 뜻이 아니라 ‘저장된 일치가 없다’는 뜻입니다.
작은 예제로 따라가기
패턴 (p:Person)-[:WORKS_AT]->(l:Lab): 연구소 그래프에 WORKS_AT 관계가 6개라면 결과는 6행입니다.
공저 패턴: 논문 ‘지식 그래프 구축’을 민수와 지아가 함께 썼다면 이 논문에서만 (민수, 지아)와 (지아, 민수) 2행이 나옵니다.
(a:Person)-[:KNOWS]-(b:Person)처럼 화살표를 빼면 KNOWS 관계 하나가 (a, b)와 (b, a) 두 방향으로 일치해 2행이 됩니다.
직접 실험해 보기
패턴 선택지 네 개를 차례로 고르며 Code에 나온 쿼리, 강조된 노드·관계, 결과 행 수를 표로 기록하세요. 행 수가 관계 수와 다른 패턴이 있다면 그 이유를 적어 보세요.
패턴을 그리면 그래프에서 찾아 준다
MATCH (p:Person)-[:WORKS_AT]->(l:Lab)
RETURN p.name, l.name| # | p.name | l.name |
|---|---|---|
| 민수 | 그래프연구실 | |
| 지아 | 그래프연구실 | |
| 서준 | 그래프연구실 | |
| 하린 | 언어연구실 | |
| 도윤 | 언어연구실 | |
| 유나 | 언어연구실 |
한 MATCH 안에서 같은 관계는 두 번 쓰이지 않는다. 그래서 공저자 패턴에서 p와 q가 같은 사람이 되지 않는다. 방향을 무시하면 KNOWS 한 개가 양쪽에서 한 번씩 일치해 행이 두 배가 된다.
이번에는 직접 풀어 보세요
정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.
힌트 보기
연구실 → 사람 → 논문으로 이어지는 한 줄 패턴을 그리고, 화살표 방향에 주의합니다.
풀이와 비교하기
MATCH (l:Lab {city:'대전'})<-[:WORKS_AT]-(p:Person)-[:AUTHORED]->(x:Paper) RETURN p.name, x.title입니다. WORKS_AT은 사람에서 연구실로 향하므로, 연구실 쪽에서 시작해 쓰면 <-[:WORKS_AT]-가 됩니다.
풀이와 확인 표시는 이 브라우저에 저장됩니다.
오늘 이해한 것과 다시 볼 것
계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.
메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.오늘의 이해 확인
공저자 패턴 (a:Person)-[:AUTHORED]->(:Paper)<-[:AUTHORED]-(b:Person)에서 (:Paper)에 변수가 없다는 것은 무슨 뜻인가요?
완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1
더 깊이 읽기
예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.
Cypher Manual: IntroductionNeo4jISO/IEC 39075:2024 Information technology — Database languages — GQLISO/IEC (2024)Cypher Manual: GQL conformanceNeo4jopenCypheropenCypher Project이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.