

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# INSERT
<a name="r_INSERT_30"></a>

**Topics**
+ [構文](#r_INSERT_30-synopsis)
+ [パラメータ](#r_INSERT_30-parameters)
+ [使用に関する注意事項](#r_INSERT_30_usage_notes)
+ [INSERT の例](c_Examples_of_INSERT_30.md)

新しい行をテーブルに挿入します。VALUES 構文を使用して 1 行、VALUES 構文を使用して複数行、クエリの結果で定義された 1 つまたは複数の行を挿入できます (INSERT INTO ... SELECT)。

**注記**  
大量のデータをロードする場合は [COPY](r_COPY.md) コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを向上させるには、INSERT INTO SELECT または [CREATE TABLE AS](r_CREATE_TABLE_AS.md) を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「[Amazon Redshift でのデータのロード](t_Loading_data.md)」を参照してください。

**注記**  
単一 SQL ステートメントの最大サイズは 16 MB です。

## 構文
<a name="r_INSERT_30-synopsis"></a>

```
INSERT INTO table_name [ ( column [, ...] ) ]
{DEFAULT VALUES |
VALUES ( { expression | DEFAULT } [, ...] )
[, ( { expression | DEFAULT } [, ...] )
[, ...] ] |
query }
```

## パラメータ
<a name="r_INSERT_30-parameters"></a>

 *table\_name*   
一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルに対して INSERT 権限を持つユーザーのみが行を挿入できます。*query* 句を使用して行を挿入する場合、クエリで指定したテーブルに対して SELECT 権限を持っている必要があります。  
INSERT (外部テーブル) を使用して、SELECT クエリの結果を外部カタログの既存のテーブルに挿入します。詳細については、「[INSERT (外部テーブル)](r_INSERT_external_table.md)」を参照してください。

 *column*   
テーブルの 1 つまたは複数の列に値を挿入できます。ターゲットの列名は、任意の順序で列挙できます。列リストを指定しない場合、挿入する値は、CREATE TABLE ステートメントで宣言した順序で、テーブルの列に対応している必要があります。挿入する値の数が、テーブルの列数よりも少ない場合、最初の *n* 列がロードされます。  
宣言されたデフォルト値または NULL 値が、INSERT ステートメントに含まれない列に (暗黙的または明示的に) ロードされます。

DEFAULT VALUES   
テーブルの作成時に、テーブルの列にデフォルト値が割り当てられた場合、これらのキーワードを使用して、デフォルト値の全体を構成する行を挿入します。いずれかの列がデフォルト値ではない場合、それらの列には NULL が挿入されます。いずれかの列が NOT NULL と宣言されている場合、INSERT ステートメントはエラーを返します。

VALUES   
このキーワードを使用して、1 つまたは複数の行を挿入します。各行は 1 つまたは複数の値で構成されます。各行の VALUES リストは、列リストに対応する必要があります。複数の行を挿入する場合、式リストの間はカンマで区切ります。VALUES キーワードは繰り返さないでください。複数行の INSERT ステートメントのすべての VALUES には、同じ数の値が含まれている必要があります。

 *expression*   
1 つの値、または 1 つの値に評価される式。各値は、挿入される列のデータ型と互換性がある必要があります。可能な場合、データ型が列に宣言されているデータ型と一致しない値は、互換性のあるデータ型に自動的に変換されます。次に例を示します。  
+ 10 進値の `1.1` は `1` として INT に挿入されます。
+ 10 進値の `100.8976` は `100.90` として DEC (5,2) 列に挿入されます。
値を互換性のあるデータ型に明示的に変換するには、式に型変換構文を含めます。例えば、テーブル T1 の列 COL1 が CHAR(3) 列の場合。  

```
insert into t1(col1) values('Incomplete'::char(3));
```
このステートメントは、列に値 `Inc` を挿入します。  
1 行の INSERT VALUES ステートメントの場合、式としてスカラーサブクエリを使用できます。サブクエリの結果は適切な列に挿入されます。  
複数行の INSERT VALUES ステートメントでは、式にサブクエリを使用できません。

DEFAULT   
このキーワードを使用して、テーブル作成時の定義に従って列のデフォルト値を挿入します。列のデフォルト値が存在しない場合、NULL が挿入されます。NOT NULL の制約がある列に CREATE TABLE ステートメントで割り当てられた明示的なデフォルト値がない場合、それらの列にデフォルト値を挿入することはできません。

 *query*()   
クエリを定義して、1 つまたは複数の行をテーブルに挿入します。クエリで生成されたすべての行がテーブルに挿入されます。クエリは、テーブルの列と互換性がある列リストを返す必要がありますが、列名が一致する必要はありません。

## 使用に関する注意事項
<a name="r_INSERT_30_usage_notes"></a>

**注記**  
大量のデータをロードする場合は [COPY](r_COPY.md) コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを向上させるには、INSERT INTO SELECT または [CREATE TABLE AS](r_CREATE_TABLE_AS.md) を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「[Amazon Redshift でのデータのロード](t_Loading_data.md)」を参照してください。

挿入される値のデータ形式は、CREATE TABLE 定義で指定されたデータ形式と一致する必要があります。

 テーブルに新しく多数の行を挿入した後: 
+ ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
+ テーブルを分析して、クエリプランナーの統計情報を更新します。

値が DECIMAL 列に挿入され、指定されたスケールを超えると、必要に応じて、ロードされる値は切り上げられます。例えば、`20.259`という値を DECIMAL(8,2) に挿入すると、ソートされた値は `20.26` になります。

GENERATED BY DEFAULT AS IDENTITY 列を追加できます。GENERATED BY DEFAULT AS IDENTITY として定義された列を、指定した値で更新できます。詳細については、「[GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause)」を参照してください。