Introduction to Joins
- A join combines rows from two or more tables
- Multiple tables are listed in the FROM clause
- Types of joins in MySQL:
- CROSS JOIN (Cartesian Product)
- EQUI-JOIN
- NATURAL JOIN
- LEFT JOIN
- RIGHT JOIN
Cross Join (Cartesian Product)
- Returns all possible combinations of rows from both tables
- Each row from first table is joined with all rows of second table
- Formula: Total rows = rows in first table × rows in second table
Example:
SELECT * FROM Shades, Color;
-- or
SELECT * FROM Shades CROSS JOIN Color;
Output Table Example:
shade_id | shade_name | color_id | color_name |
---|
1 | Light | 1 | Red |
1 | Light | 2 | Green |
1 | Light | 3 | Blue |
2 | Dark | 1 | Red |
… | … | … | … |
Equi-Join
- Columns are compared for equality
- Common column appears twice in output
- Uses WHERE clause with equality condition
Example:
SELECT * FROM emp, dept
WHERE emp.deptno = dept.deptno;
Using Table Aliases:
SELECT e.empno, e.name, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
Output Table Example:
empno | name | deptno | dname | deptno | location |
---|
101 | Alam | 10 | Sales | 10 | Delhi |
102 | Ravi | 20 | HR | 20 | Mumbai |
Natural Join
- Similar to Equi-Join but eliminates duplicate columns
- Only one copy of common column appears
Example:
SELECT empno, name, dname, location
FROM emp NATURAL JOIN dept;
Handling Ambiguous Columns:
SELECT emp.empno, emp.name, dept.dname
FROM emp NATURAL JOIN dept;
Additional Conditions in Joins
SELECT e.empno, e.name, d.dname
FROM emp e JOIN dept d ON e.deptno = d.deptno
WHERE e.salary > 50000;
LEFT JOIN
- Returns all rows from left table (first table)
- Returns NULL for non-matching rows from right table
Example:
SELECT e.empno, e.name, p.pname
FROM emp e LEFT JOIN project p ON e.empno = p.empno;
Output Table Example:
empno | name | pname |
---|
101 | Alam | Website |
102 | Ravi | Database |
103 | Priya | NULL |
RIGHT JOIN
- Returns all rows from right table (second table)
- Returns NULL for non-matching rows from left table
Example:
SELECT p.pid, p.pname, e.name
FROM emp e RIGHT JOIN project p ON e.empno = p.empno;
Output Table Example:
pid | pname | name |
---|
P1 | Website | Alam |
P2 | Database | Ravi |
P3 | App | NULL |
Key Differences Summary
Join Type | Description | Duplicate Columns | NULL Handling |
---|
CROSS JOIN | All combinations of rows | No | N/A |
EQUI-JOIN | Matches based on equality, shows all columns | Yes | Only matching rows |
NATURAL JOIN | Matches based on equality, hides duplicate columns | No | Only matching rows |
LEFT JOIN | All rows from left table + matching from right | Depends | NULL for non-matching right rows |
RIGHT JOIN | All rows from right table + matching from left | Depends | NULL for non-matching left rows |