INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }
INSERTはテーブルに新しい行を挿入します。 値式を使用して1度に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';
この例では、配列型の列に挿入しています。
-- 三目並べ用の 3x3 マスのゲーム盤を作成します。 -- (以下の問い合わせは同じゲーム盤を作成します。 INSERT INTO tictactoe (game, board[1:3][1:3]) VALUES (1,'{{"","",""},{"","",""},{"","",""}}'); INSERT INTO tictactoe (game, board) VALUES (2,'{{,,},{,,},{,,}}');
INSERTは標準SQLと完全に互換性があります。 標準では、列名リストが省略された時に、VALUES句またはqueryで一部の列のみを提供することはできません。
query句の機能についての考えられる制限は、SELECTにて記述されています。