SQL Joins

We’ll use two simple tables as reference:

Table: Employees

EmpIDNameDeptID
1Alice10
2Bob20
3Charlie30
4DavidNULL

Table: Departments

DeptIDDeptName
10HR
20IT
30Finance
40Marketing

1. INNER JOIN

Returns only the matching rows between two tables.

SELECT e.Name, d.DeptName
FROM Employees e
INNER JOIN Departments d
ON e.DeptID = d.DeptID;

Result:

NameDeptName
AliceHR
BobIT
CharlieFinance

(Only employees who have a matching department appear.)


2. LEFT OUTER JOIN

Returns all rows from the left table and matching rows from the right table. Unmatched rows in the right table are shown as NULL.

SELECT e.Name, d.DeptName
FROM Employees e
LEFT JOIN Departments d
ON e.DeptID = d.DeptID;

Result:

NameDeptName
AliceHR
BobIT
CharlieFinance
DavidNULL

3. RIGHT OUTER JOIN

Returns all rows from the right table and matching rows from the left table.

SELECT e.Name, d.DeptName
FROM Employees e
RIGHT JOIN Departments d
ON e.DeptID = d.DeptID;

Result:

NameDeptName
AliceHR
BobIT
CharlieFinance
NULLMarketing

4. FULL OUTER JOIN

Returns all rows from both tables, matching where possible, otherwise NULL.

SELECT e.Name, d.DeptName
FROM Employees e
FULL OUTER JOIN Departments d
ON e.DeptID = d.DeptID;

Result:

NameDeptName
AliceHR
BobIT
CharlieFinance
DavidNULL
NULLMarketing

5. SELF JOIN

A table joined with itself. Useful for hierarchical data (e.g., employees & managers).

Suppose Employees also had a ManagerID:

EmpIDNameDeptIDManagerID
1Alice10NULL
2Bob201
3Charlie302
4DavidNULL2

Query:

SELECT e.Name AS Employee, m.Name AS Manager
FROM Employees e
LEFT JOIN Employees m
ON e.ManagerID = m.EmpID;

Result:

EmployeeManager
AliceNULL
BobAlice
CharlieBob
DavidBob

6. NATURAL JOIN

Automatically joins tables based on columns with the same name (be cautious, can cause errors if column names clash).

SELECT *
FROM Employees
NATURAL JOIN Departments;

(Since both have DeptID, it will join on that.)

Result:

EmpIDNameDeptIDDeptName
1Alice10HR
2Bob20IT
3Charlie30Finance

7. CROSS JOIN

Cartesian product — returns all possible combinations of rows.

SELECT e.Name, d.DeptName
FROM Employees e
CROSS JOIN Departments d;

Result (4 employees × 4 departments = 16 rows):

NameDeptName
AliceHR
AliceIT
AliceFinance
AliceMarketing
BobHR
BobIT

Leave a Reply