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

RIGHT JOIN for Right Outer Queries

SQL JoinsRIGHT JOIN🟒 Free Lesson

Advertisement

SQL Joins

RIGHT JOIN for Right Outer Queries

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

  • All Right Rows β€” includes every record from the joined table
  • Flexible Matching β€” NULLs fill where no left match exists Get complete data from the secondary table.

What is a RIGHT JOIN?

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

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

RIGHT JOIN Behavior

Orders TableCustomers TableRIGHT JOIN Result
OrderID=101, CustID=1ID=1, JohnOrder 101, John
OrderID=102, CustID=2ID=2, JaneOrder 102, Jane
OrderID=103, CustID=5No matchOrder 103, NULL
OrderID=104, CustID=5No matchOrder 104, NULL
-- Find orders without matching customer records
SELECT 
  o.order_id,
  o.order_date,
  o.total_amount
FROM customers c
RIGHT JOIN orders o ON c.customer_id = o.customer_id
WHERE c.customer_id IS NULL;

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

RIGHT JOIN vs LEFT JOIN Equivalence

RIGHT JOINEquivalent LEFT JOIN
A RIGHT JOIN BB LEFT JOIN A
All rows from BAll rows from B
Matching rows from AMatching rows from A
NULLs for unmatched ANULLs for unmatched A
-- These two queries produce the same result:

-- RIGHT JOIN version
SELECT c.customer_name, o.order_id
FROM customers c
RIGHT JOIN orders o ON c.customer_id = o.customer_id;

-- LEFT JOIN equivalent (table order swapped)
SELECT c.customer_name, o.order_id
FROM orders o
LEFT JOIN customers c ON c.customer_id = o.customer_id;

-- Find all departments and their employees (including empty depts)
SELECT 
  d.department_name,
  e.employee_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;

-- Equivalent using LEFT JOIN
SELECT 
  d.department_name,
  e.employee_name
FROM departments d
LEFT JOIN employees e ON e.department_id = d.department_id;

Common RIGHT JOIN Patterns

-- RIGHT JOIN for complete reporting
SELECT 
  p.category,
  p.product_name,
  COALESCE(SUM(oi.quantity), 0) AS units_sold
FROM order_items oi
RIGHT JOIN products p ON oi.product_id = p.product_id
GROUP BY p.category, p.product_name;

-- RIGHT JOIN with aggregate functions
SELECT 
  d.department_name,
  COUNT(e.employee_id) AS employee_count,
  COALESCE(AVG(e.salary), 0) AS avg_salary
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;

-- RIGHT JOIN for data completeness checks
SELECT 
  s.supplier_name,
  COUNT(p.product_id) AS product_count,
  COALESCE(AVG(p.unit_cost), 0) AS avg_cost
FROM products p
RIGHT JOIN suppliers s ON p.supplier_id = s.supplier_id
GROUP BY s.supplier_id, s.supplier_name;

Need Expert SQL Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement