SQL JOINS
A JOIN clause combines rows from two or more tables based on a column filed between them (the foreign key).
The JOIN clause creates a set of rows in a temporary table to combine rows from different tables.
Often a JOIN clause is faster than a subquery. So it is preferred to use the JOIN clause when it is possible.
Demo Table
To understand the JOIN clause, let us see the following "Employee" and "Department" tables.
Table: Employee:+--------+-------------+-----------+-----------+---------+ | emp_no | first_name | last_name | salary | dept_id | +--------+-------------+-----------+-----------+---------+ | 1001 | James | Smith | 6600 | 1 | | 1002 | Maria | Martinez | 9000 | 2 | | 1003 | Andrew | Rodriguez | 9500 | 3 | | 1004 | Robert | Hernandez | 9600 | 2 | | 1005 | Donna | Williams | 7400 | NULL | | 1006 | James | Johnson | 8000 | NULL | | 1007 | Stephanie | Miller | 8500 | 8 | | 1008 | Nelson | Lopez | 7300 | 8 | +--------+-------------+-----------+-----------+---------+
Table : Department:+---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Customer Service | | 2 | Development | | 3 | Finance | | 4 | Human Resources | | 5 | Marketing | | 6 | Production | | 7 | Research | | 8 | Sales | +---------+------------------+
SQL JOIN Example
As you can see in the "Demo Table" section, the "dept_id" column of the "Employee" table is the foreign key to the "Departement" table. These two tables are good candidates to use the JOIN clause to combine data between them.
The following SQL statement containing an INNER JOIN will select all rows with matching values in both tables.
SELECT employee.emp_no, employee.first_name, employee.last_name, departement.dept_name
FROM employee
INNER JOIN departement ON employee.dept_id = departement.dep_id;
After the execution, the output will look as follows:
+--------+-------------+-----------+------------------+ | emp_no | first_name | last_name | dept_name | +--------+-------------+-----------+------------------+ | 1001 | James | Smith | Customer Service | | 1002 | Maria | Martinez | Development | | 1003 | Andrew | Rodriguez | Finance | | 1004 | Robert | Hernandez | Development | | 1007 | Stephanie | Miller | Sales | | 1008 | Nelson | Lopez | Sales | +--------+-------------+-----------+------------------+
Note: To join tables, data of the columns that are used for joining tables should match, and not necessarily the names of the column.
Different Types of SQL JOINs
When joining tables, the type of join used in the query control the records that appear in the result set. There are 4 different types of SQL joins:
INNER JOIN
It is the most common type of SQL join. The INNER JOIN only returns rows that have a match in both joined tables.
LEFT OUTER JOIN
The LEFT OUTER JOIN returns all rows from the left-hand table specified in the ON condition and only the matched rows from the right table.
RIGHT OUTER JOIN
The RIGHT OUTER JOIN returns all rows from the right-hand table specified in the ON condition and only the matched rows from the left table.
FULL OUTER JOIN
The FULL OUTER JOIN returns rows from the left and right table with NULL used where the join condition is not met.
