πŸŽ‰ 75% of content is free forever β€” Unlock Premium from $10/mo β†’
CW
Search courses…
πŸ’Ό Servicesℹ️ Aboutβœ‰οΈ ContactView Pricing Plansfrom $10

LEFT JOIN for Left Outer Queries

SQL JoinsLEFT JOIN🟒 Free Lesson

Advertisement

SQL Joins

LEFT JOIN for Left Outer Queries

LEFT JOIN returns all rows from the left table and matching rows from the right table.

  • All Left Rows β€” includes every record from the primary table
  • Optional Right Data β€” NULLs fill where no match exists Never miss records from your primary table.

What is a LEFT JOIN?

DfLEFT JOIN

A LEFT JOIN (or LEFT OUTER JOIN) returns all rows from the left table and the matching rows from the right table. When no match is found, NULL values are returned for columns from the right table.

Table ATable BMATCHReturns ALL rows from left + matching from right
-- LEFT JOIN returns all customers, even without orders
SELECT 
  c.customer_name,
  o.order_id,
  o.order_date
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;

-- LEFT JOIN with multiple tables
SELECT 
  c.customer_name,
  o.order_id,
  p.product_name,
  oi.quantity
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
LEFT JOIN order_items oi ON o.order_id = oi.order_id
LEFT JOIN products p ON oi.product_id = p.product_id;

LEFT JOIN Behavior

Customers TableOrders TableLEFT JOIN Result
ID=1, JohnOrderID=101, CustID=1ID=1, John, Order 101
ID=2, JaneOrderID=102, CustID=2ID=2, Jane, Order 102
ID=3, BobNo ordersID=3, Bob, NULL
ID=4, AliceNo ordersID=4, Alice, NULL
-- Find customers who have never placed an order
SELECT 
  c.customer_id,
  c.customer_name
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL;

-- Count orders per customer (including zero orders)
SELECT 
  c.customer_name,
  COUNT(o.order_id) AS order_count
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name;

Use LEFT JOIN with IS NULL on the right table to find records that don't have related data β€” a common pattern for finding orphaned or unmatched records.

LEFT JOIN vs INNER JOIN

DfJoin Comparison

INNER JOIN returns only rows with matches in both tables. LEFT JOIN returns all left table rows, adding NULLs for unmatched right table rows.

ScenarioINNER JOINLEFT JOIN
All customers with ordersReturns customers with ordersReturns all customers
Customers without ordersExcludedIncluded with NULLs
Count per customerOnly customers with ordersAll customers
NULL handling neededNot neededRequired
-- Find all employees and their department (including unassigned)
SELECT 
  e.employee_name,
  COALESCE(d.department_name, 'Unassigned') AS department
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

-- Products without any sales
SELECT 
  p.product_name,
  COALESCE(SUM(oi.quantity), 0) AS total_sold
FROM products p
LEFT JOIN order_items oi ON p.product_id = oi.product_id
GROUP BY p.product_id, p.product_name
HAVING COALESCE(SUM(oi.quantity), 0) = 0;

Common LEFT JOIN Patterns

-- LEFT JOIN with aggregate functions
SELECT 
  c.customer_name,
  MAX(o.order_date) AS last_order_date,
  COALESCE(SUM(o.total_amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name;

-- LEFT JOIN for reporting
SELECT 
  d.department_name,
  COUNT(e.employee_id) AS headcount,
  COALESCE(AVG(e.salary), 0) AS avg_salary
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name;

-- Multiple LEFT JOINs with filtering
SELECT 
  c.customer_name,
  o.order_id,
  o.order_date,
  p.product_name
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
LEFT JOIN order_items oi ON o.order_id = oi.order_id
LEFT JOIN products p ON oi.product_id = p.product_id
WHERE c.country = 'USA';

Be cautious with LEFT JOINs followed by WHERE conditions on the right table β€” this can effectively convert it to an INNER JOIN.

Key Takeaways

  1. LEFT JOIN returns all rows from the left table regardless of matches
  2. Unmatched rows show NULL for right table columns
  3. Use IS NULL on right table columns to find unmatched records
  4. LEFT JOIN is essential for finding orphaned or missing related data
  5. Avoid WHERE clauses on right table columns after LEFT JOIN
⭐

Premium Content

LEFT JOIN for Left Outer Queries

Unlock this lesson and 900+ advanced tutorials with a Premium plan.

🎯End-to-end Projects
πŸ’ΌInterview Prep
πŸ“œCertificates
🀝Community Access

Already a member? Log in

Need Expert SQL Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement