CREATE#
패턴의 요소마다 하나씩, 정점과 간선을 그래프에 추가합니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
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 문장은 별개의 문장이며 영향을 받지 않습니다.