In SQL, there are situations where you need to copy data from one table to another, whether for creating backups, migrating information, or updating a table with new data. This is where the INSERT INTO SELECT clause becomes an essential tool. This clause allows you to select data from one table and insert it directly into another, simplifying the process of duplicating or transferring data. In this article, we’ll explore what INSERT INTO SELECT is, its syntax, practical uses, examples, and how it can help you manage your data efficiently.


What is INSERT INTO SELECT?

The INSERT INTO SELECT command combines the INSERT INTO and SELECT clauses to copy data from one table to another. Instead of manually inserting values, this command selects data from an existing table and automatically inserts it into another table, either within the same database or in a different one.


Syntax of INSERT INTO SELECT

The basic syntax of INSERT INTO SELECT is as follows:

INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;

Key Components:

  1. INSERT INTO target_table: Specifies the table into which the data will be inserted.
  2. (column1, column2, …): Optionally defines the columns in the target table where the data will be inserted.
  3. SELECT column1, column2, …: Selects the columns from the source table to be copied.
  4. FROM source_table: Indicates the table from which the data is extracted.
  5. WHERE condition: Filters the rows to be copied (optional).

What is INSERT INTO SELECT Used For?

The INSERT INTO SELECT command is useful in various scenarios, such as:

  1. Copying Data Between Tables: Transferring data from one table to another within the same database.
  2. Creating Data Backups: Generating a backup of a table into another table.
  3. Migrating Data: Moving data from one table in a database to another database.
  4. Inserting Filtered Data: Copying only rows that meet specific conditions.
  5. Updating Tables: Adding new data to an existing table from another table.

Practical Examples of INSERT INTO SELECT

Example 1: Copy All Data

If you have a table Customers and want to copy all its data to a new table Customers_Backup:

INSERT INTO Customers_Backup
SELECT * FROM Customers;

Example 2: Copy Specific Columns

If you want to copy only the Name and Email columns from the Customers table to the Contacts table:

INSERT INTO Contacts (Name, Email)
SELECT Name, Email FROM Customers;

Example 3: Copy Filtered Data

To copy only customers who reside in “Mexico” from the Customers table to the Customers_Mexico table:

INSERT INTO Customers_Mexico
SELECT * FROM Customers
WHERE Country = 'Mexico';

Example 4: Copy Data Between Databases

If you want to copy data from a Sales table in a database DB1 to a Sales_History table in another database DB2:

INSERT INTO DB2.dbo.Sales_History
SELECT * FROM DB1.dbo.Sales;

Example 5: Insert Data with Transformations

If you want to copy data from the Products table to the Updated_Products table and transform the price by applying a 10% discount:

INSERT INTO Updated_Products (ID, Name, Price)
SELECT ID, Name, Price * 0.9 FROM Products;

Considerations When Using INSERT INTO SELECT

  1. Column Compatibility: The selected columns must match in type and order with the columns in the target table.
  2. Primary and Unique Keys: Ensure you don’t violate constraints like primary or unique keys when inserting data.
  3. Data Duplication: If conditions aren’t used, data may be duplicated if the command is executed more than once.
  4. Performance: When copying large volumes of data, consider the impact on database performance.

Alternatives to INSERT INTO SELECT

In some cases, you can use other methods to copy data, such as:

  1. CREATE TABLE AS: Create a new table with the selected data (not available in all databases).
  2. INSERT INTO VALUES: Insert values manually into the target table.
  3. ETL Tools: Use ETL (Extract, Transform, Load) tools to copy and transform data.

Example with CREATE TABLE AS (in MySQL):

CREATE TABLE Customers_Backup AS
SELECT * FROM Customers;

Conclusion

The INSERT INTO SELECT command is a powerful tool for copying data from one table to another, making it easier to perform tasks like creating backups, migrations, and data updates. By understanding its syntax and practical uses, you can optimize your data management and improve the efficiency of your SQL queries.

Ready to use INSERT INTO SELECT in your next query? Try the examples provided and take your SQL skills to the next level!

Scroll to Top