0
0
MySQLquery~20 mins

INSERT with SELECT in MySQL - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Master of INSERT with SELECT
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
What rows are inserted by this query?
Given two tables employees and new_employees, what rows will be inserted into new_employees after running this query?

INSERT INTO new_employees (id, name, department) SELECT id, name, department FROM employees WHERE department = 'Sales';
MySQL
CREATE TABLE employees (id INT, name VARCHAR(20), department VARCHAR(20));
INSERT INTO employees VALUES (1, 'Alice', 'Sales'), (2, 'Bob', 'HR'), (3, 'Charlie', 'Sales');
CREATE TABLE new_employees (id INT, name VARCHAR(20), department VARCHAR(20));
ANo rows inserted
B(2, 'Bob', 'HR')
C(1, 'Alice', 'Sales'), (2, 'Bob', 'HR'), (3, 'Charlie', 'Sales')
D(1, 'Alice', 'Sales'), (3, 'Charlie', 'Sales')
Attempts:
2 left
💡 Hint
Think about which employees belong to the 'Sales' department.
📝 Syntax
intermediate
2:00remaining
Which INSERT with SELECT syntax is correct?
Choose the correct syntax to insert data from products table into archived_products table for products with price < 100.

Both tables have columns (product_id, name, price).
AINSERT INTO archived_products (product_id, name, price) SELECT product_id, name, price FROM products WHERE price < 100;
BINSERT archived_products SELECT product_id, name, price FROM products WHERE price < 100;
CINSERT INTO archived_products VALUES SELECT product_id, name, price FROM products WHERE price < 100;
DINSERT INTO archived_products (product_id, name, price) VALUES SELECT product_id, name, price FROM products WHERE price < 100;
Attempts:
2 left
💡 Hint
Remember the correct order: INSERT INTO ... SELECT ...
optimization
advanced
2:00remaining
How to optimize this INSERT with SELECT for large data?
You want to insert millions of rows from orders into archived_orders using:

INSERT INTO archived_orders SELECT * FROM orders WHERE order_date < '2023-01-01';

Which option improves performance?
AUse multiple single-row INSERT statements instead of one INSERT with SELECT.
BRemove the WHERE clause to insert all rows faster.
CAdd an index on order_date in orders before running the query.
DDisable indexes on archived_orders before insert and rebuild after.
Attempts:
2 left
💡 Hint
Think about how filtering large data can be faster.
🔧 Debug
advanced
2:00remaining
Why does this INSERT with SELECT fail?
Given tables users (id INT, username VARCHAR(20)) and archived_users (user_id INT, username VARCHAR(20), archived_at DATE), why does this query fail?

INSERT INTO archived_users (user_id, username) SELECT id, username FROM users;
ABecause archived_at column is missing in the INSERT and has no default value.
BBecause column names in INSERT and SELECT do not match exactly.
CBecause SELECT statement must include archived_at column.
DBecause users table has no data.
Attempts:
2 left
💡 Hint
Check if all NOT NULL columns without defaults are provided values.
🧠 Conceptual
expert
2:00remaining
What happens if INSERT with SELECT returns zero rows?
If you run:

INSERT INTO archive SELECT * FROM logs WHERE event_date > '2025-01-01';

and no rows match the WHERE condition, what is the result?
AThe query raises an error because no rows match the condition.
BNo rows are inserted, but the query runs successfully with zero affected rows.
CThe archive table is truncated before insert.
DThe query inserts NULL rows into archive.
Attempts:
2 left
💡 Hint
Think about what happens when SELECT returns empty result.