LEFT JOIN using SQL (examples included)

You can use a LEFT JOIN to get all the records from the left table, and the records from the right table where there is a match (if there is no match, you’ll get NULL under the selected fields from the right table):

SELECT 
tb1.*,
tb2.*
FROM left_table_name tb1
LEFT JOIN right_table_name tb2 ON tb1.id = tb2.id

Let’s see how to apply a left join by reviewing few examples.

Applying Left Join Between Two Tables using SQL

In the following example, you’ll see how to apply a left join between:

  • The left table called products; and
  • The right table called prices

You can create the ‘products‘ table using the following query:

CREATE TABLE products (
	product_id int primary key,
	product_name nvarchar(50)
)

And then insert 5 records into the table:

INSERT INTO products (product_id, product_name)

VALUES

(1, 'Laptop'),
(2, 'Tablet'),
(3, 'Monitor'),
(4, 'Printer'),
(5, 'Keyboard')

You can then create the ‘prices‘ table using the following syntax:

CREATE TABLE prices (
	product_id int primary key,
	product_price int
)

Then, insert 5 records into the table:

INSERT INTO prices (product_id, product_price)

VALUES

(1, 1200),
(2, 300),
(3, 500),
(4, 150),
(5, 80)

Finally, you can apply a LEFT JOIN using the query below. Note that the product_id field (which exists in both tables) will be used to link the tables together:

SELECT 
tb_1.*,
tb_2.*
FROM products tb_1
LEFT JOIN prices tb_2 ON tb_1.product_id = tb_2.product_id

In green, you’ll get all the records and fields from the products table (the “left” table), and in yellow you’ll get all the records and fields from the prices table (the “right” table):

product_id product_name product_id product_price
1 Laptop 1 1200
2 Tablet 2 300
3 Monitor 3 500
4 Printer 4 150
5 Keyboard 5 80

Selecting subset of fields

At times, you may need to select a subset of fields from the joined tables.
For example, let’s select:

  • The product_id and product_name fields from the ‘products’ table; and
  • The product_price field from the ‘prices’ table

Here is the query:

SELECT 
tb_1.product_id,
tb_1.product_name,
tb_2.product_price
FROM products tb_1
LEFT JOIN prices tb_2 ON tb_1.product_id = tb_2.product_id

You’ll now see only the selected fields from the tables:

product_id product_name product_price
1 Laptop 1200
2 Tablet 300
3 Monitor 500
4 Printer 150
5 Keyboard 80

Applying Left Join Across Multiple Tables using SQL

Let’s now create a third table called ‘brands‘:

CREATE TABLE brands (
	product_id int primary key,
	product_brand nvarchar(50)
)

And then insert 5 records:

INSERT INTO brands (product_id, product_brand)

VALUES

(1, 'DD'),
(2, 'HH'),
(3, 'MM'),
(4, 'PP'),
(5, 'RR')

Suppose that you want to perform a left join across multiple tables (for our examples, the 3 tables are: products, prices and brands).

In that case, you can run the following query:

SELECT 
tb_1.product_id,
tb_1.product_name,
tb_2.product_price,
tb_3.product_brand
FROM products tb_1
LEFT JOIN prices tb_2 ON tb_1.product_id = tb_2.product_id
LEFT JOIN brands tb_3 ON tb_1.product_id = tb_3.product_id

As you can see, the first and second fields were selected from the products table (in green), the third field was selected from the prices table (in yellow), while the fourth field was selected from the brands table (in orange):

product_id product_name product_price product_brand
1 Laptop 1200 DD
2 Tablet 300 HH
3 Monitor 500 MM
4 Printer 150 PP
5 Keyboard 80 RR

Another way to write the above query:

SELECT 
tb_1.product_id,
tb_1.product_name,
tb_2.product_price,
tb_3.product_brand
FROM

	(
	SELECT 
	* 
	FROM products
	) tb_1

LEFT JOIN

	((
	SELECT 
	* 
	FROM prices
	)) tb_2 ON tb_1.product_id = tb_2.product_id

LEFT JOIN

	(((
	SELECT 
	* 
	FROM brands
	))) tb_3 ON tb_1.product_id = tb_3.product_id

You’ll get the same results as before:

product_id product_name product_price product_brand
1 Laptop 1200 DD
2 Tablet 300 HH
3 Monitor 500 MM
4 Printer 150 PP
5 Keyboard 80 RR

And yet another way to write the above query:

SELECT 
mix.product_id,
mix.product_name,
mix.product_price,
tb_3.product_brand
FROM

	(
	SELECT 
	tb_1.product_id,
	tb_1.product_name,
	tb_2.product_price
	FROM products tb_1
	LEFT JOIN prices tb_2 ON tb_1.product_id = tb_2.product_id
	) mix

LEFT JOIN

	(((
	SELECT 
	* 
	FROM brands
	))) tb_3 ON mix.product_id = tb_3.product_id

You’ll see the same results again:

product_id product_name product_price product_brand
1 Laptop 1200 DD
2 Tablet 300 HH
3 Monitor 500 MM
4 Printer 150 PP
5 Keyboard 80 RR