﻿<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://dh.aks.ac.kr/Edu/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?action=history&amp;feed=atom&amp;title=Neo4j_Tutorial</id>
		<title>Neo4j Tutorial - 편집 역사</title>
		<link rel="self" type="application/atom+xml" href="https://dh.aks.ac.kr/Edu/wiki/index.php?action=history&amp;feed=atom&amp;title=Neo4j_Tutorial"/>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=Neo4j_Tutorial&amp;action=history"/>
		<updated>2026-04-06T00:35:38Z</updated>
		<subtitle>이 문서의 편집 역사</subtitle>
		<generator>MediaWiki 1.23.13</generator>

	<entry>
		<id>https://dh.aks.ac.kr/Edu/wiki/index.php?title=Neo4j_Tutorial&amp;diff=74642&amp;oldid=prev</id>
		<title>Hiblue: 새 문서: ==Neo4j 소개== *Neo4j is the world's leading graph database.&lt;br/&gt;그래프 데이터 베이스 *Cypher, The Graph Query Language를 이용 ==Neo4j의 기본구조== *The Labeled Pro...</title>
		<link rel="alternate" type="text/html" href="https://dh.aks.ac.kr/Edu/wiki/index.php?title=Neo4j_Tutorial&amp;diff=74642&amp;oldid=prev"/>
				<updated>2018-06-12T07:09:23Z</updated>
		
		<summary type="html">&lt;p&gt;새 문서: ==Neo4j 소개== *Neo4j is the world&amp;#039;s leading graph database.&amp;lt;br/&amp;gt;그래프 데이터 베이스 *Cypher, The Graph Query Language를 이용 ==Neo4j의 기본구조== *The Labeled Pro...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Neo4j 소개==&lt;br /&gt;
*Neo4j is the world's leading graph database.&amp;lt;br/&amp;gt;그래프 데이터 베이스&lt;br /&gt;
*Cypher, The Graph Query Language를 이용&lt;br /&gt;
==Neo4j의 기본구조==&lt;br /&gt;
*The Labeled Property Graph Model을 기본 데이터 구조로 가짐.&lt;br /&gt;
[[File:Neo4j_model.JPG|800px]]&lt;br /&gt;
===노드&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Nodes''&amp;lt;/span&amp;gt;===&lt;br /&gt;
*데이터 개체&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Nodes are the main data elements''&amp;lt;/span&amp;gt;&lt;br /&gt;
*관계로 다른 노드들과 연결&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Nodes are connected to other nodes via relationships''&amp;lt;/span&amp;gt;&lt;br /&gt;
*하나 이상의 속성을 지님&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Nodes can have one or more properties (i.e., attributes stored as key/value pairs)''&amp;lt;/span&amp;gt;&lt;br /&gt;
*하나 이상의 라벨을 지님&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Nodes have one or more labels that describes its role in the graph''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===관계&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Relationships''&amp;lt;/span&amp;gt;===&lt;br /&gt;
*두 개의 노드를 연결&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Relationships connect two nodes''&amp;lt;/span&amp;gt;&lt;br /&gt;
*직접적으로 연결&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Relationships are directional''&amp;lt;/span&amp;gt;&lt;br /&gt;
*하나의 노드가 여러 개의 관계, 재귀적인 관계도 가질 수 있음&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Nodes can have multiple, even recursive relationships''&amp;lt;/span&amp;gt;&lt;br /&gt;
*관계는 하나 이상의 속성을 가진다&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Relationships can have one or more properties (i.e., attributes stored as key/value pairs)''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===속성&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Properties''&amp;lt;/span&amp;gt;===&lt;br /&gt;
*문자로 정의된 값&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Properties are named values where the name (or key) is a string''&amp;lt;/span&amp;gt;&lt;br /&gt;
*색인화되고, 제한될 수 있다.&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Properties can be indexed and constrained''&amp;lt;/span&amp;gt;&lt;br /&gt;
*다양한 속성으로 복합적인 색인을 만들 수 있다&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Composite indexes can be created from multiple properties''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===라벨&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Labels''&amp;lt;/span&amp;gt;===&lt;br /&gt;
*노드를 묶는 단위&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Labels are used to group nodes into sets''&amp;lt;/span&amp;gt;&lt;br /&gt;
*하나의 노드는 여러개의 라벨을 가질 수 있다&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''A node may have multiple labels''&amp;lt;/span&amp;gt;&lt;br /&gt;
*그래프에서 노드를 더 잘 찾을 수 있도록 색인화된다&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Labels are indexed to accelerate finding nodes in the graph''&amp;lt;/span&amp;gt;&lt;br /&gt;
*기초 라벨 색인은 속도에 최적화되어 있다&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color:skyblue&amp;quot;&amp;gt;''Native label indexes are optimized for speed''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cypher, The Graph Query Language==&lt;br /&gt;
[[file:cypher_model.JPG|800px]]&lt;br /&gt;
===Cyper의 기본 구조===&lt;br /&gt;
 MATCH &amp;lt;pattern&amp;gt; WHERE &amp;lt;conditions&amp;gt; RETURN &amp;lt;expressions&amp;gt;&lt;br /&gt;
