# INSERT Use INSERT for both single- and multi-row ad hoc inserts. (When inserting many rows, use the more efficient [COPY](/loading-and-exporting-data/command-line/load-data#copy-from) command.) ``` INSERT INTO (column1, ...) VALUES (row_1_value_1, ...), ..., (row_n_value_1, ...); ``` ## Examples ```sql CREATE TABLE ar (ai INT[], af FLOAT[], ad2 DOUBLE[2]); INSERT INTO ar VALUES ({1,2,3},{4.0,5.0},{1.2,3.4}); INSERT INTO ar VALUES (ARRAY[NULL,2],NULL,NULL); INSERT INTO ar VALUES (NULL,{},{2.0,NULL}); -- or a multi-row insert equivalent INSERT INTO ar VALUES ({1,2,3},{4.0,5.0},{1.2,3.4}), (ARRAY[NULL,2],NULL,NULL), (NULL,{},{2.0,NULL}); ``` You can also insert into a table as SELECT, as shown in the following examples: ```sql INSERT INTO destination_table SELECT * FROM source_table; ``` ```sql INSERT INTO destination_table (id, name, age, gender) SELECT * FROM source_table; ``` ```sql INSERT INTO destination_table (name, gender, age, id) SELECT name, gender, age, id FROM source_table; ``` ```sql INSERT INTO votes_summary (vote_id, vote_count) SELECT vote_id, sum(*) FROM votes GROUP_BY vote_id; ``` You can insert array literals into array columns. The inserts in the following example each have three array values, and demonstrate how you can: * Create a table with variable-length and fixed-length array columns. * Insert `NULL` arrays into these colums. * Specify and insert array literals using `{...}` or `ARRAY[...]` syntax. * Insert empty variable-length arrays using`{}` and `ARRAY[]` syntax. * Insert array values that contain `NULL` elements. ```sql CREATE TABLE ar (ai INT[], af FLOAT[], ad2 DOUBLE[2]); INSERT INTO ar VALUES ({1,2,3},{4.0,5.0},{1.2,3.4}); INSERT INTO ar VALUES (ARRAY[NULL,2],NULL,NULL); INSERT INTO ar VALUES (NULL,{},{2.0,NULL}); ``` ## Default Values If you [create a table](/sql/data-definition-ddl/tables#create-table) with column that has a default value, or [alter a table](/sql/data-definition-ddl/tables#alter-table) to add a column with a default value, using the INSERT command creates a record that includes the default value if it is omitted from the INSERT. For example, assume a table created as follows: ```sql CREATE TABLE tbl ( id INTEGER NOT NULL, name TEXT NOT NULL DEFAULT 'John Doe', age SMALLINT NOT NULL); ``` If you omit the name column from an INSERT or INSERT FROM SELECT statement, the missing value for column `name` is set to `'John Doe'`. `INSERT INTO tbl (id, age) VALUES (1, 36);` creates the record `1|'John Doe'|36` . `INSERT INTO tbl (id, age) SELECT id, age FROM old_tbl;` also sets all the name values to `John Doe` .