굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
{#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) — 테이블의 행으로 만들기