SQL: Joins
An SQL join is used to combine rows from multiple
tables. An SQL join is performed whenever two or more tables are listed in the
SQL FROM clause of an SQL statement.
There are different kinds of SQL joins. Let's take a look
at a few examples.
SQL Inner
Join (simple join)
Chances are, you've already written an SQL statement that
uses an SQL inner join. It is the most common type of SQL join. SQL inner joins
return all rows from multiple tables where the join condition is met.
For example,
SELECT
suppliers.supplier_id, suppliers.supplier_name, orders.order_date
FROM suppliers, orders
WHERE suppliers.supplier_id = orders.supplier_id;
FROM suppliers, orders
WHERE suppliers.supplier_id = orders.supplier_id;
This SQL inner join example would return all rows from
the suppliers and orders tables where there is a matching supplier_id value in
both the suppliers and orders tables.
Let's look at
some data to explain how SQL inner joins work:
We have a table called suppliers with two fields
(supplier_id and supplier_ name). It contains the following data:
Suppliers Table
supplier_id
|
supplier_name
|
10000
|
IBM
|
10001
|
Hewlett
Packard
|
10002
|
Microsoft
|
10003
|
NVIDIA
|
We have another table called orders with three
fields (order_id, supplier_id, and order_date). It contains the following data:
Orders Table
Orders Table
order_id
|
supplier_id
|
order_date
|
500125
|
10000
|
2003/05/12
|
500126
|
10001
|
2003/05/13
|
If we run the SQL
statement (that contains an inner join) below:
SELECT
suppliers.supplier_id, suppliers.supplier_name, orders.order_date
FROM suppliers, orders
WHERE suppliers.supplier_id = orders.supplier_id;
FROM suppliers, orders
WHERE suppliers.supplier_id = orders.supplier_id;
Our result set would look
like this:
supplier_id
|
name
|
order_date
|
10000
|
IBM
|
2003/05/12
|
10001
|
Hewlett
Packard
|
2003/05/13
|
The rows for Microsoft and NVIDIA from the supplier table
would be omitted, since the supplier_id's 10002 and 10003 do not exist in both
tables.
Outer Join
Another type of join is called an SQL outer join. This
type of join returns all rows from one table and only those rows from a
secondary table where the joined fields are equal (join condition is met).
For example,
select
suppliers.supplier_id, suppliers.supplier_name, orders.order_date
From suppliers, orders
Where suppliers.supplier_id = orders.supplier_id(+);
From suppliers, orders
Where suppliers.supplier_id = orders.supplier_id(+);
This SQL outer join example would return all rows from
the suppliers table and only those rows from the orders table where the joined
fields are equal.
The (+) after the
orders.supplier_id field indicates that, if a supplier_id value in the
suppliers table does not exist in the orders table, all fields in the orders
table will display as <null> in the result set.
The above SQL outer join statement could also be written
as follows:
select
suppliers.supplier_id, suppliers.supplier_name, orders.order_date
From suppliers, orders
Where orders.supplier_id(+) = suppliers.supplier_id;
From suppliers, orders
Where orders.supplier_id(+) = suppliers.supplier_id;
Let's
look at some data to explain how SQL outer joins work:
We have a table called suppliers with two fields
(supplier_id and name). It contains the following data:
supplier_id
|
supplier_name
|
10000
|
IBM
|
10001
|
Hewlett
Packard
|
10002
|
Microsoft
|
10003
|
NVIDIA
|
We have a second table called orders with three fields
(order_id, supplier_id, and order_date). It contains the following data:
order_id
|
supplier_id
|
order_date
|
500125
|
10000
|
2003/05/12
|
500126
|
10001
|
2003/05/13
|
If we run the SQL statement (that contains an outer join)
below:
select
suppliers.supplier_id, suppliers.supplier_name, orders.order_date
from suppliers, orders
where suppliers.supplier_id = orders.supplier_id(+);
from suppliers, orders
where suppliers.supplier_id = orders.supplier_id(+);
Our result set would look like this:
supplier_id
|
supplier_name
|
order_date
|
10000
|
IBM
|
2003/05/12
|
10001
|
Hewlett
Packard
|
2003/05/13
|
10002
|
Microsoft
|
<null>
|
10003
|
NVIDIA
|
<null>
|
The rows for Microsoft and NVIDIA would be included
because an SQL outer join was used. However, you will notice that the
order_date field for those records contains a <null> value.
There are two types of Outer joins: 1) Left Outer Join 2)
Right Outer Join
Above is an example of Right Outer join:
Right Outer Join will select all rows from right table in
the joining condition, no matter if these rows from right table have matching
records in the left table. Left table is the one that is straight after SQL
from Clause. Another term for Right Outer Join is right join.
Left Outer Join will select all
rows from left table in the joining condition, no matter if these rows from
left table have matching records in the right table. Left table is the one that
is straight after SQL from Clause.
No comments:
Post a Comment