Description
SQL INNER JOIN can be used to join two tables, which returns the rows having a match between the joined tables.
- It is the most commonly used type of join.
- It can be implemented on SELECT, UPDATE, and DELETE statements.
- The table joins can be created using the WHERE clause by comparing the related columns between the joined tables.
Syntax
Here is the basic syntax of a SELECT statement with an INNER JOIN.
- The
table1_nameandtable2_namerepresents the first and second table names. - The
column_listrepresents the column names from either or both the tables. - The
column1_nameandcolumn2_nameare the columns from the first and second tables, which are used for creating an INNER JOIN.
SELECT column_list
FROM table1_name
INNER JOIN table2_name ON table1.column1_name = table2.column2_name;
Table Data
Consider the below data in the orders, customers, and shippers tables, with the below observations.
- Tables orders and customers are relationally connected via
customer_idcolumn. - Tables orders and shippers are relationally connected via
shipper_idcolumn.
Orders Table Data
| order_id | order_date | order_value | customer_id | shipper_id |
| 10250 | 2014-07-05 | 1807.5 | 3 | 1 |
| 10251 | 2014-07-15 | 1159 | 2 | 2 |
| 10252 | 2014-07-18 | 2822 | 1 | 3 |
| 10253 | 2014-07-19 | 2575.3 | 3 | 2 |
| 10254 | 2014-07-24 | 1256.25 | 1 | 3 |
| 10255 | 2014-07-31 | 9247.5 | 5 | 1 |
Customers Table Data
| customer_id | customer_name | address | city | country | postal_code |
| 1 | Maria Anders | Obere Str. 57 | Berlin | Germany | 12209 |
| 2 | Fran Wilson | C/ Araquil, 67 | Madrid | Spain | 28023 |
| 3 | Dominique Perrier | 25, rue Lauriston | Paris | France | 75016 |
Shipper Table Data
| shipper_id | shipper_name | phone |
| 1 | Speedy Express | (503) 555-9831 |
| 2 | United Package | (503) 555-3199 |
| 3 | Federal Shipping | (503) 555-9931 |
Inner Join
The below SQL statement fetches data from both the tables as mentioned below.
- Returns only rows that satisfy the INNER JOIN condition.
- Returns data for customer name from the customers table.
- Returns data for all other columns from the orders table.
SELECT order_id, order_date, order_value, customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
After successful execution, the output contains data from both the joined tables as shown below.
| order_id | order_date | order_value | customer_name |
| 10250 | 2014-07-05 | 1807.5 | Dominique Perrier |
| 10251 | 2014-07-15 | 1159 | Fran Wilson |
| 10252 | 2014-07-18 | 2822 | Maria Anders |
| 10253 | 2014-07-19 | 2575.3 | Dominique Perrier |
| 10254 | 2014-07-24 | 1256.25 | Maria Anders |
Inner Join All Columns
The below SQL statement fetches data from both the tables as mentioned below.
- Returns only rows that satisfy the INNER JOIN condition.
- The
SELECT *returns all the columns from both the tables, without repeating the joined columns.
SELECT *
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
After successful execution, the output contains data from both the joined tables as shown below.
| order_id | order_date | order_value | customer_id | supplier_id | customer_name | address | city | country | postal_code |
| 10250 | 2014-07-05 | 1807.5 | 3 | 1 | Dominique Perrier | 25, rue Lauriston | Paris | France | 75016 |
| 10251 | 2014-07-15 | 1159 | 2 | 2 | Fran Wilson | C/ Araquil, 67 | Madrid | Spain | 28023 |
| 10252 | 2014-07-18 | 2822 | 1 | 3 | Maria Anders | Obere Str. 57 | Berlin | Germany | 12209 |
| 10253 | 2014-07-19 | 2575.3 | 3 | 2 | Dominique Perrier | 25, rue Lauriston | Paris | France | 75016 |
| 10254 | 2014-07-24 | 1256.25 | 1 | 3 | Maria Anders | Obere Str. 57 | Berlin | Germany | 12209 |
Inner Join More Tables
The below SQL statement fetches data from three tables using multiple INNER JOIN keywords as shown below.
- Returns only rows that satisfy all the INNER JOIN conditions in case of more than two tables.
- Returns data for customer name from the customers table.
- Returns data for shipper name from the shippers table.
- Returns data for all other columns from the orders table.
SELECT order_id, order_date, order_value, customer_name, shipper_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN shippers ON orders.shipper_id = shippers.shipper_id;
After successful execution, the output contains data from all the joined tables as shown below.
| order_id | order_date | order_value | customer_name | supplier_name |
| 10250 | 2014-07-05 | 1807.5 | Dominique Perrier | Speedy Express |
| 10251 | 2014-07-15 | 1159 | Fran Wilson | United Package |
| 10252 | 2014-07-18 | 2822 | Maria Anders | Federal Shipping |
| 10253 | 2014-07-19 | 2575.3 | Dominique Perrier | United Package |
| 10254 | 2014-07-24 | 1256.25 | Maria Anders | Federal Shipping |
Overall
We now know how to create update records on a table using the UPDATE statement.