CREATE#

패턴의 요소마다 하나씩, 정점과 간선을 그래프에 추가합니다.

개요#

CREATE pattern [, pattern ] ...

굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.

설명#

CREATE는 준 패턴을 그래프에 씁니다. MATCH가 읽을 때 쓰는 것과 같은 패턴 구문을 받지만, 모든 요소를 찾는 것이 아니라 만듭니다.

  • CREATE는 언제나 만듭니다. 똑같은 정점이나 간선이 이미 있는지 확인하지 않습니다. 없는 것만 만들려면 MERGE를 쓰십시오.

  • 이미 유효 범위에 있는 변수를 이름으로 부른 요소는 다시 만들어지지 않고 재사용됩니다. MATCH가 찾은 정점에 간선을 붙이는 방식이 그것입니다. 양 끝점이 바인딩된 변수이므로 간선만 새로 만들어집니다.

  • 새 변수를 이름으로 부르거나 이름이 없는 요소는 만들어집니다. 그래서 하나의 패턴이 정점과 그 간선을 한 번에 만들 수 있습니다.

  • 모든 요소에는 만들기에 충분한 정보가 있어야 합니다. 간선에는 레이블과 방향이 필요하고, 레이블 없는 정점은 그냥 ag_vertex가 됩니다.

  • 속성 맵은 맵 리터럴, 쿼리 매개변수, 또는 jsonb 객체를 내놓는 표현식을 쓴 = expression이면 됩니다. 마지막 형태가 테이블 행 전체를 properties로 만드는 방법입니다. LOAD FROM을 참고하십시오.

  • CREATE는 들어오는 행마다 한 번 실행됩니다. 앞에 아무 절도 없으면 한 번 실행됩니다.

  • CREATE는 쿼리를 시작하거나 다른 절 뒤에 올 수 있고, 쿼리를 끝낼 수도 있습니다. 무엇을 만들었는지 보려면 RETURN을 붙이십시오.

INSERT가 완전히 같은 뜻이며, ISO/IEC 39075가 쓰는 표기입니다.

매개변수#

pattern

MATCH 구문의 경로 패턴입니다. 쉼표로 구분해 여러 개 나열할 수 있고, 적은 순서대로 만들어지며 변수를 공유할 수 있습니다.

예제#

모든 예제는 예제 데이터셋에서 실행됩니다. The last example undoes them.

정점 하나 만들기#

CREATE (:movie {title: 'Tenet', year: 2020, genre: 'Action'});
UPDATE 1

그래프 쓰기는 절이 무엇이었든 자기가 손댄 그래프 요소의 수를 UPDATE 태그로 보고합니다.

정점을 만들고 무엇을 만들었는지 보기#

CREATE (p:person {name: 'John David Washington', born: 1984})
RETURN p.name AS person, p.born AS born;
         person          | born
-------------------------+------
 "John David Washington" | 1984
(1 row)

이미 있는 두 정점 사이에 간선 만들기#

양 끝점을 찾고, 그다음 간선만 만듭니다:

MATCH (d:person {name: 'Christopher Nolan'}), (m:movie {title: 'Tenet'})
CREATE (d)-[r:directed]->(m)
RETURN d.name AS director, label(r) AS edge, m.title AS film;
      director       |    edge    |  film
---------------------+------------+---------
 "Christopher Nolan" | "directed" | "Tenet"
(1 row)

d와 m은 이미 바인딩돼 있으므로 재사용됩니다. 만약 그 패턴이 CREATE 안에서 (d:person {name: 'Christopher Nolan'})를 다시 적었다면 두 번째 Christopher Nolan이 만들어졌을 것입니다.

정점과 그 간선을 함께 만들기#

패턴에서 아직 바인딩되지 않은 것은 무엇이든 만들어집니다:

MATCH (m:movie {title: 'Tenet'})
CREATE (a:person {name: 'Elizabeth Debicki', born: 1990})-[r:acted_in {role: 'Kat'}]->(m)
RETURN a.name AS actor, r.role AS role, m.title AS film;
        actor        | role  |  film
---------------------+-------+---------
 "Elizabeth Debicki" | "Kat" | "Tenet"
(1 row)

여러 패턴을 한 번에 만들기#

쉼표로 구분한 패턴은 한 절에서 만들어지고 변수를 공유할 수 있습니다:

MATCH (p:person {name: 'John David Washington'}), (m:movie {title: 'Tenet'})
CREATE (p)-[:acted_in {role: 'The Protagonist'}]->(m),
       (m)-[:related_to {weight: 2}]->(:movie {title: 'Memento', year: 2000, genre: 'Thriller'});
UPDATE 3

요소 세 개입니다. acted_in 간선 하나, related_to 간선 하나, 그리고 Memento 정점입니다. 이제 Tenet에는 간선이 네 개 있습니다:

MATCH (m:movie {title: 'Tenet'})-[r]-(x)
RETURN label(r) AS edge, label(x) AS other, coalesce(x.name, x.title) AS name
ORDER BY edge, name;
     edge     |  other   |          name
--------------+----------+-------------------------
 "acted_in"   | "person" | "Elizabeth Debicki"
 "acted_in"   | "person" | "John David Washington"
 "directed"   | "person" | "Christopher Nolan"
 "related_to" | "movie"  | "Memento"
(4 rows)

CREATE가 중복을 만드는 것 보기#

CREATE에는 멱등한 구석이 없습니다:

CREATE (:person {name: 'Duplicate', born: 1}), (:person {name: 'Duplicate', born: 1});
UPDATE 2
MATCH (p:person {name: 'Duplicate'}) RETURN count(*) AS rows;
 rows
------
 2
(1 row)

첫 문장을 다시 실행하면 네 개가 됩니다. 어떤 키가 고유해야 한다면 MERGE나 고유성 제약을 쓰십시오.

예제 되돌리기#

MATCH (p:person {name: 'Duplicate'}) DELETE p;
MATCH (m:movie) WHERE m.title IN ['Tenet', 'Memento'] DETACH DELETE m;
MATCH (p:person) WHERE p.name IN ['John David Washington', 'Elizabeth Debicki'] DETACH DELETE p;
UPDATE 2
UPDATE 6
UPDATE 2

참고#

정점의 id는 그 레이블 자신의 시퀀스에서 배정되므로, 새 정점이 받는 번호는 그 레이블에 앞서 무엇이 만들어졌는지에 달려 있습니다. id(v)로 읽으십시오. 특정 값에 의존하지 마십시오.

참고

레이블 없는 CREATE — CREATE () — 는 문법에 맞고, 그래프의 기반 레이블인 ag_vertex의 정점을 만듭니다. 그런 정점은 어떤 MATCH (n:label)에도 보이지 않아 놓치기 쉽습니다. 레이블은 항상 주십시오.

호환성#

절 이름 (ISO/IEC 39075 §13.2)#

표준의 데이터 삽입 문장은 CREATE가 아니라 INSERT입니다. AgensGraph는 같은 절에 대해 두 표기를 모두 받습니다. INSERT를 참고하십시오. CREATE GRAPH나 CREATE VLABEL 같은 SQL의 CREATE 문장은 별개의 문장이며 영향을 받지 않습니다.

관련 항목#

  • INSERT GQL — 이 절의 표준 표기

  • MERGE — 이미 있지 않은 것만 만들기

  • MATCH — 패턴 구문, 그리고 끝점을 먼저 바인딩하는 방법

  • SET — 만든 뒤 속성 바꾸기

  • DELETE — 만든 것을 지우기

  • LOAD FROM — 테이블의 행으로 만들기