The SQL INSERT statement is a fundamental operation that allows you to add new data into a relational database table. Whether you’re populating your database with initial data or continually updating it with fresh information, understanding how to use the INSERT statement is essential.


The basic syntax of the SQL INSERT statement is as follows:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
  • INSERT INTO: This keyword is used to indicate that you want to insert data into a table.

  • table_name: Specify the name of the target table where you intend to add new records.

  • (column1, column2, ...): Here, you can specify the column names into which you want to insert data. This part is optional; if omitted, the INSERT statement will insert values into all columns in the same order they appear in the table schema.

  • VALUES (value1, value2, ...): This clause contains the actual values you want to insert into the specified columns. The number of values must match the number of columns you specified (or the total number of columns in the absence of column names).

Basic SQL INSERT Examples

Let’s dive into some straightforward examples to illustrate the SQL INSERT statement in action:


Inserting a Single Record

 INSERT INTO employees (first_name, last_name, salary)
VALUES ('John', 'Doe', 50000);

This query adds a new employee named John Doe with a salary of $50,000 to the “employees” table.


Inserting Multiple Records

INSERT INTO products (product_name, price)
('Widget', 10.99),
('Gadget', 19.99),
('Doodad', 7.49);

Here, three new products with their respective names and prices are inserted into the “products” table in a single query.


Advanced SQL INSERT Features

The SQL INSERT statement offers several advanced features to cater to more complex scenarios:


INSERT with Subqueries

You can use subqueries in the INSERT statement to retrieve data from other tables or generate data dynamically. This is particularly useful when you want to copy data from one table into another or perform transformations during insertion.

INSERT INTO new_customers (customer_name, registration_date)
SELECT customer_name, NOW()
FROM temporary_customers;

In this example, data is inserted into the “new_customers” table by selecting values from the “temporary_customers” table and also including the current date and time.



If some columns have default values defined in the table schema, you can omit those columns from the INSERT statement, and the database will automatically insert the default values.

INSERT INTO orders (customer_id, order_date)
VALUES (101, '2023-09-10');

Here, we only specify the “customer_id” and “order_date,” while other columns with default values will be populated accordingly.



Some database systems, like PostgreSQL, support the RETURNING clause, which allows you to retrieve the values of columns after insertion. This can be valuable when you need to obtain auto-generated keys or confirm that the data has been inserted as intended.

INSERT INTO employees (first_name, last_name, salary)
VALUES ('Alice', 'Smith', 60000)
RETURNING employee_id;

In this query, the RETURNING clause retrieves the “employee_id” of the newly inserted record.


Best Practices for SQL INSERT

When using the SQL INSERT statement, consider the following best practices:


Use Prepared Statements: Whenever possible, use prepared statements or parameterized queries to prevent SQL injection attacks and improve performance.


Validate Data: Ensure that the data you are inserting adheres to the constraints and data types defined in the table schema.


Bulk Insertion: When inserting a large volume of data, explore bulk insertion methods or batch processing for efficiency.


Transaction Management: Wrap your INSERT statements in transactions when necessary to maintain data integrity.


Index Consideration: Be mindful of indexes on the table, as they can impact the speed of insert operations, especially for large datasets.


The SQL INSERT statement is a pivotal tool for adding data to your relational database tables. Its versatility, when combined with its advanced features like subqueries and default values, empowers you to populate and maintain your database with ease and precision. Following best practices and considering performance implications will ensure that your INSERT operations are efficient and secure, contributing to the overall reliability and functionality of your database-driven applications.

Build something ULTIMATE!

About Us

Learn about HTML, CSS, SASS, Javascript, jQuery, PHP, SQL, WordPress. From basics to tips and tricks.

Connect With us

© 2023 Ultimate WebDev

This website uses cookies to improve your experience. By browsing this website, you agree to our cookies. Accept Read More