Bird
Raised Fist0
MySQLquery~10 mins

INSERT with SELECT in MySQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - INSERT with SELECT
Start
↓
Run SELECT query
↓
Fetch rows from SELECT
↓
Insert each row into target table
↓
All rows inserted
↓
End
This flow shows how an INSERT statement uses a SELECT query to get rows, then inserts those rows into another table.
Execution Sample
MySQL
INSERT INTO employees_backup (id, name, salary)
SELECT id, name, salary FROM employees
WHERE salary > 50000;
This query copies employees with salary over 50000 from employees table into employees_backup table.
Execution Table
StepActionSELECT Result RowINSERT ActionRows Inserted So Far
1Run SELECT queryid=2, name='Alice', salary=60000Insert row into employees_backup1
2Run SELECT queryid=4, name='Bob', salary=70000Insert row into employees_backup2
3Run SELECT queryid=5, name='Carol', salary=80000Insert row into employees_backup3
4Run SELECT queryNo more rowsStop inserting3
💡 No more rows returned by SELECT, insertion complete.
Variable Tracker
VariableStartAfter 1After 2After 3Final
Rows Inserted01233
Key Moments - 2 Insights
Why does the INSERT statement not have VALUES but uses SELECT instead?
Because the INSERT is using a SELECT query to get multiple rows at once, so VALUES is replaced by the SELECT result rows as shown in execution_table steps 1-3.
What happens if the SELECT query returns no rows?
No rows are inserted. The execution_table row 4 shows 'No more rows' and insertion stops immediately.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, how many rows have been inserted after step 2?
A3
B1
C2
D0
💡 Hint
Check the 'Rows Inserted So Far' column at step 2 in the execution_table.
At which step does the SELECT query return no more rows?
AStep 4
BStep 3
CStep 1
DStep 2
💡 Hint
Look at the 'SELECT Result Row' column in execution_table for the step showing 'No more rows'.
If the WHERE condition changed to salary > 80000, how would the 'Rows Inserted So Far' change at step 3?
AIt would be 3
BIt would be 0
CIt would be 1
DIt would be 2
💡 Hint
Refer to variable_tracker and consider which rows meet the new condition.
Concept Snapshot
INSERT with SELECT syntax:
INSERT INTO target_table (columns)
SELECT columns FROM source_table WHERE condition;

- SELECT fetches rows
- INSERT adds those rows to target
- Useful for copying or transforming data
- No VALUES keyword needed
- Stops when SELECT returns no rows
Full Transcript
This visual execution shows how an INSERT statement can use a SELECT query to insert multiple rows into a table. First, the SELECT query runs and fetches rows matching the condition. Each row from the SELECT is inserted into the target table one by one. The process continues until no more rows are returned by the SELECT. The variable tracker shows how the count of inserted rows increases step by step. Key moments clarify why VALUES is not used and what happens if no rows match. The quiz tests understanding of the insertion count and flow based on the execution table.

Practice

(1/5)
1. What does the INSERT INTO ... SELECT statement do in MySQL?
easy
A. Copies rows from one table to another matching column structure
B. Deletes rows from a table based on a condition
C. Updates existing rows in a table
D. Creates a new table with selected columns

Solution

  1. Step 1: Understand the purpose of INSERT INTO ... SELECT

    This statement copies data from one table to another by selecting rows from the source table.
  2. Step 2: Recognize the matching column requirement

    The columns selected must match the target table's columns in number and type to insert correctly.
  3. Final Answer:

    Copies rows from one table to another matching column structure -> Option A
  4. Quick Check:

    INSERT with SELECT copies rows [OK]
Hint: Think of copying rows from one table to another [OK]
Common Mistakes:
  • Confusing INSERT with SELECT as a delete or update operation
  • Thinking it creates a new table
  • Assuming it modifies existing rows instead of inserting
2. Which of the following is the correct syntax to insert rows from table1 into table2 using INSERT INTO ... SELECT?
easy
A. INSERT INTO table1 SELECT * FROM table2;
B. INSERT table2 INTO SELECT * FROM table1;
C. INSERT INTO table2 SELECT * FROM table1;
D. SELECT * INTO table2 FROM table1;

