Joins can be quite
perplexing initially hopefully this simple example will help.
Joins are used to
combine data from multiple tables (usually two tables)
There are three types of
joins,
1. INNER
2. OUTER - FULL, LEFT,
RIGHT
3. CROSS
For all examples I'll be
using the below given tables and use the Name field as the condition.
Table1
Id1
|
Name1
|
1
|
Padmika
|
2
|
Dissanayake
|
3
|
Sukitha
|
4
|
Pahan
|
Table2
Id2
|
Name2
|
1
|
Fernando
|
2
|
Malaka
|
3
|
Padmika
|
4
|
Sukitha
|
1. INNER JOIN
Returns only the set of records
that match the Name field in both Table 1 and Table2
SELECT * FROM Table1
INNER JOIN Table2
ON Table1.Name1 =
Table2.Name2
Result,
Id1
|
Name1
|
Id2
|
Name2
|
1
|
Padmika
|
3
|
Padmika
|
3
|
Sukitha
|
4
|
Sukitha
|
* This gets executed in
the following manner, first get the first record from Table 1 get its name
field compare it to Table 2 first record name field if it’s a match return it,
now compare with Table2 second record name field… etc.
You will see that only the
records that have a common name is returned
This is similar to the
intersection of two sets (Table1 and Table2) based on Name.
2. OUTER JOIN
2.1 FULL OUTER JOIN
Returns all records in
Table 1 and Table 2, with matching records from both sides where available. If
there is no match, the missing side will contain null.
SELECT * FROM Table1
FULL OUTER JOIN Table2
ON Table1.Name1 = Table2.Name2
Result,
Id1
|
Name1
|
Id2
|
Name2
|
1
|
Padmika
|
3
|
Padmika
|
2
|
Dissanayake
|
null
|
Null
|
3
|
Sukitha
|
4
|
Sukitha
|
4
|
Pahan
|
null
|
Null
|
null
|
Null
|
1
|
Fernando
|
null
|
Null
|
2
|
Malaka
|
This is similar to the
union of two sets (Table1 and Table2) based on Name.
2.2 LEFT OUTER JOIN
Returns the complete set of records from Table
1 (Left table), with the matching records for Name field (where available) in
Table 2. If there is no match, the right side will contain null.
SELECT * FROM Table1
LEFT OUTER JOIN Table2
ON Table1.Name1 = Table2.Name2
Results,
Id1
|
Name1
|
Id2
|
Name2
|
1
|
Padmika
|
3
|
Padmika
|
2
|
Dissanayake
|
null
|
null
|
3
|
Sukitha
|
4
|
Sukitha
|
4
|
Pahan
|
null
|
null
|
Special case of the
above result would be to select records that do not have any matching records
from the right table (Table2)
To do this just add a ‘WHERE
Table2.Id2 IS NULL’ clause to the above query.
Ex: You have a Customer
table and an Order table (Has a CustomerID column) and want to find out which
customers have not placed any orders
2.3 RIGHT OUTER JOIN
Similar to the above but
all the right table (Table2) records will return rather than the left table
ones.
SELECT * FROM Table1
RIGHT OUTER JOIN Table2
ON Table1.Name1 = Table2.Name2
Results,
Id1
|
Name1
|
Id2
|
Name2
|
null
|
null
|
1
|
Fernando
|
null
|
null
|
2
|
Malaka
|
1
|
Padmika
|
3
|
Padmika
|
3
|
Sukitha
|
4
|
Sukitha
|
Note : When inspected
carefully you will see that in this example,
OUTER JOIN result = LEFT
JOIN result + RIGHT JOIN result – INNER JOIN result
0 comments:
Post a Comment