Day 3/7 - SQL Challenge šÆ
TODAY'S QUESTION:
Find all products that have never been ordered.
TABLES:
Products (id, product_name, price)
Orders (id, customer_id, order_date)
Order_Items (id, order_id, product_id, quantity)
THE SOLUTION:
SELECT p.product_name
FROM Products p
LEFT JOIN Order_Items oi ON
p.id = oi.product_id
WHERE oi.product_id IS NULL;
WHY THIS WORKS:
LEFT JOIN keeps ALL products (even without matches)
Products without orders have NULL in Order_Items columns
WHERE oi.product_id IS NULL filters to only those products
COMMON MISTAKES:
ā Using INNER JOIN (only returns ordered products)
ā Using WHERE oi.order_id = NULL (should be IS NULL)
ā Not understanding LEFT JOIN vs INNER JOIN difference
ALTERNATIVE (using NOT IN):
SELECT product_name
FROM Products
WHERE id NOT IN (
SELECT DISTINCT product_id
FROM Order_Items
WHERE product_id IS NOT NULL
);
ALTERNATIVE (using NOT EXISTS):
SELECT product_name
FROM Products p
WHERE NOT EXISTS (
SELECT 1
FROM Order_Items oi
WHERE ...