Neo4j 정리 1 (설명 및 사용법, Cypher query)

codeblue·2024년 2월 2일
1

Graph

목록 보기
1/2

1. Neo4j 설명 및 설치 방법

Neo4j : Neo4j사가 개발한 그래프 데이터베이스 관리 시스템.

1-1. 설치 방법

📌 https://neo4j.com/download/ 링크 접속 후 프로그램 다운로드

  1. neo4j를 실행 후 New - Create project를 클릭
  1. 생성된 프로젝트 오른쪽 화면의 Add - Local DBMS를 클릭
  1. DB의 이름과 password를 입력 후, Create 버튼을 클릭
  1. Start - Open을 클릭하면 작업창이 열린 모습을 볼 수 있다. 모든 쿼리는 아래의 빨간색으로 표시한 부분에 작성한다.

1-2. 구성 요소

  • Node : 그래프 데이터 레코드. 데이터에 대한 정보를 노드에 담는다고 생각하면 된다.

  • Relationship : Node와 Node 사이의 관계를 나타낸다.

  • Property : Node의 속성을 나타낸다.

  • Label : Node를 묶는 단위

example

위 사진을 예시로 들면, 동그라미로 표현된 짱구, 맹구, 흰둥이가 Node이고, 각 Node는 이름, 나이, 성별과 같은 property를 갖는다. 또한 각 Node는 relationship으로 연결되어 있다.

2. Cypher

Cypher : Neo4j의 그래프 query 언어. 비교적 단순하고 간단하면서도 강력하게 설계되었다.

2-1. 문법

CREATE: 노드 , 관계를 생성 (대상이 이미 있어도 또 만든다.)

MATCH: 기존 노드, 관계를 검색. WHERE과 함께 쓰면 조건부검색이 가능.

  • RETURN이나 WITH로 매칭되는 대상을 반환한다.
  • MATCH < pattern > WHERE < conditions > RETURN < expression >

WHERE: 조건을 지정하기 위해 사용된다.

MERGE: CREATE와 MATCH를 합친 함수. 만약 대상이 없을 때는 CREATE로 사용되고 대상이 있는 경우는 MATCH로 사용된다.

SET: 노드의 lable과 property를 업데이트 및 수정하기 위해 사용된다.

DELETE : 관계나 노드를 삭제할 때 사용된다.

  • 단일 노드 삭제 : MATCH (m:Person {name:’UNKNOWN’}) DELETE n
  • 모든 노드와 관계 삭제 : MATCH (n) detach delete n
  • 모든 관계가 있는 노드 삭제 : MATCH (n {name: ‘Andy’}) DETACH DELETE n
  • 관계만 삭제 : MATCH (n {name:’Andy’})-[r:KNOWS]->() DELETE r
    이름이 ‘Andy’인 노드에서 나가는 모든 관계가 삭제된다.

Relation 표현

(Node)–[Relationship]->(Node)

  • Node는 ( ) 소괄호로 표현하고, Relationship은 [ ] 대괄호로 표현한다.
  • 관계 설정을 하려면 Node 사이에 Relationship을 적고, 화살표를 이용해 방향을 나타낸다.

✍🏻 사용 예시

  • A – [:Knows]->B : Knows 관계를 가진 A와 B
  • A – [*]->B : 관계를 가진 A와 B
  • A --> B : 관계를 가진 A와 B
  • A – [*1..3]->B : 1~3의 거리를 가진 A와 B
  • A – [:Knows(since:2009)]->B : Knows관계를 가지고 since 속성이 2009 값을 가지는 A와 B

변수 표현

(변수 : label { 속성 : 속성값 })

  • 변수를 설정하고 그 뒤에 label(개체의 그룹)을 적는다.
  • 특정 속성 값을 지닌 것을 개체를 보고 싶다면 ‘ { } ‘ 안에 속성의 이름과 특정 속성 값을 적는다.

2-2. query 작성 예시 1

1-2 의 example을 cypher의 create 기능을 이용하여 그래프 생성을 해보았다.

create (짱구:Person {name:'짱구'}),(맹구:Person {name:'맹구'}),(흰둥이:Dog {name:'흰둥이'}),
(짱구)-[:friend]->(맹구),(맹구)-[:friend]->(짱구),(흰둥이)-[:master]->(짱구)

간단한 Query 예제

  1. Person인 Node를 모두 return
match (p:Person) return p

  1. 각 node 의 property를 업데이트 -> SET 을 사용
  • name = "짱구"인 노드의 나이, 성별을 업데이트 한다.
match (p:Person{name:"짱구"}) set p.age=5,p.gender='male' return p

그래프를 확인해보면, 짱구 노드의 property가 추가된 것을 알 수 있다.
아래의 코드를 입력하여 맹구와 흰둥이 노드의 property도 추가한다.
(흰둥이가 몇살이지... 싶었지만 대충 1-2살이겠거니 생각되어 1살로 설정했다.)

match (p:Person{name:'맹구'}) set p.age=5,p.gender='male'
with p
match (d:Dog{name:'흰둥이'}) set d.age=1,d.gender='male'

WITH p는 첫 번째 MATCH 절의 결과를 다음 쿼리로 전달한다.
👉두 개의 MATCH 절 간에 데이터가 유지되면서 쿼리가 실행.

0개의 댓글

관련 채용 정보