INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }
INSERTはテーブルに新しい行を挿入します。 値式を使用して一度に1つの行を挿入するだけでなく、問い合わせの結果を使って複数の行を挿入することもできます。
対象の列名はどのような順番でも指定できます。 列名リストが指定されなかった場合は、宣言時の順番に並べたテーブル内の全ての列がデフォルトとなります。 また、VALUES句やqueryでN列のみが指定された場合は、先頭のN列の名前がデフォルトとなります。 VALUES句やqueryで提供される値は、明示的または暗黙的な列リストと左から右への順で関連付けられます
明示的または暗黙的な列リストにない各列にはデフォルト値(デフォルト値が宣言されていればその値、未宣言ならばNULL)が挿入されます。
各列の式が正しいデータ型でない場合は、自動的に型の変換が行われます。
テーブルに行を追加するには、そのテーブルに対してINSERT権限を持っている必要があります。 queryを使用して問い合わせ結果を元に行を挿入する場合は、その問い合わせ内で使われる全てのテーブルに対してSELECT権限を持っている必要があります。
既存のテーブルの名前です(スキーマ修飾名も可)。
table内の列名です。
全ての列に、それぞれのデフォルト値が設定されます。
対応するcolumnに代入する有効な式または値を指定します。
対応するcolumnに、デフォルト値を設定します。
挿入する行を提供する問い合わせ(SELECT文)を指定します。 構文の説明についてはSELECT文を参照してください。
正常に終了すると、INSERTは以下のようなコマンドタグを返します。
INSERT oid count
countは挿入された行数です。 countが正確に1であり、対象のテーブルがOIDを持つ場合、oidは挿入された行に割り当てられたOIDです。 その他の場合、oidは0となります。
filmsテーブルに1行を挿入します。
INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');
この例では、len列を省略しています。 したがって、ここにはデフォルト値NULLが入ります。
INSERT INTO films (code, title, did, date_prod, kind) VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');
3つ目の例では、日付列に対して値ではなくDEFAULTを使用します。
INSERT INTO films VALUES ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes'); INSERT INTO films (code, title, did, date_prod, kind) VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');
全てデフォルト値からなる行を挿入します。
INSERT INTO films DEFAULT VALUES;
この例では、filmsテーブルと同じ列レイアウトを持つtmp_filmsテーブルからfilmsテーブルへいくつか行を挿入します。
INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
この例では、配列型の列に挿入しています。
-- 三目並べ用の3×3マスのゲーム盤を作成します。 -- (次の2つの問い合わせが作成するゲーム盤は同じです) INSERT INTO tictactoe (game, board[1:3][1:3]) VALUES (1,'{{"","",""},{"","",""},{"","",""}}'); INSERT INTO tictactoe (game, board) VALUES (2,'{{,,},{,,},{,,}}');
INSERTは標準SQLと完全な互換性を持ちます。 標準SQLでは、列名リストが省略された時に、VALUES句またはqueryで一部の列のみを指定することはできません。
制限される可能性があるquery句の機能については、SELECTにて記述されています。