Overview

The INSERT INTO statement adds new rows to an existing table using a SELECT statement or explicitly stating input values.

Syntax

The basic syntax for INSERT INTO is as follows:

INSERT INTO table_name[(columns_order)] VALUES (value 1), (value 2), ... (value n);

or

INSERT INTO table_name[(columns_order)] select_statement; 

Where:

  • table_name: The table name.

  • (columns_order): Optional column order in the table.

  • select_statement: A SELECT statement that provides the data to insert. For example, SELECT (value 1), (value 2), ... (value n);.

Examples

Case #1: Basic Usage

Let’s create a distance table.

CREATE TABLE distance_table (distance INT, unit TEXT);

We’ll then insert values representing different distance measurements.

INSERT INTO distance_table (distance, unit) VALUES
    (2000, 'kilometers'),
    (1000, 'meters'),
    (5, 'miles');

Display the table using the query below.

SELECT * FROM distance_table;

You’ll get the following output.

 distance |    unit    
----------+------------
     2000 | kilometers
     1000 | meters
        5 | miles

Case #2: Switching Column Orders

In this example, we create a weight table with columns kilo and gram. Then, we add data using the default column order (kilo, gram).

CREATE TABLE weight(kilo INT, gram INT);
INSERT INTO weight SELECT 45, 52;

Next, we insert data with a switched column order (gram, kilo).

INSERT INTO weight(gram, kilo) SELECT 45, 52;

Let’s see what’s on the table.

SELECT * FROM weight;

The output displays the first row with data from the default column order and the second row with reversed data from the switched column order.

 kilo | gram 
------+------
   45 |   52
   52 |   45

Case #3: Inserting with a NULL Column

In this case, we only insert data into a gram column while leaving the kilo column as NULL.

CREATE TABLE weight(kilo INT, gram INT);
INSERT INTO weight(gram) SELECT 45;

Display the table.

SELECT * FROM weight;

The output shows the first column (kilo) as NULL.

kilo  | gram 
------+------
      |  45 

Case #4: Error Handling - Too Many Values

In this case, an error occurs when attempting to insert more values than the specified columns in the table.

CREATE TABLE weight(kilo INT, gram INT);
INSERT INTO weight SELECT 45, 52, 30;

The error result indicates that the table weight has only 2 columns.

ERROR:  INSERT has more expressions than target columns

Case #5: Error Handling - Inserting NULL into a Not-Nullable Column

In this example, you insert data into a gram column and a NULL value into a kilo column.

CREATE TABLE weight(kilo INT, gram INT);
INSERT INTO weight(gram) SELECT 30;

You will get an error result as you try to input data only in the gram column, leaving the kilo column empty, where there is a NOT NULL constraint.

ERROR:  null value in column "kilo" of relation "weight" violates not-null constraint