INSERT¶
テーブルに1つ以上の行を挿入して、テーブルを更新します。テーブルの各列に挿入される値は、明示的に指定するか、クエリの結果にすることができます。
- こちらもご参照ください。
構文¶
必須パラメーター¶
target_table行を挿入するターゲットテーブルを指定します。
VALUES ( value | DEFAULT | NULL [ , ... ] ) [ , ( ... ) ]ターゲットテーブルの対応する列に挿入する1つ以上の値を指定します。
VALUES句では、次を指定できます。value:明示的に指定された値を挿入します。値は、リテラルまたは単一の値に評価される式にすることができます。DEFAULT: ターゲットテーブルの対応する列にデフォルト値を挿入します。NULL:NULL値を挿入します。
句の各値はコンマで区切る必要があります。
句に追加の値セットを指定することにより、複数の行を挿入できます。詳細については、:ref:`label-insert_command_usage_notes`および:ref:`label-insert_command_examples`をご参照ください。
query対応する列に挿入される値を返す クエリ ステートメントを指定します。これにより、1つ以上のソーステーブルからターゲットテーブルに行を挿入できます。
オプションのパラメーター¶
OVERWRITEテーブルに値を挿入する前に、ターゲットテーブルを切り捨てる必要があることを指定します。このオプションを指定しても、テーブルのアクセス制御権限には影響しません。
INSERT
OVERWRITEを含むステートメントは、現在のトランザクションのスコープ内で処理できます。これにより、次のようなトランザクションをコミットする DDL ステートメントを回避できます。デフォルト: 値なし(ターゲットテーブルは、挿入を実行する前に切り捨て られない)
( target_col_name [ , ... ] )対応する値が挿入されるターゲットテーブルの1つ以上の列を指定します。指定されたターゲット列の数は、
VALUES句で指定された値または列の値と一致する必要があります(値がクエリの結果である場合)。デフォルト: 値なし(ターゲットテーブルの列が すべて 更新されます)。
使用上の注意¶
単一の INSERT コマンドを使用して、 VALUES 句でコンマで区切られた追加の値セットを指定することにより、テーブルに複数の行を挿入できます。
たとえば、次の句は3列のテーブルに3行を挿入しますが、最初の2行には値
1、2、および3を、3行目には値2、3、および4を挿入します。INSERT で OVERWRITE オプションを使用するには、 OVERWRITE がテーブル内の既存の記録を削除するため、テーブルに対する DELETE 権限のあるロールを使用する必要があります。
以下の式を含むVALUES句で指定できない式もあります。
サブクエリ
例:
:doc:`半構造化</sql-reference/data-types-semistructured>`または:doc:`構造化</sql-reference/data-types-structured>`データ型の値。
例:
-
例:
-
例:
VALUES句の代替として、:samp:`{query}`句で式を指定します。たとえば、次の式を置き換えることができます。
この式に置き換えることができます。
VALUES句は200,000行に制限されます。この制限は、単一の INSERT INTO ... VALUES ステートメントと単一の INSERT INTO ... SELECT ... FROM VALUES ステートメントに適用されます。一括データロードを実行するには、 COPY INTO <テーブル> コマンドの使用を検討してください。VALUES ステートメントでの SELECT 句の仕様の詳細については、 VALUES をご参照ください。
ハイブリッド・テーブルへのデータ挿入については、 データのロード をご参照ください。
例¶
以下の例では、 INSERT コマンドを使用しています。
クエリを使用した単一行挿入¶
3つの文字列値を日付またはタイムスタンプに変換し、それらを mytable テーブルの単一行に挿入します。
前の例と同様ですが、テーブルの最初と3番目の列のみを更新するように指定します。
明示的に指定された値を使用した複数行挿入¶
employees テーブルを作成し、 VALUES 句にコンマ区切りのリストで値の提供して、4行のデータを挿入します。
複数行の挿入では、最初の行のデータ型がガイドとして使用されるため、挿入された値のデータ型が行全体で一貫していることを確認してください。テーブルを作成し、2行を挿入します。
最初の挿入は期待通りに機能します。
2行目の値('d')のデータ型が文字列であり、1行目の値(3)の数値データ型と異なるため、2回目の挿入は失敗します。どちらの値もテーブルの列のデータ型である VARCHAR に 強制 できるにもかかわらず、挿入は失敗します。値 'd' のデータ型が列 v のデータ型と同じでも、挿入は失敗します。
データ型が行全体で一致している場合、挿入は成功し、両方の数値は VARCHAR データ型に強制されます。
クエリを使用した複数行挿入¶
contractors テーブルの複数行のデータを employees テーブルに挿入します。
worknum列に市外局番650が含まれる行のみを選択します。city列に NULL 値を挿入します。
共通のテーブル式を使用して、 contractors テーブルから employees テーブルに複数行のデータを挿入します。
ソーステーブルの id 列の INNER JOIN を使用して、2つのテーブル(emp_addr、 emp_ph)の列を3番目のテーブル(emp)に挿入します。
JSON データの複数行挿入¶
2つの JSON オブジェクトをテーブルの VARIANT 列に挿入します。
OVERWRITE を使用した挿入¶
この例では、 INSERT と OVERWRITE を使用して、 employees テーブルに新しいレコードが追加された後、 employees から sf_employees テーブルを再構築します。
両方のテーブルの初期データは次のとおりです。
このステートメントは、 OVERWRITE 句を使用して sf_employees テーブルに行を挿入します。
INSERT は OVERWRITE 句を使用しているため、 sf_employees の古い行は消えています。
v3|iceberg-tm|テーブルへの書き込み¶
次の例では、|iceberg-tm|テーブル仕様のv3に準拠した|iceberg-tm|テーブルに行を挿入します。