Solution

  1. Step 1: Identify correct INSERT INTO ... SELECT syntax

    The correct syntax is INSERT INTO target_table SELECT ... FROM source_table;.
  2. Step 2: Match the option to syntax

    INSERT INTO table2 SELECT * FROM table1; matches this syntax exactly, inserting rows from table1 into table2.
  3. Final Answer:

    INSERT INTO table2 SELECT * FROM table1; -> Option C
  4. Quick Check:

    Correct INSERT INTO ... SELECT syntax = INSERT INTO table2 SELECT * FROM table1; [OK]
Hint: Remember: INSERT INTO target SELECT ... FROM source [OK]
Common Mistakes:
  • Swapping table names in INSERT and SELECT
  • Using SELECT INTO which is not standard in MySQL
  • Incorrect keyword order like INSERT table INTO
3. Given two tables:
employees(id, name, department)
managers(id, name, department)
What will be the result of this query?
INSERT INTO managers (id, name, department) SELECT id, name, department FROM employees WHERE department = 'Sales';
medium
A. Only employees from Sales department are copied to managers
B. All employees are copied to managers
C. No rows are copied because of syntax error
D. Only managers from Sales department are updated

Solution

  1. Step 1: Analyze the SELECT part with WHERE clause

    The SELECT picks only employees where department equals 'Sales'.
  2. Step 2: Understand INSERT INTO effect

    These selected rows are inserted into the managers table, adding only Sales department employees.
  3. Final Answer:

    Only employees from Sales department are copied to managers -> Option A
  4. Quick Check:

    WHERE filters rows inserted [OK]
Hint: WHERE filters rows to insert [OK]
Common Mistakes:
  • Assuming all employees are copied ignoring WHERE
  • Thinking it updates existing rows instead of inserting
  • Confusing syntax causing no rows inserted
4. What is wrong with this query?
INSERT INTO products (id, name) SELECT id, name, price FROM items;
medium
A. Missing WHERE clause causes syntax error
B. Number of columns in INSERT and SELECT do not match
C. Table names are reversed
D. No error, query runs fine

Solution

  1. Step 1: Compare columns in INSERT and SELECT

    INSERT specifies 2 columns (id, name), but SELECT returns 3 columns (id, name, price).
  2. Step 2: Understand column count requirement

    Number of columns must match exactly; mismatch causes error.
  3. Final Answer:

    Number of columns in INSERT and SELECT do not match -> Option B
  4. Quick Check:

    Column count mismatch causes error [OK]
Hint: Match column count in INSERT and SELECT [OK]
Common Mistakes:
  • Ignoring extra columns in SELECT
  • Thinking WHERE is mandatory
  • Assuming reversed table names cause error
5. You want to copy only unique customer emails from orders to newsletter_subscribers without duplicates. Which query achieves this?
hard
A. INSERT INTO newsletter_subscribers (email) SELECT email FROM orders GROUP BY email HAVING COUNT(*) > 1;
B. INSERT INTO newsletter_subscribers (email) SELECT email FROM orders WHERE email NOT IN newsletter_subscribers;
C. INSERT INTO newsletter_subscribers (email) SELECT email FROM orders WHERE email IS NULL;
D. INSERT INTO newsletter_subscribers (email) SELECT DISTINCT email FROM orders;

Solution

  1. Step 1: Identify how to select unique emails

    Using SELECT DISTINCT email returns unique emails from orders.
  2. Step 2: Insert unique emails into newsletter_subscribers

    INSERT INTO with SELECT DISTINCT copies only unique emails, avoiding duplicates.
  3. Final Answer:

    INSERT INTO newsletter_subscribers (email) SELECT DISTINCT email FROM orders; -> Option D
  4. Quick Check:

    Use DISTINCT to avoid duplicates [OK]
Hint: Use SELECT DISTINCT to insert unique rows [OK]
Common Mistakes:
  • Using WHERE NOT IN with incorrect syntax
  • Grouping but selecting only duplicates
  • Inserting NULL emails unintentionally
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard