MySQL Tutorial
INSERT ... SELECT
StatementThe INSERT ... SELECT
statement in MySQL allows you to insert data into a table by selecting data from one or more tables. It is a powerful way to copy or migrate data without manually inserting each record.
Copy only some columns from one table into another table:
INSERT INTO target_table (column1, column2, ...) SELECT column1, column2, ... FROM source_table WHERE condition;
Copy all columns from one table to another table:
INSERT INTO table2 SELECT * FROM table1 WHERE condition;
target_table
→ The table where data will be inserted.column1, column2, ...
→ The columns of the target table that will receive data.source_table
→ The table from which data is selected.WHERE condition
→ (Optional) Specifies which rows should be inserted.We have two tables:
student_id |
name |
gender |
city |
age |
score |
course_id |
|
phone_number |
---|---|---|---|---|---|---|---|---|
1 |
Alice |
Female |
Delhi |
20 |
85 |
101 |
NULL |
1234567890 |
2 |
Bob |
Male |
Mumbai |
22 |
75 |
NULL |
bob@email.com |
NULL |
3 |
Charlie |
Male |
Delhi |
21 |
95 |
102 |
NULL |
NULL |
4 |
David |
Male |
Bangalore |
23 |
65 |
101 |
david@email.com |
NULL |
5 |
Eve |
Female |
Mumbai |
20 |
80 |
103 |
NULL |
NULL |
6 |
Frank |
Male |
Delhi |
22 |
90 |
103 |
NULL |
NULL |
7 |
Alice |
Female |
Mumbai |
19 |
60 |
102 |
NULL |
NULL |
student_id |
name |
score |
---|
This table is empty and will store students who scored above 80.
The following SQL statement copies "students" into "top_students" (the columns that are not filled with data, will contain NULL):
student_id |
name |
score |
---|---|---|
1 |
Alice |
85 |
3 |
Charlie |
95 |
The following SQL statement copies "students" into "top_students" (fill all columns):