Yogesh Chauhan's Blog

FULL OUTER JOIN in Postgres

in Postgres on October 24, 2020

The FULL OUTER JOIN keyword returns all records when there is a match in left (table1) or right (table2) table records.

If there are no matches at all, FULL OUTER JOIN can potentially return very large result-sets because it’s going to include everything from left and right tables!

The OUTER keyword doesn’t make any difference in the query. FULL OUTER JOIN and FULL JOIN are the same.

Basically, it looks like this.

FULL OUTER JOIN in PostgreSQL

The highlighted part from the image above is our query results when we apply FULL OUTER JOIN between 2 tables. 

Syntax:


SELECT a.column2, b.column2
FROM table a
FULL OUTER JOIN table b
ON a.column = b.column;

I am using alias as well in the syntax. You can use name of the table instead of alias. Alias makes it better to write the query. Learn more about alias in this post:

Column And Table Alias In Postgres

FULL OUTER JOIN Query Example 2 tables

I am using the database for all examples. It is available on my Github public repo


SELECT c.contact_name, o.order_date 
FROM customers c 
FULL OUTER JOIN orders o ON c.customer_id = o.customer_id

//Output
contact_name.       order_date
....
....
....
"Guillermo Fernández"    "1998-05-05"
"Jytte Petersen"    "1998-05-06"
"Michael Holz"    "1998-05-06"
"Laurence Lebihan"    "1998-05-06"
"Paula Wilson"    "1998-05-06"
"Marie Bertrand"    null
"Diego Roel"        null
...
...
832 rows

As we can see there were no matches from the right table, so the query result included the data from left table with null. In this case the FULL OUTER join behaves like LEFT join.

What will happen if we apply LEFT join to 3 tables?

INNER JOIN Query Example 3 tables


SELECT c.contact_name, o.order_date, od.product_id
FROM customers c 
FULL OUTER JOIN orders o ON c.customer_id = o.customer_id
FULL OUTER JOIN order_details od ON od.order_id = o.order_id

//Output
contact_name.    order_date.   count
...
...
...
"Paula Wilson"    "1998-05-06"    73
"Paula Wilson"    "1998-05-06"    75
"Paula Wilson"    "1998-05-06"    77
"Marie Bertrand"        null    null
"Diego Roel"            null    null
...
...
2157 rows

As we can see we are getting all the data possible from LEFT tables and for right tables, if there are not any match, it simply returns null. If we want to filter this data more, we can add an aggregate function and add GROUP BY clause.

As we saw in the previous query, in this query the FULL OUTER join behaves like LEFT join as well.


Most Read

#1 How to check if radio button is checked or not using JavaScript? #2 Solution to “TypeError: ‘x’ is not iterable” in Angular 9 #3 How to add Read More Read Less Button using JavaScript? #4 How to uninstall Cocoapods from the Mac OS? #5 PHP Login System using PDO Part 1: Create User Registration Page #6 How to Use SQL MAX() Function with Dates?

Recently Posted

#Aug 15 Is PHP still good for back-end programming? #Aug 10 How to create a multisite network in WordPress? #Aug 3 How to create a circle that follows a cursor using JavaScript and CSS? #Aug 3 How to make a curtain slider using jQuery and CSS? #Aug 2 How to progressively load images and add a blurry placeholder? #Aug 1 How to create a placeholder loader (throbber) using CSS?
You might also like these
5 Key Principles Of Good Website UsabilityUI/UXHow to add new elements with swing animation using JavaScript and CSS?CSSHow to change CSS with JavaScript?CSSThe Differences Between HAVING Clause and WHERE Clause in SQLSQL/MySQLImplicit and Explicit Joins in Oracle SQLSQL/MySQLWhat are Stored Procedures for SQL Server?SQL/MySQL