

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon QLDB의 PartiQL 명령
<a name="ql-reference.statements"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

PartiQL은 SQL-92 버전을 확장하여 Amazon Ion 데이터 형식의 문서를 지원합니다. Amazon QLDB에서는 다음 PartiQL 명령을 지원합니다.

특정 테이블에서 각 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md)을 참조하세요.

**참고**  
QLDB는 모든 PartiQL 명령을 지원하지 않습니다.
QLDB의 모든 PartiQL 문에는 [Amazon QLDB 할당량 및 제한](limits.md#limits.fixed)에 정의된 대로 트랜잭션 한도가 적용됩니다.
이 참조는 QLDB 콘솔 또는 QLDB 쉘에서 수동으로 실행하는 PartiQL 문의 기본 구문과 사용 예제를 제공합니다. 지원되는 프로그래밍 언어를 사용하여 유사한 명령문을 실행하는 방법을 보여주는 코드 예제는 [드라이버 시작하기](getting-started-driver.md)의 자습서를 참조하세요.

## DDL(데이터 정의 언어) 문
<a name="ql-functions.statements.ddl"></a>

DDL(*데이터 정의 언어*) 는 테이블 및 인덱스와 같은 데이터베이스 개체를 관리하는 데 사용하는 PartiQL 문 집합입니다. DDL을 사용하여 이러한 객체를 만들고 삭제합니다.
+ [CREATE INDEX](ql-reference.create-index.md)
+ [CREATE TABLE](ql-reference.create-table.md)
+ [DROP INDEX](ql-reference.drop-index.md)
+ [DROP TABLE](ql-reference.drop-table.md)
+ [UNDROP TABLE](ql-reference.undrop-table.md)

## DML(데이터 조작 언어) 문
<a name="ql-functions.statements.dml"></a>

DML(*데이터 조작 언어*)는 QLDB 테이블의 데이터를 관리하는 데 사용하는 PartiQL 문 집합입니다. DML 문을 사용하여 테이블의 데이터를 추가, 수정 또는 삭제할 수 있습니다.

지원되는 DML 및 쿼리 언어 문은 다음과 같습니다.
+ [DELETE](ql-reference.delete.md)
+ [FROM (INSERT, REMOVE, 또는 SET)](ql-reference.from.md)
+ [INSERT](ql-reference.insert.md)
+ [SELECT](ql-reference.select.md)
+ [UPDATE](ql-reference.update.md)

# Amazon QLDB에서 CREATE INDEX 명령
<a name="ql-reference.create-index"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `CREATE INDEX` 명령을 사용하여 테이블의 문서 필드에 대한 인덱스를 생성합니다.

특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**중요**  
QLDB는 문서를 효율적으로 조회하기 위한 인덱스가 필요합니다. 인덱스가 없으면 QLDB는 문서를 읽을 때 전체 테이블 스캔을 수행해야 합니다. 이로 인해 동시성 충돌 및 트랜잭션 시간 초과를 포함하여 대규모 테이블에서 성능 문제가 발생할 수 있습니다.  
인덱싱된 필드 또는 문서 ID(예: `=` 또는 `IN`)에서 동등 *연산자*를 사용하여 `WHERE` 조건자 절이 포함된 문을 실행하는 것이 좋습니다. 자세한 내용은 [쿼리 성능 최적화](working.optimize.md)을 참조하세요.

인덱스를 생성할 때는 다음 제약 조건에 유의하세요.
+ 인덱스는 단일 최상위 필드에만 생성할 수 있습니다. 복합, 중첩, 고유 및 함수 기반 인덱스는 지원되지 않습니다.
+ `list` 및 `struct`를 비롯한 모든 [Ion 데이터 유형](ql-reference.data-types.md)에 대해 인덱스를 생성할 수 있습니다. 그러나 Ion 유형에 관계없이 전체 Ion 값이 같아야만 인덱스 조회를 수행할 수 있습니다. 예를 들어 `list` 형식을 인덱스로 사용하는 경우 목록 내에서 한 항목씩 인덱스 검색을 수행할 수 없습니다.
+ 동등 조건자(예: `WHERE indexedField = 123` 또는 `WHERE indexedField IN (456, 789)`)를 사용할 때만 쿼리 성능이 향상됩니다.

  QLDB는 쿼리 조건자의 부등을 인정하지 않습니다. 따라서 범위 필터링된 스캔은 구현되지 않습니다.
+ 인덱싱된 필드 이름은 대소문자를 구분하며 최대 128자입니다.
+ QLDB에서의 인덱스 생성은 비동기적으로 이루어집니다. 비어 있지 않은 테이블에서 인덱스 빌드를 완료하는 데 걸리는 시간은 테이블 크기에 따라 다릅니다. 자세한 내용은 [인덱스 관리](working.manage-indexes.md)을 참조하세요.

**Topics**
+ [구문](#ql-reference.create-index.syntax)
+ [파라미터](#ql-reference.create-index.parameters)
+ [반환 값](#ql-reference.create-index.return)
+ [예시](#ql-reference.create-index.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.create-index.driver)

## 구문
<a name="ql-reference.create-index.syntax"></a>

```
CREATE INDEX ON table_name (field)
```

## 파라미터
<a name="ql-reference.create-index.parameters"></a>

***table\$1name***  
인덱스를 생성하려는 테이블의 이름입니다. 이미 있는 테이블이어야 합니다.  
테이블 이름은 대/소문자를 구분합니다.

***필드***  
인덱스를 생성할 문서 필드 이름입니다. 필드는 최상위 속성이어야 합니다.  
인덱싱된 필드 이름은 대소문자를 구분하며 최대 128자입니다.  
`list`및 `struct`를 비롯한 모든 [Amazon Ion 데이터 유형](ql-reference.data-types.md)에 인덱스를 생성할 수 있습니다. 그러나 Ion 유형에 관계없이 전체 Ion 값이 같아야만 인덱스 조회를 수행할 수 있습니다. 예를 들어 `list` 형식을 인덱스로 사용하는 경우 목록 내에서 한 항목씩 인덱스 검색을 수행할 수 없습니다.

## 반환 값
<a name="ql-reference.create-index.return"></a>

`tableId` - 인덱스를 생성한 테이블의 고유 ID입니다.

## 예시
<a name="ql-reference.create-index.examples"></a>

```
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
```

```
CREATE INDEX ON Vehicle (VIN)
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.create-index.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB에서 CREATE TABLE
<a name="ql-reference.create-table"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `CREATE TABLE` 명령을 사용하여 새 테이블을 생성합니다.

테이블에는 네임스페이스가 없는 단순한 이름이 있습니다. QLDB는 개방형 콘텐츠를 지원하며 스키마를 적용하지 않으므로 테이블을 만들 때 속성이나 데이터 유형을 정의하지 않습니다.

**참고**  
원장에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md)을 참조하세요.

**Topics**
+ [구문](#ql-reference.create-table.syntax)
+ [파라미터](#ql-reference.create-table.parameters)
+ [반환 값](#ql-reference.create-table.return)
+ [테이블 생성 시 태그 지정](#ql-reference.create-table.tagging)
+ [예시](#ql-reference.create-table.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.create-table.driver)

## 구문
<a name="ql-reference.create-table.syntax"></a>

```
CREATE TABLE table_name [ WITH (aws_tags = `{'key': 'value'}`) ]
```

## 파라미터
<a name="ql-reference.create-table.parameters"></a>

***table\$1name***  
생성할 테이블의 고유 이름입니다. 같은 이름의 활성 테이블이 이미 존재하지 않아야 합니다. 다음은 명명 제약 조건입니다.  
+ 1\$1128자의 영숫자 또는 밑줄만 포함해야 합니다.
+ 첫 번째 글자에는 문자 또는 밑줄이 있어야 합니다.
+ 영숫자와 밑줄을 조합하여 나머지 문자에 사용할 수 있습니다.
+ 대소문자를 구분합니다.
+ QLDB PartiQL [예약어](ql-reference.reserved.md)가 아니어야 합니다.

**'*key*': '*value*'**  
(선택 사항)생성 중에 테이블 리소스에 연결할 태그입니다. 각 태그는 키-값 쌍으로 정의되며, 키와 값은 각각 작은 따옴표로 표시됩니다. 각 키-값 쌍은 백틱으로 표시되는 Amazon Ion 구조 내에 정의됩니다.  
*테이블 생성 시 태그 지정은 현재 ‭`STANDARD` 권한 모드의 원장에만 지원됩니다.*

## 반환 값
<a name="ql-reference.create-table.return"></a>

`tableId` - 생성한 테이블의 고유 ID입니다.

## 테이블 생성 시 태그 지정
<a name="ql-reference.create-table.tagging"></a>

**참고**  
 테이블 생성 시 태그 지정은 현재 ‭`STANDARD` 권한 모드의 원장에만 지원됩니다.

선택적으로 `CREATE TABLE` 문에 태그를 지정하여 테이블 리소스에 태그를 지정할 수 있습니다. 태그에 대한 자세한 내용은 [Amazon QLDB 리소스 태그 지정](tagging.md) 섹션을 참조하세요. 다음 예제에서는 ‭`environment=production`‬ 태그가 있는 ‭`Vehicle`‬이라는 테이블을 생성합니다.

```
CREATE TABLE Vehicle WITH (aws_tags = `{'environment': 'production'}`)
```

생성 시 테이블에 태그를 지정하려면 `qldb:PartiQLCreateTable` 및 `qldb:TagResource` 작업 모두에 액세스할 수 있어야 합니다. QLDB 리소스 권한에 대한 자세한 내용은 [Amazon QLDB에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 섹션을 참조하세요.

리소스를 생성하는 동안 태그를 지정하면 리소스 생성 후 사용자 지정 태그 지정 스크립트를 실행할 필요가 없습니다. 테이블에 태그가 지정된 후 해당 태그를 기반으로 테이블에 대한 액세스를 제어할 수 있습니다. 예를 들어 특정 태그가 있는 테이블에만 전체 액세스 권한을 부여할 수 있습니다. JSON 정책의 예는 [테이블 태그를 기반으로 하는 모든 작업에 대한 전체 액세스 권한](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-full-tags) 섹션을 참조하세요.

## 예시
<a name="ql-reference.create-table.examples"></a>

```
CREATE TABLE VehicleRegistration
```

```
CREATE TABLE Vehicle WITH (aws_tags = `{'environment': 'development'}`)
```

```
CREATE TABLE Vehicle WITH (aws_tags = `{'key1': 'value1', 'key2': 'value2'}`)
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.create-table.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB의 DELETE 명령
<a name="ql-reference.delete"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `DELETE` 명령을 사용하여 문서의 새로운 최종 개정본을 생성하여 활성 문서를 테이블에서 삭제된 것으로 표시합니다. 이 최종 개정본은 문서가 삭제되었음을 나타냅니다. 이 작업을 수행하면 문서의 수명 주기가 종료되므로 동일한 문서 ID로 더 이상 문서 개정본을 만들 수 없습니다.

이 작업은 되돌릴 수 없습니다. [기록 함수](working.history.md#working.history.function)를 사용하여 삭제된 문서의 개정 기록을 계속 쿼리할 수 있습니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.delete.syntax)
+ [파라미터](#ql-reference.delete.parameters)
+ [반환 값](#ql-reference.delete.return)
+ [예시](#ql-reference.delete.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.delete.driver)

## 구문
<a name="ql-reference.delete.syntax"></a>

```
DELETE FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
```

## 파라미터
<a name="ql-reference.delete.parameters"></a>

***table\$1name***  
삭제할 데이터가 포함된 사용자 테이블 이름입니다. DML 문은 기본 [사용자 뷰](working.userdata.md)에서만 지원됩니다. 각 명령문은 단일 테이블에서만 실행할 수 있습니다.

**AS *table\$1alias***  
(선택 사항)삭제할 테이블에 속하는 사용자 정의 별칭입니다. `AS` 키워드는 선택 사항입니다.

**BY *id\$1alias***  
(선택 사항)결과 집합에 있는 각 문서의 `id` 메타데이터 필드에 바인딩되는 사용자 정의 별칭입니다. `BY` 키워드를 사용하여 `FROM` 절에서 별칭을 선언해야 합니다. 이는 기본 사용자 뷰를 쿼리하면서 [문서 ID](working.metadata.md)를 기준으로 필터링하려는 경우에 유용합니다. 자세한 내용은 [BY 절을 사용하여 문서 ID 쿼리하기](working.metadata.by-clause.md)을 참조하세요.

**WHERE *condition***  
삭제할 문서의 선택 기준입니다.

**참고**  
`WHERE` 절을 생략하면 테이블 내의 모든 문서가 삭제됩니다.

## 반환 값
<a name="ql-reference.delete.return"></a>

`documentId` - 삭제한 각 문서의 고유 ID입니다.

## 예시
<a name="ql-reference.delete.examples"></a>

```
DELETE FROM VehicleRegistration AS r
WHERE r.VIN = '1HVBBAANXWH544237'
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.delete.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB의 DROP INDEX 명령
<a name="ql-reference.drop-index"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `DROP INDEX` 명령을 사용하여 테이블의 인덱스를 삭제합니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.drop-index.syntax)
+ [파라미터](#ql-reference.drop-index.parameters)
+ [반환 값](#ql-reference.drop-index.return)
+ [예시](#ql-reference.drop-index.examples)

## 구문
<a name="ql-reference.drop-index.syntax"></a>

```
DROP INDEX "indexId" ON table_name WITH (purge = true)
```

**참고**  
이 `WITH (purge = true)` 절은 모든 `DROP INDEX` 명령문에 필수이며 `true`는 현재 지원되는 유일한 값입니다.  
`purge` 키워드는 대소문자를 구분하며 모두 소문자여야 합니다.

## 파라미터
<a name="ql-reference.drop-index.parameters"></a>

**"*indexId*"**  
삭제할 인덱스의 고유 ID로, 큰따옴표로 표시됩니다.

**ON *table\$1name***  
인덱스를 삭제할 테이블의 이름입니다.

## 반환 값
<a name="ql-reference.drop-index.return"></a>

`tableId` - 인덱스를 삭제한 테이블의 고유 ID입니다.

## 예시
<a name="ql-reference.drop-index.examples"></a>

```
DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
```

# Amazon QLDB의 DROP TABLE 명령
<a name="ql-reference.drop-table"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `DROP TABLE` 명령을 사용하여 기존 테이블을 비활성화합니다. [UNDROP TABLE](ql-reference.undrop-table.md) 명령문을 사용하여 테이블을 다시 활성화할 수 있습니다. 테이블을 비활성화하거나 다시 활성화해도 해당 문서나 인덱스에는 영향을 주지 않습니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.drop-table.syntax)
+ [파라미터](#ql-reference.drop-table.parameters)
+ [반환 값](#ql-reference.drop-table.return)
+ [예시](#ql-reference.drop-table.examples)

## 구문
<a name="ql-reference.drop-table.syntax"></a>

```
DROP TABLE table_name
```

## 파라미터
<a name="ql-reference.drop-table.parameters"></a>

***table\$1name***  
비활성화할 테이블 이름입니다. 테이블이 이미 존재하고 `ACTIVE` 상태여야 합니다.

## 반환 값
<a name="ql-reference.drop-table.return"></a>

`tableId` - 비활성화한 테이블의 고유 ID입니다.

## 예시
<a name="ql-reference.drop-table.examples"></a>

```
DROP TABLE VehicleRegistration
```

# Amazon QLDB의 FROM (INSERT, REMOVE, 또는 SET) 명령
<a name="ql-reference.from"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서 `FROM`로 시작하는 문은 문서 내에 특정 요소를 삽입하고 제거할 수 있는 PartiQL 확장입니다. [UPDATE](ql-reference.update.md) 명령과 마찬가지로 이 명령문을 사용하여 문서의 기존 요소를 업데이트할 수도 있습니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.from.syntax)
+ [파라미터](#ql-reference.from.parameters)
+ [중첩된 컬렉션](#ql-reference.from.nested-collections)
+ [반환 값](#ql-reference.from.return)
+ [예시](#ql-reference.from.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.from.driver)

## 구문
<a name="ql-reference.from.syntax"></a>

**FROM-INSERT**

기존 문서에 새 요소를 삽입합니다. 새 최상위 문서를 테이블에 삽입하려면 [INSERT](ql-reference.insert.md)를 사용해야 합니다.

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
INSERT INTO element VALUE data [ AT key_name ]
```

**FROM-REMOVE**

문서 내의 기존 요소를 제거하거나 최상위 문서 전체를 제거합니다. 후자는 의미상 기존 [DELETE](ql-reference.delete.md) 구문과 동일합니다.

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
REMOVE element
```

**FROM-SET**

문서 내 하나 이상의 요소를 업데이트합니다. 요소가 없으면 해당 요소가 삽입됩니다. 이는 기존 [UPDATE](ql-reference.update.md) 구문과 의미상 동일합니다.

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
SET element = data [, element = data, ... ]
```

## 파라미터
<a name="ql-reference.from.parameters"></a>

***table\$1name***  
수정할 데이터가 포함된 사용자 테이블의 이름입니다. DML 문은 기본 [사용자 뷰](working.userdata.md)에서만 지원됩니다. 각 명령문은 단일 테이블에서만 실행할 수 있습니다.  
이 절에는 지정된 테이블 내에 중첩된 컬렉션을 하나 이상 포함할 수도 있습니다. 자세한 내용은 [중첩된 컬렉션](#ql-reference.from.nested-collections) 섹션을 참조하세요.

**AS *table\$1alias***  
(선택 사항)수정할 테이블 전체에 적용되는 사용자 정의 별칭입니다. `SET`, `REMOVE`, `INSERT INTO` 또는 `WHERE` 절에 사용되는 모든 테이블 별칭은 `FROM` 절에서 선언되어야 합니다. `AS` 키워드는 선택 사항입니다.

**BY *id\$1alias***  
(선택 사항)결과 집합에 있는 각 문서의 `id` 메타데이터 필드에 바인딩되는 사용자 정의 별칭입니다. `BY` 키워드를 사용하여 `FROM` 절에서 별칭을 선언해야 합니다. 이는 기본 사용자 뷰를 쿼리하면서 [문서 ID](working.metadata.md)를 기준으로 필터링하려는 경우에 유용합니다. 자세한 내용은 [BY 절을 사용하여 문서 ID 쿼리하기](working.metadata.by-clause.md)을 참조하세요.

**WHERE *condition***  
수정할 문서의 선택 기준입니다.  
`WHERE` 절을 생략하면 테이블의 모든 문서가 수정됩니다.

***element***  
생성하거나 수정할 문서 요소입니다.

***data***  
요소의 새 값입니다.

**AT *key\$1name***  
수정할 문서에 추가할 키 이름입니다. 키 이름과 함께 해당하는 `VALUE`을 지정해야 합니다. 이는 문서 내 특정 위치에 새 값 `AT`을 삽입하는 데 필요합니다.

## 중첩된 컬렉션
<a name="ql-reference.from.nested-collections"></a>

단일 테이블에서만 DML 문을 실행할 수 있지만 해당 테이블의 문서 내에 있는 중첩된 컬렉션을 추가 소스로 지정할 수 있습니다. 중첩 컬렉션에 대해 선언한 각 별칭은 `WHERE` 절과 `SET`, `INSERT INTO` 또는 `REMOVE` 절에서 사용할 수 있습니다.

예를 들어, 다음 명령문의 `FROM` 소스에는 `VehicleRegistration` 테이블과 중첩된 `Owners.SecondaryOwners` 구조가 모두 포함됩니다.

```
FROM VehicleRegistration r, @r.Owners.SecondaryOwners o
WHERE r.VIN = '1N4AL11D75C109151' AND o.PersonId = 'abc123'
SET o.PersonId = 'def456'
```

이 예제는 `'1N4AL11D75C109151'`의 `VIN`가 있는 `VehicleRegistration` 문서 내에서 `'abc123'`의 `PersonId`가 있는 `SecondaryOwners` 목록의 특정 요소를 업데이트합니다. 이 표현식을 사용하면 인덱스가 아닌 값을 기준으로 목록의 요소를 지정할 수 있습니다.

## 반환 값
<a name="ql-reference.from.return"></a>

`documentId` - 업데이트 또는 삭제한 각 문서의 고유 ID입니다.

## 예시
<a name="ql-reference.from.examples"></a>

문서 내 요소를 수정합니다. 요소가 존재하지 않는 경우 해당 요소가 삽입됩니다.

```
FROM Vehicle AS v
WHERE v.VIN = '1N4AL11D75C109151' AND v.Color = 'Silver'
SET v.Color = 'Shiny Gray'
```

시스템에서 할당한 문서 `id` 메타데이터 필드에 요소와 필터를 수정하거나 삽입합니다.

```
FROM Vehicle AS v BY v_id
WHERE v_id = 'documentId'
SET v.Color = 'Shiny Gray'
```

문서 내 `Owners.SecondaryOwners` 목록에 있는 *첫 번째* 요소의 `PersonId` 필드를 수정합니다.

```
FROM VehicleRegistration AS r
WHERE r.VIN = '1N4AL11D75C109151'
SET r.Owners.SecondaryOwners[0].PersonId = 'abc123'
```

문서 내 기존 요소를 제거합니다.

```
FROM Person AS p
WHERE p.GovId = '111-22-3333'
REMOVE p.Address
```

테이블에서 전체 문서를 제거합니다.

```
FROM Person AS p
WHERE p.GovId = '111-22-3333'
REMOVE p
```

`VehicleRegistration` 테이블의 문서 내 `Owners.SecondaryOwners` 목록의 *첫 번째* 요소를 제거합니다.

```
FROM VehicleRegistration AS r
WHERE r.VIN = '1N4AL11D75C109151'
REMOVE r.Owners.SecondaryOwners[0]
```

`{'Mileage':26500}`를 `Vehicle` 테이블의 문서 내에 최상위 이름-값 쌍으로 삽입합니다.

```
FROM Vehicle AS v 
WHERE v.VIN = '1N4AL11D75C109151'
INSERT INTO v VALUE 26500 AT 'Mileage'
```

`{'PersonId':'abc123'}`를 `VehicleRegistration` 테이블의 문서 `Owners.SecondaryOwners` 필드에 이름-값 쌍으로 추가합니다. 이 명령문이 유효하려면 `Owners.SecondaryOwners`이 이미 존재하고 목록 데이터 유형이어야 합니다. 그렇지 않으면 `INSERT INTO` 절에 `AT` 키워드가 필요합니다.

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners VALUE { 'PersonId' : 'abc123' }
```

`{'PersonId':'abc123'}`를 문서 내 기존 `Owners.SecondaryOwners` 목록의 *첫 번째* 요소로 삽입합니다.

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners VALUE {'PersonId' : 'abc123'} AT 0
```

문서 내 기존 `Owners.SecondaryOwners` 목록에 여러 개의 이름-값 쌍을 추가합니다.

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners << {'PersonId' : 'abc123'}, {'PersonId' : 'def456'} >>
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.from.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB의 INSERT 명령
<a name="ql-reference.insert"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `INSERT` 명령을 사용하여 하나 이상의 Amazon Ion 문서를 테이블에 추가합니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.insert.syntax)
+ [파라미터](#ql-reference.insert.parameters)
+ [반환 값](#ql-reference.insert.return)
+ [예시](#ql-reference.insert.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.insert.driver)

## 구문
<a name="ql-reference.insert.syntax"></a>

단일 문서를 삽입합니다.

```
INSERT INTO table_name VALUE document
```

여러 문서를 삽입합니다.

```
INSERT INTO table_name << document, document, ... >>
```

## 파라미터
<a name="ql-reference.insert.parameters"></a>

***table\$1name***  
데이터를 삽입할 사용자 테이블의 이름입니다. 이미 있는 테이블이어야 합니다. DML 문은 기본 [사용자 뷰](working.userdata.md)에서만 지원됩니다.

***document***  
유효한 [QLDB 문서](ql-reference.docs.md)입니다. 문서를 최소 하나 이상 지정해야 합니다. 여러 문서는 쉼표로 구분해야 합니다.  
문서는 중괄호(`{...}`)로 표시해야 합니다.  
문서의 각 필드 이름은 PartiQL에서 *작은* 따옴표(`'...'`)로 표시할 수 있는 대소문자를 구분하는 Ion 기호입니다.  
문자열 값도 PartiQL에서 *작은* 따옴표(`'...'`)로 표시될 수 있습니다.  
모든 Ion 리터럴은 백틱(``...``)으로 표시할 수 있습니다.

**참고**  
이중 꺾쇠 괄호(`<<...>>`)는 정렬되지 않은 컬렉션(PartiQL에서는 *백*이라고 함)을 나타내며 여러 문서를 삽입하려는 경우에만 필요합니다.

## 반환 값
<a name="ql-reference.insert.return"></a>

`documentId` - 삽입한 각 문서의 고유 ID입니다.

## 예시
<a name="ql-reference.insert.examples"></a>

단일 문서를 삽입합니다.

```
INSERT INTO VehicleRegistration VALUE
{
    'VIN' : 'KM8SRDHF6EU074761', --string
    'RegNum' : 1722, --integer
    'State' : 'WA',
    'City' : 'Kent',
    'PendingPenaltyTicketAmount' : 130.75, --decimal
    'Owners' : { --nested struct
        'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' },
        'SecondaryOwners' : [ --list of structs
            { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' },
            { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }
        ]
    },
    'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision
    'ValidToDate' : `2020-06-25T`
}
```

이 명령문은 삽입한 문서의 고유 ID를 다음과 같이 반환합니다.

```
{
    documentId: "2kKuOPNB07D2iTPBrUTWGl"
}
```

여러 문서를 삽입합니다.

```
INSERT INTO Person << 
{
    'FirstName' : 'Raul',
    'LastName' : 'Lewis',
    'DOB' : `1963-08-19T`,
    'GovId' : 'LEWISR261LL',
    'GovIdType' : 'Driver License',
    'Address' : '1719 University Street, Seattle, WA, 98109'
},
{
    'FirstName' : 'Brent',
    'LastName' : 'Logan',
    'DOB' : `1967-07-03T`,
    'GovId' : 'LOGANB486CG',
    'GovIdType' : 'Driver License',
    'Address' : '43 Stockert Hollow Road, Everett, WA, 98203'
},
{
    'FirstName' : 'Alexis',
    'LastName' : 'Pena',
    'DOB' : `1974-02-10T`,
    'GovId' : '744 849 301',
    'GovIdType' : 'SSN',
    'Address' : '4058 Melrose Street, Spokane Valley, WA, 99206'
}
>>
```

이 명령문은 삽입한 각 문서의 고유 ID를 다음과 같이 반환합니다.

```
{
    documentId: "6WXzLscsJ3bDWW97Dy8nyp"
},
{
    documentId: "35e0ToZyTGJ7LGvcwrkX65"
},
{
    documentId: "BVHPcH612o7JROQ4yP8jiH"
}
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.insert.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB의 SELECT 명령
<a name="ql-reference.select"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `SELECT` 명령을 사용하여 하나 이상의 테이블에서 데이터를 검색합니다. QLDB의 모든 `SELECT` 쿼리는 트랜잭션에서 처리되며 [트랜잭션 시간 초과 제한](limits.md#limits.fixed)이 적용됩니다.

결과 순서는 구체적이지 않으며 각 `SELECT` 쿼리마다 다를 수 있습니다. QLDB의 모든 쿼리에 대해 결과 순서에 의존해서는 안 됩니다.

특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**주의**  
인덱싱된 조회 없이 QLDB에서 쿼리를 실행하면 전체 테이블 스캔이 호출됩니다. PartiQL은 SQL과 호환되므로 이러한 쿼리를 지원합니다. 하지만 QLDB의 프로덕션 사용 사례에 대해서는 테이블 스캔을 실행하지 *마세요.*. 테이블 스캔은 동시성 충돌 및 트랜잭션 시간 초과를 포함하여 대규모 테이블에서 성능 문제를 일으킬 수 있습니다.  
인덱싱된 필드 또는 문서 ID(예: `WHERE indexedField = 123` 또는 `WHERE indexedField IN (456, 789)`)에서 동등 *연산자*를 사용하여 `WHERE` 조건자 절이 포함된 문을 실행하는 것이 좋습니다. 자세한 내용은 [쿼리 성능 최적화](working.optimize.md)을 참조하세요.

**Topics**
+ [구문](#ql-reference.select.syntax)
+ [파라미터](#ql-reference.select.parameters)
+ [조인](#ql-reference.select.joins)
+ [중첩된 쿼리 한도](#ql-reference.select.subqueries)
+ [예시](#ql-reference.select.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.select.driver)

## 구문
<a name="ql-reference.select.syntax"></a>

```
SELECT [ VALUE ] expression [ AS field_alias ] [, expression, ... ]
FROM source [ AS source_alias ] [ AT idx_alias ] [ BY id_alias ] [, source, ... ]
[ WHERE condition ]
```

## 파라미터
<a name="ql-reference.select.parameters"></a>

**값**  
값을 튜플 구조로 래핑하는 대신 쿼리에서 원시 데이터 유형 값을 반환하도록 하는 표현식의 한정자입니다.

***expression***  
`*` 와일드카드에서 형성된 프로젝션 또는 결과 집합에 있는 하나 이상의 필드로 구성된 프로젝션 목록입니다. 표현은 [PartiQL 함수](ql-functions.md)에 대한 호출 또는 [PartiQL 연산자](ql-operators.md)에서 수정되는 필드로 구성될 수 있습니다.

**AS *field\$1alias***  
(선택 사항)최종 결과 집합에 사용되는 필드의 임시 사용자 정의 별칭입니다. `AS` 키워드는 옵션입니다.  
단순 필드 이름이 아닌 표현식에 별칭을 지정하지 않으면 결과 집합은 해당 필드에 기본 이름을 적용합니다.

**FROM *source***  
쿼리할 소스입니다. 현재 지원되는 소스는 테이블 이름, 테이블 간 [내부 조인](#ql-reference.select.joins), 중첩된 `SELECT` 쿼리([중첩된 쿼리 한도](#ql-reference.select.subqueries)에 적용), 테이블에 대한 [기록 함수](working.history.md) 호출 뿐입니다.  
소스를 최소 하나 이상 지정해야 합니다. 여러 소스는 쉼표로 구분해야 합니다.

**AS *source\$1alias***  
(선택 사항)쿼리할 소스의 범위를 지정하는 사용자 정의 별칭입니다. `SELECT` 또는 `WHERE` 절에 사용되는 모든 소스 별칭은 `FROM` 절에 선언되어야 합니다. `AS` 키워드는 선택 사항입니다.

**AT *idx\$1alias***  
(선택 사항)소스 목록 내 각 요소의 인덱스(서수) 번호에 바인딩되는 사용자 정의 별칭입니다. `AT` 키워드를 사용하여 `FROM` 절에서 별칭을 선언해야 합니다.

**BY *id\$1alias***  
(선택 사항)결과 집합에 있는 각 문서의 `id` 메타데이터 필드에 바인딩되는 사용자 정의 별칭입니다. `BY` 키워드를 사용하여 `FROM` 절에서 별칭을 선언해야 합니다. 이는 기본 사용자 뷰를 쿼리하면서 [문서 ID](working.metadata.md)를 기반으로 프로젝션하거나 필터링하려는 경우에 유용합니다. 자세한 내용은 [BY 절을 사용하여 문서 ID 쿼리하기](working.metadata.by-clause.md)을 참조하세요.

**WHERE *condition***  
쿼리의 선택 기준 및 조인 기준(해당하는 경우)입니다.

**참고**  
`WHERE` 절을 생략하면 테이블의 모든 문서가 검색됩니다.

## 조인
<a name="ql-reference.select.joins"></a>

현재 내부 조인만 지원됩니다. 다음과 같이 명시적 `INNER JOIN` 절을 사용하여 내부 조인 쿼리를 작성할 수 있습니다. 이 구문에서는 `JOIN`와 `ON`가 쌍을 이루어야 하며 `INNER` 키워드는 선택 사항입니다.

```
SELECT expression
FROM table1 AS t1 [ INNER ] JOIN table2 AS t2
ON t1.element = t2.element
```

또는 다음과 같이 암시적 구문을 사용하여 내부 조인을 작성할 수 있습니다.

```
SELECT expression
FROM table1 AS t1, table2 AS t2
WHERE t1.element = t2.element
```

## 중첩된 쿼리 한도
<a name="ql-reference.select.subqueries"></a>

`SELECT` 표현식과 `FROM` 소스 내에서 중첩된 쿼리(하위 쿼리)를 작성할 수 있습니다. 주요 제한 사항은 가장 바깥쪽 쿼리만 글로벌 데이터베이스 환경에 액세스할 수 있다는 것입니다. 예를 들어, `VehicleRegistration` 및 `Person` 테이블이 있는 원장이 있다고 가정해 보겠습니다. 다음 중첩 쿼리는 내부 `SELECT`가 `Person`에 액세스를 시도하므로 유효하지 않습니다.

```
SELECT r.VIN,
    (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner
FROM VehicleRegistration AS r
```

반면 다음 중첩 쿼리는 유효합니다.

```
SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner
FROM VehicleRegistration AS r
```

## 예시
<a name="ql-reference.select.examples"></a>

다음 쿼리는 `IN` 연산자를 사용하는 표준 `WHERE` 술어 절이 포함된 기본 `SELECT` 전체 와일드카드를 보여줍니다.

```
SELECT * FROM Vehicle
WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

다음은 문자열 필터를 사용한 `SELECT` 프로젝션을 보여줍니다.

```
SELECT FirstName, LastName, Address 
FROM Person 
WHERE Address LIKE '%Seattle%'
AND GovId = 'LEWISR261LL'
```

다음은 중첩된 데이터를 평면화하는 상관 하위 쿼리를 보여줍니다. 참고로 이 `@` 문자는 기술적으로 선택 사항입니다. 하지만 이 표현은 `Owners`(존재하는 경우)이라는 이름의 다른 컬렉션이 아니라 `VehicleRegistration` 내에 중첩된 `Owners` 구조를 적용하고 싶다는 것을 명시적으로 나타냅니다. 자세한 내용은 *데이터 및 기록 다루기* 장의 [중첩된 데이터](working.userdata.md#working.userdata.nested) 섹션을 참조하세요.

```
SELECT 
    r.VIN, 
    o.SecondaryOwners
FROM
    VehicleRegistration AS r, @r.Owners AS o
WHERE
    r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

다음은 중첩된 데이터를 프로젝션하는 `SELECT` 목록의 하위 쿼리와 암시적 내부 조인을 보여줍니다.

```
SELECT
    v.Make, 
    v.Model, 
    (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner
FROM 
    VehicleRegistration AS r, Vehicle AS v
WHERE 
    r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

다음은 명시적 내부 조인을 보여줍니다.

```
SELECT
    v.Make, 
    v.Model, 
    r.Owners
FROM 
    VehicleRegistration AS r JOIN Vehicle AS v
ON
    r.VIN = v.VIN
WHERE
    r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

다음은 `BY` 절을 사용한 문서 `id` 메타데이터 필드의 프로젝션을 보여줍니다.

```
SELECT
    r_id,
    r.VIN
FROM
    VehicleRegistration AS r BY r_id
WHERE
    r_id = 'documentId'
```

다음은 `BY` 절을 사용하여 `PersonId` 및 문서 `id` 필드의 `DriversLicense` 및 `Person` 테이블에 각각 조인합니다.

```
SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid
ON d.PersonId = pid
WHERE pid = 'documentId'
```

다음은 [커밋된 뷰](working.metadata.md#working.metadata.committed)을 사용하여 `PersonId` 및 문서 `id` 필드의 `DriversLicense` 및 `Person` 테이블에 각각 조인합니다.

```
SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp
ON d.PersonId = cp.metadata.id
WHERE cp.metadata.id = 'documentId'
```

다음은 테이블 `VehicleRegistration` 내 문서에 대한 `Owners.SecondaryOwners` 목록에 있는 각 사람의 `PersonId` 및 인덱스(서수)를 반환합니다.

```
SELECT s.PersonId, owner_idx
FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx
WHERE r.VIN = 'KM8SRDHF6EU074761'
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.select.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB의 UPDATE 명령
<a name="ql-reference.update"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서는 `UPDATE` 명령을 사용하여 문서 내 하나 이상의 요소의 값을 수정합니다. 요소가 없으면 해당 요소가 삽입됩니다.

[FROM (INSERT, REMOVE, 또는 SET)](ql-reference.from.md) 명령문처럼 이 명령을 사용하여 문서 내에 특정 요소를 명시적으로 삽입하고 제거할 수도 있습니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.update.syntax)
+ [파라미터](#ql-reference.update.parameters)
+ [반환 값](#ql-reference.update.return)
+ [예시](#ql-reference.update.examples)
+ [드라이버를 사용하여 프로그래밍 방식으로 실행](#ql-reference.update.driver)

## 구문
<a name="ql-reference.update.syntax"></a>

**UPDATE-SET**

문서 내 하나 이상의 요소를 업데이트합니다. 요소가 없으면 해당 요소가 삽입됩니다. 이는 [FROM-SET](ql-reference.from.md) 문과 의미상 동일합니다.

```
UPDATE table_name [ AS table_alias ] [ BY id_alias ]
SET element = data [, element = data, ... ]
[ WHERE condition ]
```

**UPDATE-INSERT**

기존 문서에 새 요소를 삽입합니다. 새 최상위 문서를 테이블에 삽입하려면 [INSERT](ql-reference.insert.md)를 사용해야 합니다.

```
UPDATE table_name [ AS table_alias ] [ BY id_alias ]
INSERT INTO element VALUE data [ AT key_name ]
[ WHERE condition ]
```

**UPDATE-REMOVE**

문서 내의 기존 요소를 제거하거나 최상위 문서 전체를 제거합니다. 후자는 의미상 기존 [DELETE](ql-reference.delete.md) 구문과 동일합니다.

```
UPDATE table_name [ AS table_alias ] [ BY id_alias ]
REMOVE element
[ WHERE condition ]
```

## 파라미터
<a name="ql-reference.update.parameters"></a>

***table\$1name***  
수정할 데이터가 포함된 사용자 테이블의 이름입니다. DML 문은 기본 [사용자 뷰](working.userdata.md)에서만 지원됩니다. 각 명령문은 단일 테이블에서만 실행할 수 있습니다.

**AS *table\$1alias***  
(선택 사항)업데이트할 테이블에 속하는 사용자 정의 별칭입니다. `AS` 키워드는 선택 사항입니다.

**BY *id\$1alias***  
(선택 사항)결과 집합에 있는 각 문서의 `id` 메타데이터 필드에 바인딩되는 사용자 정의 별칭입니다. `BY` 키워드를 사용하여 `UPDATE` 절에서 별칭을 선언해야 합니다. 이는 기본 사용자 뷰를 쿼리하면서 [문서 ID](working.metadata.md)를 기준으로 필터링하려는 경우에 유용합니다. 자세한 내용은 [BY 절을 사용하여 문서 ID 쿼리하기](working.metadata.by-clause.md)을 참조하세요.

***element***  
생성하거나 수정할 문서 요소입니다.

***data***  
요소의 새 값입니다.

**AT *key\$1name***  
수정할 문서에 추가할 키 이름입니다. 키 이름과 함께 해당하는 `VALUE`을 지정해야 합니다. 이는 문서 내 특정 위치에 새 값 `AT`을 삽입하는 데 필요합니다.

**WHERE *condition***  
수정할 문서의 선택 기준입니다.

**참고**  
`WHERE` 절을 생략하면 테이블의 모든 문서가 수정됩니다.

## 반환 값
<a name="ql-reference.update.return"></a>

`documentId` - 업데이트한 각 문서의 고유 ID입니다.

## 예시
<a name="ql-reference.update.examples"></a>

문서의 필드를 업데이트합니다. 필드가 존재하지 않는 경우 해당 필드가 삽입됩니다.

```
UPDATE Person AS p
SET p.LicenseNumber = 'HOLLOR123ZZ'
WHERE p.GovId = '111-22-3333'
```

시스템에서 할당한 문서 `id` 메타데이터 필드를 기준으로 필터링합니다.

```
UPDATE Person AS p BY pid
SET p.LicenseNumber = 'HOLLOR123ZZ'
WHERE pid = 'documentId'
```

문서 전체를 덮어씁니다.

```
UPDATE Person AS p
SET p = {
    'FirstName' : 'Rosemarie',
    'LastName' : 'Holloway',
    'DOB' : `1977-06-18T`,
    'GovId' : '111-22-3333',
    'GovIdType' : 'Driver License',
    'Address' : '4637 Melrose Street, Ellensburg, WA, 98926'
}
WHERE p.GovId = '111-22-3333'
```

문서 내 `Owners.SecondaryOwners` 목록에 있는 *첫 번째* 요소의 `PersonId` 필드를 수정합니다.

```
UPDATE VehicleRegistration AS r
SET r.Owners.SecondaryOwners[0].PersonId = 'abc123'
WHERE r.VIN = '1N4AL11D75C109151'
```

`{'Mileage':26500}`를 `Vehicle` 테이블의 문서 내에 최상위 이름-값 쌍으로 삽입합니다.

```
UPDATE Vehicle AS v
INSERT INTO v VALUE 26500 AT 'Mileage'
WHERE v.VIN = '1N4AL11D75C109151'
```

`{'PersonId':'abc123'}`를 `VehicleRegistration` 테이블의 문서 `Owners.SecondaryOwners` 필드에 이름-값 쌍으로 추가합니다. 이 명령문이 유효하려면 `Owners.SecondaryOwners`이 이미 존재하고 목록 데이터 유형이어야 합니다. 그렇지 않으면 `INSERT INTO` 절에 `AT` 키워드가 필요합니다.

```
UPDATE VehicleRegistration AS r
INSERT INTO r.Owners.SecondaryOwners VALUE { 'PersonId' : 'abc123' }
WHERE r.VIN = '1N4AL11D75C109151'
```

`{'PersonId':'abc123'}`를 문서 내 기존 `Owners.SecondaryOwners` 목록의 *첫 번째* 요소로 삽입합니다.

```
UPDATE VehicleRegistration AS r
INSERT INTO r.Owners.SecondaryOwners VALUE {'PersonId' : 'abc123'} AT 0
WHERE r.VIN = '1N4AL11D75C109151'
```

문서 내 기존 `Owners.SecondaryOwners` 목록에 여러 개의 이름-값 쌍을 추가합니다.

```
UPDATE VehicleRegistration AS r
INSERT INTO r.Owners.SecondaryOwners << {'PersonId' : 'abc123'}, {'PersonId' : 'def456'} >>
WHERE r.VIN = '1N4AL11D75C109151'
```

문서 내 기존 요소를 제거합니다.

```
UPDATE Person AS p
REMOVE p.Address
WHERE p.GovId = '111-22-3333'
```

테이블에서 전체 문서를 제거합니다.

```
UPDATE Person AS p
REMOVE p
WHERE p.GovId = '111-22-3333'
```

`VehicleRegistration` 테이블의 문서 내 `Owners.SecondaryOwners` 목록의 *첫 번째* 요소를 제거합니다.

```
UPDATE VehicleRegistration AS r
REMOVE r.Owners.SecondaryOwners[0]
WHERE r.VIN = '1N4AL11D75C109151'
```

## 드라이버를 사용하여 프로그래밍 방식으로 실행
<a name="ql-reference.update.driver"></a>

QLDB 드라이버를 사용하여 이 명령문을 프로그래밍 방식으로 실행하는 방법을 알아보려면 *드라이버 시작하기*에서 다음 자습서를 참조하세요.
+ Java: [빠른 시작 자습서](driver-quickstart-java.md) \$1 [Cookbook 참조](driver-cookbook-java.md)
+ .NET: [빠른 시작 자습서](driver-quickstart-dotnet.md) \$1 [Cookbook 참조](driver-cookbook-dotnet.md)
+ Go: [빠른 시작 자습서](driver-quickstart-golang.md) \$1 [Cookbook 참조](driver-cookbook-golang.md)
+ Node.js: [빠른 시작 자습서](driver-quickstart-nodejs.md) \$1 [Cookbook 참조](driver-cookbook-nodejs.md)
+ Python: [빠른 시작 자습서](driver-quickstart-python.md) \$1 [Cookbook 참조](driver-cookbook-python.md)

# Amazon QLDB의 UNDROP TABLE 명령
<a name="ql-reference.undrop-table"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서 `UNDROP TABLE` 명령을 사용하여 이전에 삭제한(즉, 비활성화된) 테이블을 다시 활성화합니다. 테이블을 비활성화하거나 다시 활성화해도 해당 문서나 인덱스에는 영향을 주지 않습니다.

**참고**  
특정 테이블에서 이 PartiQL 명령을 실행하기 위한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 표준 권한 모드로 시작하기](getting-started-standard-mode.md) 섹션을 참조하세요.

**Topics**
+ [구문](#ql-reference.undrop-table.syntax)
+ [파라미터](#ql-reference.undrop-table.parameters)
+ [반환 값](#ql-reference.undrop-table.return)
+ [예시](#ql-reference.undrop-table.examples)

## 구문
<a name="ql-reference.undrop-table.syntax"></a>

```
UNDROP TABLE "tableId"
```

## 파라미터
<a name="ql-reference.undrop-table.parameters"></a>

**"*tableId*"**  
다시 활성화할 테이블의 고유 ID로, 큰따옴표로 표시됩니다.  
테이블은 이전에 삭제된 적이 있어야 합니다. 즉, 해당 테이블은 [시스템 카탈로그 테이블](working.catalog.md) `information_schema.user_tables`에 존재하며 `INACTIVE` 상태여야 합니다. 또한 동일한 이름을 가진 활성 기존 테이블이 없어야 합니다.

## 반환 값
<a name="ql-reference.undrop-table.return"></a>

`tableId` - 재활성화한 테이블의 고유 ID입니다.

## 예시
<a name="ql-reference.undrop-table.examples"></a>

```
UNDROP TABLE "5PLf9SXwndd63lPaSIa0O6"
```