{#create-create} # CREATE 패턴의 요소마다 하나씩, 정점과 간선을 그래프에 추가합니다. {#create-synopsis} ## 개요
CREATE pattern [, pattern ] ...

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

{#create-description} ## 설명 `CREATE`는 준 패턴을 그래프에 씁니다. [`MATCH`](match.md)가 읽을 때 쓰는 것과 같은 패턴 구문을 받지만, 모든 요소를 찾는 것이 아니라 만듭니다. - `CREATE`는 **언제나 만듭니다.** 똑같은 정점이나 간선이 이미 있는지 확인하지 않습니다. 없는 것만 만들려면 [`MERGE`](merge.md)를 쓰십시오. - **이미 유효 범위에 있는 변수**를 이름으로 부른 요소는 다시 만들어지지 않고 재사용됩니다. `MATCH`가 찾은 정점에 간선을 붙이는 방식이 그것입니다. 양 끝점이 바인딩된 변수이므로 간선만 새로 만들어집니다. - **새 변수를 이름으로 부르거나 이름이 없는** 요소는 만들어집니다. 그래서 하나의 패턴이 정점과 그 간선을 한 번에 만들 수 있습니다. - 모든 요소에는 만들기에 충분한 정보가 있어야 합니다. 간선에는 레이블과 방향이 필요하고, 레이블 없는 정점은 그냥 `ag_vertex`가 됩니다. - 속성 맵은 **맵 리터럴**, 쿼리 매개변수, 또는 jsonb 객체를 내놓는 표현식을 쓴 `= expression`이면 됩니다. 마지막 형태가 테이블 행 전체를 `properties`로 만드는 방법입니다. [`LOAD FROM`](load-from.md)을 참고하십시오. - `CREATE`는 들어오는 행마다 한 번 실행됩니다. 앞에 아무 절도 없으면 한 번 실행됩니다. - `CREATE`는 쿼리를 시작하거나 다른 절 뒤에 올 수 있고, 쿼리를 끝낼 수도 있습니다. 무엇을 만들었는지 보려면 [`RETURN`](return.md)을 붙이십시오. [`INSERT`](insert.md)가 완전히 같은 뜻이며, ISO/IEC 39075가 쓰는 표기입니다. {#create-parameters} ## 매개변수 pattern : [`MATCH`](match.md) 구문의 경로 패턴입니다. 쉼표로 구분해 여러 개 나열할 수 있고, 적은 순서대로 만들어지며 변수를 공유할 수 있습니다. {#create-examples} ## 예제 모든 예제는 [예제 데이터셋](../../get_started/example-dataset.md)에서 실행됩니다. The last example undoes them. {#create-create-one-vertex} ### 정점 하나 만들기 ```cypher CREATE (:movie {title: 'Tenet', year: 2020, genre: 'Action'}); ``` ``` UPDATE 1 ``` 그래프 쓰기는 절이 무엇이었든 자기가 손댄 그래프 요소의 수를 `UPDATE` 태그로 보고합니다. {#create-create-a-vertex-and-see-what-you-made} ### 정점을 만들고 무엇을 만들었는지 보기 ```cypher 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) ``` {#create-create-an-edge-between-two-existing-vertices} ### 이미 있는 두 정점 사이에 간선 만들기 양 끝점을 찾고, 그다음 간선만 만듭니다: ```cypher 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이 만들어졌을 것입니다. {#create-create-a-vertex-and-its-edge-together} ### 정점과 그 간선을 함께 만들기 패턴에서 아직 바인딩되지 않은 것은 무엇이든 만들어집니다: ```cypher 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) ``` {#create-create-several-patterns-at-once} ### 여러 패턴을 한 번에 만들기 쉼표로 구분한 패턴은 한 절에서 만들어지고 변수를 공유할 수 있습니다: ```cypher 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`에는 간선이 네 개 있습니다: ```cypher 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-watch-create-duplicate} ### CREATE가 중복을 만드는 것 보기 `CREATE`에는 멱등한 구석이 없습니다: ```cypher CREATE (:person {name: 'Duplicate', born: 1}), (:person {name: 'Duplicate', born: 1}); ``` ``` UPDATE 2 ``` ```cypher MATCH (p:person {name: 'Duplicate'}) RETURN count(*) AS rows; ``` ``` rows ------ 2 (1 row) ``` 첫 문장을 다시 실행하면 네 개가 됩니다. 어떤 키가 고유해야 한다면 [`MERGE`](merge.md)나 고유성 제약을 쓰십시오. {#create-undo-the-examples} ### 예제 되돌리기 ```cypher 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 ``` {#create-notes} ## 참고 정점의 id는 그 레이블 자신의 시퀀스에서 배정되므로, 새 정점이 받는 번호는 그 레이블에 앞서 무엇이 만들어졌는지에 달려 있습니다. `id(v)`로 읽으십시오. 특정 값에 의존하지 마십시오. ```{note} 레이블 없는 `CREATE` — `CREATE ()` — 는 문법에 맞고, 그래프의 기반 레이블인 `ag_vertex`의 정점을 만듭니다. 그런 정점은 어떤 `MATCH (n:label)`에도 보이지 않아 놓치기 쉽습니다. 레이블은 항상 주십시오. ``` {#create-compatibility} ## 호환성 {#create-the-clause-name-isoiec-39075-132} ### 절 이름 (ISO/IEC 39075 §13.2) 표준의 데이터 삽입 문장은 `CREATE`가 아니라 `INSERT`입니다. AgensGraph는 같은 절에 대해 두 표기를 모두 받습니다. [`INSERT`](insert.md)를 참고하십시오. `CREATE GRAPH`나 `CREATE VLABEL` 같은 SQL의 `CREATE` 문장은 별개의 문장이며 영향을 받지 않습니다. {#create-see-also} ## 관련 항목 - [`INSERT`](insert.md) {bdg-primary-line}`GQL` — 이 절의 표준 표기 - [`MERGE`](merge.md) — 이미 있지 않은 것만 만들기 - [`MATCH`](match.md) — 패턴 구문, 그리고 끝점을 먼저 바인딩하는 방법 - [`SET`](set.md) — 만든 뒤 속성 바꾸기 - [`DELETE`](delete.md) — 만든 것을 지우기 - [`LOAD FROM`](load-from.md) — 테이블의 행으로 만들기