There are three categories joins fall into, inner, outer and cross. Outer
joins consist of three types, left, right and full.
Lets have a quick look at the various joins.
(On the right we've got two datasets we'll be using in the examples.)
|
Table a
aID
|
title
|
1 |
a1 |
2 |
a2 |
3 |
a3 |
4 |
a4 |
Table b
bID
|
title
|
aID
|
1 |
b1 |
1 |
2 |
b2 |
2 |
3 |
b3 |
NULL |
4 |
b4 |
NULL |
|
Inner Join
Return rows that match in both tables. (Default join)
SELECT * FROM a
INNER JOIN b ON
a.aid = b.aid
aID
|
bID
|
title
|
1 |
1 |
b1 |
2 |
2 |
b2 |
|
|
|
Left Outer Join
Return rows from the table on the left of the expression even if they dont match with the table on the right.
SELECT * FROM a
LEFT OUTER JOIN b ON
a.aid = b.aid
title
|
aID
|
a1 |
1 |
a2 |
2 |
a3 |
3 |
a4 |
4 |
aID
|
bID
|
title
|
1 |
1 |
b1 |
2 |
2 |
b2 |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
|
|
Right Outer Join
Return rows from the table on the right of the expression even if they dont match with the table on the left.
SELECT * FROM a
RIGHT OUTER JOIN b ON
a.aid = b.aid
title
|
aID
|
a1 |
1 |
a2 |
2 |
NULL |
NULL |
NULL |
NULL |
aID
|
bID
|
title
|
1 |
1 |
b1 |
2 |
2 |
b2 |
3 |
3 |
b3 |
4 |
4 |
b4 |
|
|
Full Outer Join
Return rows from both the left and right tables even if they
don't match in either. (left + right join)
SELECT * FROM a
FULL OUTER JOIN b ON
a.aid = b.aid
title
|
aID
|
a1 |
1 |
a2 |
2 |
a3 |
3 |
a4 |
4 |
NULL |
NULL |
NULL |
NULL |
aID
|
bID
|
title
|
1 |
1 |
b1 |
2 |
2 |
b2 |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
3 |
3 |
b3 |
4 |
4 |
b4 |
|
|
Cross Join
Join each row from the left with each row from the right. Known as a "carthesian product"
SELECT * FROM a
CROSS JOIN b
or
SELECT * FROM a, b
title
|
aID
|
a1 |
1 |
a2 |
2 |
a3 |
3 |
a4 |
4 |
a1 |
1 |
a2 |
2 |
a3 |
3 |
a4 |
4 |
a1 |
1 |
a2 |
2 |
a3 |
3 |
a4 |
4 |
a1 |
1 |
a2 |
2 |
a3 |
3 |
a4 |
4 |
aID
|
bID
|
title
|
1 |
1 |
b1 |
1 |
1 |
b1 |
1 |
1 |
b1 |
1 |
1 |
b1 |
2 |
2 |
b2 |
2 |
2 |
b2 |
2 |
2 |
b2 |
2 |
2 |
b2 |
3 |
3 |
b3 |
3 |
3 |
b3 |
3 |
3 |
b3 |
3 |
3 |
b3 |
4 |
4 |
b4 |
4 |
4 |
b4 |
4 |
4 |
b4 |
4 |
4 |
b4 |
|
|