SQL - INNER JOIN Query
The INNER JOIN query is used to retrieve the matching records from two or more tables based on the specified condition.
Syntax:
SELECT table1.column_name(s), table2.column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
For the demo purpose, we will use the following Employee
and Department
tables in all examples.
EmpId | FirstName | LastName | Salary | DeptId | |
---|---|---|---|---|---|
1 | 'John' | 'King' | '[email protected]' | 33000 | 1 |
2 | 'James' | 'Bond' | |||
3 | 'Neena' | 'Kochhar' | '[email protected]' | 17000 | 2 |
4 | 'Lex' | 'De Haan' | '[email protected]' | 15000 | 1 |
5 | 'Amit' | 'Patel' | 18000 | 3 | |
6 | 'Abdul' | 'Kalam' | '[email protected]' | 25000 | 2 |
DeptId | Name |
---|---|
1 | 'Finance' |
2 | 'HR' |
Consider the following inner join query.
SELECT Employee.EmpId, Employee.FirstName, Employee.LastName, Department.Name
FROM Employee
INNER JOIN Department
ON Employee.DeptId = Department.DeptId;
The above inner join query joins the Employee
table and Department
table and retrieves records from both the tables where Employee.DeptId = Department.DeptId
.
It only fetches records from both the tables where DeptId
in the Employee
table matches with the DeptId
of the Department
table.
If the DeptId
is NULL or not matching, then it won't retrieve those records. The following is the result of the above query.
EmpId | FirstName | LastName | Name |
---|---|---|---|
1 | 'John' | 'King' | 'Finance' |
3 | 'Neena' | 'Kochhar' | 'HR' |
4 | 'Lex' | 'De Haan' | 'Finance' |
6 | 'Abdul' | 'Kalam' | 'HR' |
Notice that it only displayed the records whose DeptId
matches, not whose DeptId
is null or not matching.
It does not matter which table you take first in the query. The following query will display the same result as above.
SELECT Employee.EmpId, Employee.FirstName, Employee.LastName, Department.Name
FROM Department
INNER JOIN Employee
ON Department.DeptId = Employee.DeptId;
It is not mandatory to use the INNER JOIN phrase. You can use the WHERE clause to achieve the same result, as shown below.
SELECT emp.EmpId, emp.FirstName, emp.LastName, dept.Name
FROM Department dept, Employee emp
WHERE dept.DeptId = emp.DeptId;
You can take alias as short cuts of table names, as shown below.
SELECT emp.EmpId, emp.FirstName, emp.LastName, dept.Name
FROM Department dept
INNER JOIN Employee emp
ON dept.DeptId = emp.DeptId;
Repeat the INNER JOIN.. ON
statement to include one more table in the query. For example, the following inner join query joins the three tables.
SELECT Employee.EmpId, Employee.FirstName, Employee.LastName, Consultant.FirstName, Department.Name
FROM Employee
INNER JOIN Department
ON Employee.DeptId = Department.DeptId
INNER JOIN Consultant
ON Consultant.DeptId = Department.DeptId;