SQL MDN Docs LEFT JOIN

LEFT JOIN in SQL

The LEFT JOIN clause in SQL, also known as LEFT OUTER JOIN, is used to combine rows from two or more tables. Unlike an INNER JOIN, a LEFT JOIN will return all rows from the left table, and the matched rows from the right table. If there is no match, the result is NULL on the side of the right table.

Here’s a diagram you’ll typically see on the Internet:

LEFT JOIN in SQL

Syntax

The syntax for LEFT JOIN includes specifying the primary table (left table) and the table to be joined (right table), along with the join condition:

🔍 Note that we specified t1 and t2 table aliases to avoid writing full table names in the join condition like table1.common_column.

Here’s an example where we join purchases to all users:

SELECT *
FROM users u
LEFT JOIN purchases p
  ON u.id = p.user_id

In this example, all records from the left table (users) will be present in the result set (hence filled left circle in the diagram). All purchases that satisfy the join condition (i.e. that belong to a user) will also be in the result set. For users without purchases (no correspondent purchases records) the purchases rows will contain NULL values in all columns from the purchases table.

💡 Simply run the example query ☝ and browse the result set.

Joining multiple tables

We can use multiple JOIN clauses within one query, that’s the whole idea behind relational databases – to join related data. Here’s an example where we join users, their pageviews and purchases (for example, to calculate purchase rate later):

SELECT *
FROM users u
LEFT JOIN purchases p
  ON u.id = p.user_id
LEFT JOIN web_analytics.pageviews pv
  ON u.id = pv.user_id

Complex join conditions

For LEFT JOIN, a record from the right table will be joined to the left record only when the join condition (ON ...) is evaluated to TRUE.

In the previous examples, we’ve used a very simple join condition like ON u.id = pv.user_id. As you can see, it could be TRUE (when id-s match) or FALSE.

We can use more complex conditions and enhance them with other logical operators like AND, OR, etc.

Here’s an example where we join non-refunded purchases to all users:

SELECT *
FROM users u
LEFT JOIN purchases p
  ON u.id = p.user_id
    AND p.refunded = FALSE

Understanding and using LEFT JOIN effectively allows for more versatile and comprehensive data analysis. The LEFT JOIN comes very handy in scenarios where maintaining a complete list from one table is crucial (calculating per-user metrics, for example).

The LEFT JOIN clause is invaluable for detailed reporting and ensuring no data is overlooked simply because it does not have a corresponding match in another table.

INNER JOIN and LEFT JOIN are a must-have for anyone who works with relational data.

Database compatibility

MySQL
PostgreSQL
SQLite
Redshift
Big Query
Snowflake
LEFT JOIN
LEFT JOIN
MySQL
PostgreSQL
SQLite
Redshift
Big Query
Snowflake

Find a problem on this page?

Want to get more involved? SQL MDN Docs is an open-source project, check out contribution guidelines.
This page was last modified on April 07, 2024.