What if you could instantly see who didn't buy anything without searching endlessly?
Why LEFT JOIN in MySQL? - Purpose & Use Cases
Imagine you have two lists: one with customers and another with their orders. You want to see all customers, even those who haven't placed any orders yet.
Manually matching these lists means checking each customer against every order. This is slow, confusing, and easy to miss customers without orders.
LEFT JOIN lets you combine these lists so you get every customer and their orders if any, all in one simple step.
For each customer:
For each order:
If customer ID matches order customer ID:
Show customer and order
If no orders found:
Show customer with empty order infoSELECT customers.name, orders.item FROM customers LEFT JOIN orders ON customers.id = orders.customer_id;
It makes seeing all items from one list, plus matching info from another, easy and error-free.
A store owner wants to see all customers and what they bought, including those who haven't bought anything yet.
LEFT JOIN shows all records from the first table.
It adds matching records from the second table when available.
It helps find missing or unmatched data easily.
Practice
LEFT JOIN do in SQL?Solution
Step 1: Understand LEFT JOIN behavior
A LEFT JOIN keeps all rows from the left table regardless of matches in the right table.Step 2: Check what happens with unmatched rows
If no matching row exists in the right table, the result shows NULL for right table columns.Final Answer:
Returns all rows from the left table and matching rows from the right table, NULL if no match. -> Option DQuick Check:
LEFT JOIN = all left rows + matched right rows [OK]
- Confusing LEFT JOIN with INNER JOIN
- Thinking it returns all right table rows
- Assuming unmatched rows are dropped
Solution
Step 1: Review standard LEFT JOIN syntax
The correct syntax uses LEFT JOIN followed by ON condition to specify matching columns.Step 2: Check each option
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id; uses correct syntax: LEFT JOIN with ON clause. SELECT * FROM table1 JOIN LEFT table2 ON table1.id = table2.id; has JOIN LEFT which is invalid. SELECT * FROM table1 LEFT OUTER JOIN table2 WHERE table1.id = table2.id; uses WHERE instead of ON, which is incorrect for JOIN condition. SELECT * FROM table1 LEFT JOIN table2 WHERE table1.id = table2.id; uses WHERE instead of ON, invalid syntax.Final Answer:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id; -> Option AQuick Check:
LEFT JOIN syntax = LEFT JOIN ... ON ... [OK]
- Using JOIN LEFT instead of LEFT JOIN
- Using WHERE instead of ON for join condition
- Putting join condition directly in WHERE after table
Employees(id, name)Departments(id, dept_name, emp_id)What is the output of this query?
SELECT e.name, d.dept_name FROM Employees e LEFT JOIN Departments d ON e.id = d.emp_id ORDER BY e.id;
Assuming:
Employees: (1, 'Alice'), (2, 'Bob'), (3, 'Carol')
Departments: (10, 'HR', 1), (20, 'IT', 3)
Solution
Step 1: Match Employees with Departments using LEFT JOIN
LEFT JOIN keeps all Employees. For each employee, it tries to find a matching department where e.id = d.emp_id.Step 2: Check matches and NULLs
'Alice' (id=1) matches department 'HR' (emp_id=1). 'Bob' (id=2) has no matching department, so dept_name is NULL. 'Carol' (id=3) matches 'IT' (emp_id=3).Final Answer:
[('Alice', 'HR'), ('Bob', NULL), ('Carol', 'IT')] -> Option CQuick Check:
LEFT JOIN keeps all left rows, unmatched right columns NULL [OK]
- Assuming unmatched rows are dropped
- Mixing up emp_id and id columns
- Ignoring ORDER BY effect
SELECT a.id, b.value FROM tableA a LEFT JOIN tableB b ON a.id = b.id WHERE b.value > 10;
Solution
Step 1: Understand effect of WHERE on LEFT JOIN
LEFT JOIN keeps all rows from tableA, but WHERE b.value > 10 excludes rows where b.value is NULL (no match), effectively turning it into INNER JOIN.Step 2: Identify the error
The error is using WHERE to filter on right table columns after LEFT JOIN, which removes unmatched rows.Final Answer:
The WHERE clause filters out rows where b.value is NULL, defeating LEFT JOIN purpose. -> Option AQuick Check:
WHERE on right table column after LEFT JOIN removes unmatched rows [OK]
- Using WHERE instead of ON for right table filters
- Confusing LEFT JOIN with INNER JOIN
- Ignoring NULLs in join columns
Products(product_id, name)Sales(sale_id, product_id, quantity)You want to list all products with total quantity sold, including products with zero sales.
Which query correctly uses LEFT JOIN to achieve this?
Solution
Step 1: Use LEFT JOIN from Products to Sales
To include all products even with no sales, LEFT JOIN Sales to Products on product_id.Step 2: Aggregate sales quantity and group by product
Use SUM(s.quantity) to total sales per product. Group by p.product_id to get one row per product.Final Answer:
SELECT p.name, SUM(s.quantity) FROM Products p LEFT JOIN Sales s ON p.product_id = s.product_id GROUP BY p.product_id; -> Option BQuick Check:
LEFT JOIN + SUM + GROUP BY lists all products with total sales [OK]
- Using INNER JOIN excludes products with zero sales
- Joining Sales to Products reverses LEFT JOIN logic
- Filtering in WHERE removes unmatched rows
Ready to prove it?
Pass the test and this pattern moves unknown