===변수===&lt;br /&gt;
 (변수:라벨{속성:속성값})&lt;br /&gt;
 변수=(노드)-[관계]-&amp;gt;(노드)&lt;br /&gt;
*특정 관계나 값 등을 가진 형태를 가진 임의의 값. (중학생 때 배운 미지수 X와 같음)&lt;br /&gt;
*불필요한 코드의 반복을 피하기 위해 코딩언어에서 사용.&lt;br /&gt;
&lt;br /&gt;
===Node/Property===&lt;br /&gt;
 (변수:라벨{속성:&amp;quot;속성값&amp;quot;})&lt;br /&gt;
 변수.속성&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;(A:Person{name:&amp;quot;이혜영&amp;quot;})&amp;lt;/span&amp;gt; : name 속성값이 &amp;quot;이혜영&amp;quot;이고, 라벨이 Person이 노드 A&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A.name&amp;lt;/span&amp;gt; : 노드A의 name 속성&lt;br /&gt;
&lt;br /&gt;
===Relation===&lt;br /&gt;
 -[변수:릴레이션{속성:&amp;quot;속성값&amp;quot;}]-&amp;gt;&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A -[:Knows]-&amp;gt; B &amp;lt;/span&amp;gt;: Knows 관계를 가진 A와 B&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A -[*]-&amp;gt; B &amp;lt;/SPAN&amp;gt;: 관계를 가진 A와 B&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A --&amp;gt; B &amp;lt;/SPAN&amp;gt;: 관계를 가진 A와 B&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A -[*1..3]-&amp;gt; B &amp;lt;/SPAN&amp;gt;: 1~3의 거리를 가진 A와 B&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A -[:Knows*1..3]-&amp;gt; B &amp;lt;/SPAN&amp;gt;: Knows관계의 거리가 1~3인 A와 B&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;A -[:Knows{since:2009}]-&amp;gt; B &amp;lt;/SPAN&amp;gt;: Knows관계를 가지고 since 속성이 2009값을 가지는 A와 B&lt;br /&gt;
===Where===&lt;br /&gt;
*조건을 지정하기 위해 쓰임.&lt;br /&gt;
*&amp;gt;,&amp;lt;,=, in, starts with, ends with, contains 등과 함께 쓰임.&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;Where A.name=&amp;quot;ooo&amp;quot;&amp;lt;/span&amp;gt;: name 속성의 값이 ooo인 노드 A&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;Where A.name in [&amp;quot;aaa&amp;quot;, &amp;quot;bbb&amp;quot;, &amp;quot;ccc&amp;quot;]&amp;lt;/span&amp;gt;: name 속성이 값이 aaa, bbb, ccc 중 하나의 값을 가지는 노드 A&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;Where A.name starts with &amp;quot;A&amp;quot;&amp;lt;/span&amp;gt;: name 속성의 값이 A로 시작하는 노드 A (SQL의 where name like 'A%')&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;Where A.name ends with &amp;quot;A&amp;quot;&amp;lt;/span&amp;gt;: name 속성의 값이 A로 끝나는 노드 A (SQL의 where name like '%A')&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;Where A.name contains &amp;quot;A&amp;quot;&amp;lt;/span&amp;gt;: name 속성의 값에 A가 들어가는 노드 A (SQL의 where name like '%A%')&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
*노드 및 관계 생성&lt;br /&gt;
 CREATE (변수:라벨 { 속성: &amp;quot;속성값&amp;quot;, 속성: &amp;quot;속성값&amp;quot; })&lt;br /&gt;
 CREATE (A:라벨 { 속성: &amp;quot;속성값&amp;quot;, 속성: &amp;quot;속성값&amp;quot; }),  (B:라벨 { 속성: &amp;quot;속성값&amp;quot;, 속성: &amp;quot;속성값&amp;quot; }), (A)-[:관계{속성:속성값}]-&amp;gt;(B)&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;CREATE (ee:Person { name: &amp;quot;Emil&amp;quot;, from: &amp;quot;Sweden&amp;quot;, klout: 99 }) &amp;lt;/span&amp;gt;&lt;br /&gt;
