cypher 구문 기본을 익히기 위해 유튜브 영상을 보고 정리해보았다.
- Fetching Nodes
- MATCH(n) RETURN n
- MATCH(n: 특정 레이블) RETURN n
- ex. MATCH (player : PLAYER) RETURN player
- 별칭 활용
- MATCH(player : PLAYER) RETURN player.name AS 별칭1, player.height AS 별칭2
이런 식으로 속성을 특정해서 받아올 수도 있다
Filtering nodes
- 특정 하나의 노드를 가져오는 방법 → 속성을 활용한다
- MATCH (player: PLAYER) WHERE player.name = “LeBron James” RETURN player
- MATCH (player:PLAYER) WHERE (player.weight / (player.height* player.height)) ≥ 25 RETURN player
- MATCH (player:PLAYER) WHERE player.weight ≥ 100 AND player.weight ≤ 2 RETURN player
- MATCH (player:PLAYER) WHERE player.weight ≥ 100 AND player.weight ≤ 2 RETURN player LIMIT 2 ⇒ 상위 2개 결과를 출력
- MATCH (player:PLAYER) WHERE player.weight ≥ 100 AND player.weight ≤ 2 RETURN player SKIP 4 LIMIT 2 ⇒ 첫 4개를 스킵하고 그 다음 상위 2개 결과를 출력
- MATCH (player:PLAYER) WHERE player.height ≥ 2 RETURN player ORDER BY player.height ASC ⇒ 오름차순으로 정렬
전반적으로 sql 문과 유사하게 사용하면 되는듯
- 여러개의 노드 filtering (like SELECT문 in SQL)
- MATCH (player: PLAYER), (coach: COACH) WHERE player.height ≥ 2 RETURN player, coach
- 노드 간 관계에 만족하는 노드 추출 : “ -[]→” 으로 표현
- MATCH (player: PLAYER) -[:PLAYS_FOR]→ (team: TEAM) WHERE team.name = “LA Lakers” RETURN player ⇒ PLAYS_FOR 관계를 가진 노드들을 가져옴
예를 들어, PLAYS_FOR이라는 관계에 <id>와 salary라는 속성이 있다고 치면…- MATCH (player: PLAYER) - [contract:PLAYS_FOR] → (team: TEAM) WHERE contract.salary ≥ 35000000 RETURN player, team
- MATCH (lebron: PLAYER {name : “LeBron James”}) -[contract:TEAMMATES] → (teammate:PLAYER) WHERE contract.salary ≥ 40000000 RETURN teammate
Aggregation
- ex. player가 얼만큼의 팀과 경기를 했는가
- MATCH (player:PLAYER) -[gamePlayed: PLAYED_AGAINST] → (:TEAM) RETURN player.name, COUNT(gamePlayed)
- 관계가 가지는 속성을 가지고 연산을 수행할 수도 있다 ex. 경기 마다의 점수(points) 평균값
- MATCH (player:PLAYER) -[gamePlayed: PLAYED_AGAINST] → (:TEAM) RETURN player.name, AVG(gamePlayed.points) AS ppg ORDER BY ppg DESC LIMIT 1 (최고 점수)
- MATCH (player:PLAYER) -[gamePlayed: PLAYED_AGAINST] → (:TEAM) RETURN player.name, AVG(gamePlayed.points) AS ppg ORDER BY ppg DESC LIMIT 1 (최고 점수)
삭제하기
- 노드 삭제하기
- ‘Ja Morant’ 이름을 가진 노드를 삭제하기
- 바로 지우려고 하면 다른 노드들과의 관계가 있기 때문에 에러가 난다 ⇒ detach를 해야함
- MATCH (ja {name: “Ja Morant”}) DETACH DELETE ja
- ‘Ja Morant’ 이름을 가진 노드를 삭제하기
- 관계 삭제하기
- “Joel Embiid”가 팀 노드와 가진 “PLAYS_FOR”이라는 관계 삭제하기
- MATCH (jeol {name: “Joel Embiid”}) - [rel:PLAYS_FOR] → (:TEAM) DELETE rel
- MATCH (jeol {name: “Joel Embiid”}) - [rel:PLAYS_FOR] → (:TEAM) DELETE rel
- “Joel Embiid”가 팀 노드와 가진 “PLAYS_FOR”이라는 관계 삭제하기
생성하기
- 노드 생성하기
- ‘:’ 을 활용해 label를 부여하고, ‘{}’ 안에 속성을 정의한다
- CREATE (lebron:PLAYER:COACH:GENERAL_MANAGER {name: “LeBron James”, height: 2.01}) RETURN lebron
- 노드와 관계를 함께 생성하기
- CREATE (:PLAYER) - [: PLAYS_FOR {salary: 34000000}] → (:TEAM {name: “LA Lakers”}) ⇒ 2개의 레이블, 2개의 노드, 2개의 속성, 1개의 관계가 생성된다
- 이미 존재하는 노드들 간의 관계를 생성하기
- MATCH (lebron: PLAYER {name: “LeBron James”}), (lakers:TEAM {name: “LA Lakers”}) CREATE (lebron) - [:PLAYS_FOR {salary: 4000000}] → (lakers)
- MATCH (lebron: PLAYER {name: “LeBron James”}), (lakers:TEAM {name: “LA Lakers”}) CREATE (lebron) - [:PLAYS_FOR {salary: 4000000}] → (lakers)
업데이트하기
- Updating nodes and relationships
- 노드가 가진 속성을 활용해서 먼저 노드를 찾는다 (MATCH)
- MATCH (anthony: PLAYER) WHERE ID(anthony) = 0 RETURN anthony
- SET을 통해 속성을 부여/업데이트 한다
- MATCH (anthony: PLAYER) WHERE ID(anthony) = 0 SET anthony.name = “Anthony Davis” RETURN anthony
- example 2
- MATCH (lebron:PLAYER) WHERE ID(lebron) =3 SET lebron.height = 2.02, lebron.age = 36
- 노드가 가진 속성을 활용해서 먼저 노드를 찾는다 (MATCH)
- label 업데이트하기
- MATCH (lebron:PLAYER) WHERE ID(lebron) = 3 SET lebron:REF RETURN lebron
- 관계 업데이트하기
- MATCH (lebron {name : “LeBron James”}) - [contract:PLAYS_FOR] → (:TEAM) SET contract.salary = 6000000 RETURN lebron, team
- 레이블 삭제하기
- MATCH (lebron {name: “LeBron James”}) REMOVE lebron.REF RETURN lebron
'Work > GraphDB' 카테고리의 다른 글
[Neo4j Sandbox Data 활용 4] ICIJ OffShoreleaks (0) | 2025.05.19 |
---|---|
[Neo4j Sandbox Data 활용 3] OpenStreetMap 데이터 활용하기 (0) | 2025.05.07 |
[Neo4j Sandbox Data 활용 2] Graph Data Science 데이터 활용하기 (0) | 2025.04.29 |
[Neo4j Sandbox Data 활용 1] Movie 데이터로 영화추천시스템 만들기 (0) | 2025.04.28 |
[Youtube] Screencast: Graph Visualization With Neo4j Using Neovis.js (0) | 2025.04.28 |