Mastering SQL Joins: A Beginner's Guide to INNER, LEFT, RIGHT, and FULL OUTER Joins

Shivam DubeyShivam Dubey
5 min read

When working with relational databases, data is often split across multiple tables to reduce redundancy and improve organization. To retrieve meaningful information, you frequently need to combine data from these tables. This is where joins come into play. In this article, we will explore the four most common types of joins in SQL—INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL OUTER JOIN—with clear explanations and examples designed for beginners.


What Are Joins?

A join is an SQL operation that allows you to combine rows from two or more tables based on a related column between them. Imagine you have one table with customer details and another table with orders. To see which customer made which order, you’d use a join to link these tables by a common attribute, such as a customer ID.


Sample Tables for Our Examples

Let’s assume we have two simple tables: customers and orders.

Customers Table

customer_idnamecity
1AliceNew York
2BobLos Angeles
3CarolChicago

Orders Table

order_idcustomer_idproductamount
1011Laptop1200
1022Smartphone800
1031Tablet500
1044Monitor300

Note: Notice that the orders table includes an order for customer_id 4. However, this customer does not exist in the customers table. This situation will help us understand how different joins handle unmatched rows.


1. INNER JOIN

Definition:

An INNER JOIN returns only the rows where there is a match in both tables. If a customer does not have any corresponding orders or vice versa, those rows are excluded.

Syntax:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.common_column = table2.common_column;

Example:

Suppose we want to retrieve the names of customers along with the products they ordered. We use the customer_id column, which is common to both tables:

SELECT c.name, o.product, o.amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id;

Result:

nameproductamount
AliceLaptop1200
BobSmartphone800
AliceTablet500

Explanation:

  • Only orders with a matching customer in the customers table are returned.

  • Order 104 (with customer_id 4) is not included because there is no corresponding customer.


2. LEFT JOIN (or LEFT OUTER JOIN)

Definition:

A LEFT JOIN returns all rows from the left table (the first table listed in the query) and the matching rows from the right table. If there is no match, the result is NULL on the side of the right table.

Syntax:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column;

Example:

Retrieve all customers along with any orders they might have placed:

SELECT c.name, o.product, o.amount
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;

Result:

nameproductamount
AliceLaptop1200
AliceTablet500
BobSmartphone800
CarolNULLNULL

Explanation:

  • Every customer from the customers table appears in the result.

  • Carol appears even though she has not placed any orders (the order details are shown as NULL).


3. RIGHT JOIN (or RIGHT OUTER JOIN)

Definition:

A RIGHT JOIN returns all rows from the right table (the second table listed in the query) and the matching rows from the left table. If there is no match, the result is NULL on the side of the left table.

Syntax:

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;

Example:

Retrieve all orders along with customer details:

SELECT c.name, o.product, o.amount
FROM customers c
RIGHT JOIN orders o ON c.customer_id = o.customer_id;

Result:

nameproductamount
AliceLaptop1200
BobSmartphone800
AliceTablet500
NULLMonitor300

Explanation:

  • Every order from the orders table appears.

  • The order for customer_id 4 appears with NULL for the customer name because there is no matching customer.


4. FULL OUTER JOIN

Definition:

A FULL OUTER JOIN returns all rows when there is a match in either the left or right table. Rows that do not have a matching row in the other table are filled with NULL values.

Syntax:

SELECT columns
FROM table1
FULL OUTER JOIN table2 ON table1.common_column = table2.common_column;

Example:

Retrieve a complete list of customers and orders, ensuring that all records from both tables are included:

SELECT c.name, o.product, o.amount
FROM customers c
FULL OUTER JOIN orders o ON c.customer_id = o.customer_id;

Result:

nameproductamount
AliceLaptop1200
AliceTablet500
BobSmartphone800
CarolNULLNULL
NULLMonitor300

Explanation:

  • All rows from both tables are returned.

  • Carol appears without order details.

  • The order for customer_id 4 appears without customer details.


When to Use Each Join

  • INNER JOIN: Use when you only want records that have matching values in both tables.

  • LEFT JOIN: Use when you want all records from the left table, regardless of whether there is a match in the right table.

  • RIGHT JOIN: Use when you want all records from the right table, regardless of whether there is a match in the left table.

  • FULL OUTER JOIN: Use when you need a complete view of all records from both tables, with unmatched rows filled with NULL.


Conclusion

Understanding joins is essential for effective data retrieval in relational databases. By mastering INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL OUTER JOIN, you gain the ability to combine data from multiple tables to answer complex questions and generate comprehensive reports. Practice with these join types using sample data, and soon you’ll be able to craft powerful queries that bring your data together in meaningful ways. Happy querying!

0
Subscribe to my newsletter

Read articles from Shivam Dubey directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Shivam Dubey
Shivam Dubey