: 이름이 Emil이고 출신이 Sweden, 영향력이 99인 Person 라벨의 개체를 만들어라.&lt;br /&gt;
*&amp;lt;SPAN STYLE=&amp;quot;COLOR:LightSeaGreen &amp;quot;&amp;gt;CREATE (js:Person { name: &amp;quot;Johan&amp;quot;, from: &amp;quot;Sweden&amp;quot;, learn: &amp;quot;surfing&amp;quot; }), (ir:Person { name: &amp;quot;Ian&amp;quot;, from: &amp;quot;England&amp;quot;, title: &amp;quot;author&amp;quot; }), (js)-[:KNOWS {since: 2001}]-&amp;gt;(ir) &amp;lt;/span&amp;gt; &lt;br /&gt;
: 이름이 johan이고 출신이 sweden이고 배우는 것이 surfing이고, 라벨이 person인 개체(js)와 이름이 lan이고 출신이 England이고 칭호가 작가이고 라벨이 Person인 개체(jr)을 만들어라. 그리고 js와 jr은 KNOWS라는 관계를 가지고, 그 관계의 since라는 속성은 2001이란 값을 가진다.&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
*노드 및 관계 삭제&lt;br /&gt;
 MATCH (A:Person) WHERE A.id=&amp;quot;0000&amp;quot; DELETE A&lt;br /&gt;
 MATCH (n { name: 'Andres' })-[r:KNOWS]-&amp;gt;() DELETE r&lt;br /&gt;
===SET / REMOVE ===&lt;br /&gt;
*노드 수정&lt;br /&gt;
 MATCH (n { name: 'Andres' }) SET n.position = 'Developer', n.surname = 'Taylor'&lt;br /&gt;
 MATCH (n { name: 'Peter' }) REMOVE n:German RETURN n&lt;br /&gt;
===UNION / Order by===&lt;br /&gt;
*Union : 합집합 / join&lt;br /&gt;
 MATCH (n:Actor) RETURN n.name UNION MATCH (n:Movie) RETURN n.title &lt;br /&gt;
*Order by : 보여줄 차순, 기본값 오름차순/ desc : 내림차순 &lt;br /&gt;
 MATCH (n:Actor) RETURN n.name, n.age ORDER BY n.age DESC&lt;br /&gt;
&lt;br /&gt;
===함수===&lt;br /&gt;
*특정 조건의 값(합계, 갯수, 최대값, true/false 등)를 나타내 주는 것을 도와줌.&lt;br /&gt;
*[https://neo4j.com/docs/developer-manual/current/cypher/functions/ 함수 전체 보러가기]&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!함수명!!기능설명 !! 사용예시&lt;br /&gt;
|-&lt;br /&gt;
| collect() || 특정 조건으로 노드를 그룹화하고 그 한 그룹에 속하는 노드의 목록을 보여줌. || MATCH (n:person) RETURN collect(n.sex), n.name &lt;br /&gt;
|-&lt;br /&gt;
| count() || 노드의 갯수, (SQL의 count) || MATCH (n:person) return n.sex ,count(n)&lt;br /&gt;
|-&lt;br /&gt;
| exist() || ()안의 특정 값이 있는 경우 (SQL의 where is not null) || MATCH (p:Person) WHERE exists(p.firstname) RETURN p&lt;br /&gt;
|-&lt;br /&gt;
| none() || ()안의 특정 값이 없는 경우 (SQL의 where is null) || MATCH (p:Person) WHERE none(p.firstname) RETURN p&lt;br /&gt;
|-&lt;br /&gt;
| min(), max(), sum() || ()안의 값의 최소값, 최대값, 합계 ||&lt;br /&gt;
|-&lt;br /&gt;
| length() || 노드와 노드 사이의 거리&amp;lt;br/&amp;gt;(관계를 정의할때 *를 적어주어야 함. 그렇지 않으면 length의 값이 모두 1로 나옴(관계정의의 기본 단계값이 1이기 때문에 여러 단계의 관계를 보고 싶을때는 *를 써줌). || MATCH P=(A:Person) -[:Knows*]-&amp;gt; (B:Person) RETURN length(P)&lt;br /&gt;
|-&lt;br /&gt;
| shortestPath() || 노드와 노드 사이의 가장 빠른 길 || MATCH P=shortestPath((A:Person{name:'AA'}) -[*]-&amp;gt; (B:Person{name:'BB'})) RETURN P&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Cypher 실습==&lt;br /&gt;
*[http://dh.aks.ac.kr:7474/browser/ Neo4j 샘플:DH 프로젝트]&lt;br /&gt;
*클래스 Actor만 보여라 &lt;br /&gt;
 match (n:Actor) return n&lt;br /&gt;
*클래스가 Actor인 개체의 한글이름과 한자이름을 보여라. &lt;br /&gt;
 match (n:Actor) return n.name, n.chname&lt;br /&gt;
*프로젝트가 워커힐인 개체를 모두 보여라 (아무거나 25개만 보여라)&lt;br /&gt;
 MATCH (n) where n.project=&amp;quot;워커힐&amp;quot; RETURN n (LIMIT 25)&lt;br /&gt;
*방문했다(visits)라는 관계를 개체를 모두 보여라.&lt;br /&gt;
 MATCH p=()-[r:visits]-&amp;gt;() RETURN p&lt;br /&gt;
*아버지와 아들(hasSon)의 관계를 가진 인물들의 이름과 거리를 보여라.&lt;br /&gt;
 match p=(A:Actor)-[:hasSon*]-&amp;gt;(B:Actor) return A.name,B.name, length(p)&lt;br /&gt;
*이벤트의 이름과 이벤트에 참여한 행위자의 수를 내림차순으로 보여라.&lt;br /&gt;
 match (e:Event)&amp;lt;-[:Creates]-(a:Actor) return e.name as eventName, count(a) as 참여인원 order by 참여인원 desc&lt;br /&gt;
*이벤트와 그 이벤트가 열린 장소를 모두 보여라.&lt;br /&gt;
 match (n:Place)&amp;lt;-[:isHeldAt]-(o) return n,o&lt;br /&gt;
*과거 프로젝트 : 강세윤과 두단계까지만 연결된 인물들을 보여라&lt;br /&gt;
 match (a1:Actor{name:&amp;quot;강세윤&amp;quot;}) -[*1..2]- (a2:Actor) where a1.project=&amp;quot;과거&amp;quot; and a2.project=&amp;quot;과거&amp;quot; return a1, a2&lt;br /&gt;
*포미닛과 외화벌이(개념)을 연결하는 가장 빠른 길은?&lt;br /&gt;
 match (포미닛{name:&amp;quot;포미닛&amp;quot;}), (외화벌이{name:&amp;quot;외화벌이&amp;quot;}), 빠른길= shortestPath((포미닛)-[*]-(외화벌이)) return 포미닛, 외화벌이, 빠른길&lt;br /&gt;
*워커힐 프로젝트의 actor를 group 속성으로 분류하고, 각 속성에 속하는 개체의 이름을 보여라.&lt;br /&gt;
 match (n:Actor) where n.project=&amp;quot;워커힐&amp;quot; return n.group, count(n) as 분류, collect(n.name)&lt;/div&gt;</summary>
		<author><name>Hiblue</name></author>	</entry>

	</feed>