Displaying Data From Multiple Tables
Displaying Data From Multiple Tables
Displaying Data From Multiple Tables
Displaying Data
from Multiple Tables
Objectives
After completing this lesson, you should be
able to
do the following:
Write SELECT statements to access data
from more than one table using equality
and non-equality joins
View data that generally does not meet a
join condition by using outer joins
Join a table to itself by using a self join
Obtaining Data from Multiple
EMPLOYEES
TablesDEPARTMENTS
employee
department
…
Cartesian Products
A Cartesian product is formed when:
A join condition is omitted
A join condition is invalid
All rows in the first table are joined to all
rows in the second table (same domain)
To avoid a Cartesian product, always
include a valid join condition in a WHERE
clause. (since it is costly)
Generating
EMPLOYEES (20 rows)
a Cartesian Product
DEPARTMENTS (8 rows)
Cartesian
product:
20x8=160 rows
…
Types of Joins
Write the join condition in the WHERE
clause.
Prefix the column name with the table
name when the same column name
appears in more than one table.
What is an Equijoin?
EMPLOYEES DEPARTMENTS
… …
…
Additional Search Conditions
Using the AND Operator
EMPLOYEES DEPARTMENTS
… …
Employees.department_id=departments.department_id AND
department_id<70
Qualifying Ambiguous
Column Names
Use table prefixes to qualify column
names that are in multiple tables.
Improve performance by using table
prefixes.
Distinguish columns that have identical
names but reside in different tables by
using column aliases.
Using Table Aliases
Simplify queries by using table aliases.
Improve performance by using table
prefixes.
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e , departments d
WHERE e.department_id = d.department_id;
Joining More than Two Tables
EMPLOYEES DEPARTMENTS LOCATIONS
…
To join n tables together, you need a
minimum of n-1 join conditions. For
example, to join three tables, a
minimum of two joins is required.
Non-Equijoins
EMPLOYEES JOB_GRADES
JOB_GRADES
…
Outer Joins
DEPARTMENTS EMPLOYEES
…
There are no employees in
department 190.
Outer Joins Syntax
You use an outer join to also see rows
that do not meet the join condition.
The Outer join operator is the plus sign
(+).
SELECT
SELECT table1.column,
table1.column, table2.column
table2.column
FROM
FROM table1,
table1, table2
table2
WHERE
WHERE table1.column(+)
table1.column(+) == table2.column;
table2.column;
SELECT
SELECT table1.column,
table1.column, table2.column
table2.column
FROM
FROM table1,
table1, table2
table2
WHERE
WHERE table1.column
table1.column == table2.column(+);
table2.column(+);
Using Outer Joins
…
Self Joins
Role
EMPLOYEES (WORKER) EMPLOYEES (MANAGER)
… …
…
Joining Tables Using SQL: 1999
Syntax
Use a join to query data from more than
one table.
SELECT
SELECT table1.column,
table1.column, table2.column
table2.column
FROM
FROM table1
table1
[CROSS
[CROSS JOIN
JOIN table2]
table2] ||
[NATURAL
[NATURAL JOIN
JOIN table2]
table2] ||
[JOIN
[JOIN table2
table2 USING
USING (column_name)]
(column_name)] ||
[JOIN
[JOIN table2
table2
ON(table1.column_name
ON(table1.column_name == table2.column_name)]
table2.column_name)] ||
[LEFT|RIGHT|FULL
[LEFT|RIGHT|FULL OUTER
OUTER JOIN
JOIN table2
table2
ON
ON (table1.column_name
(table1.column_name == table2.column_name)];
table2.column_name)];
Creating Cross Joins
The CROSS JOIN clause produces the
cross-product of two tables.
This is the same as a Cartesian product
between the two tables.
SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;
…
Creating Natural Joins
The NATURAL JOIN clause is based on
all columns in the two tables that have
the same name.
It selects rows from the two tables that
have equal values in all matched
columns.
If the columns having the same names
have different data types, an error is
returned.
Retrieving Records with Natural
Joins
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations ;
Creating Joins with the USING
Clause
If several columns have the same names but the data
types do not match, the NATURAL JOIN clause can
be modified with the USING clause to specify the
columns that should be used for an equijoin.
Use the USING clause to match only one column
when more than one column matches.
Do not use a table name or alias in the referenced
columns.
The NATURAL JOIN and USING clauses are
mutually exclusive.
Retrieving Records with the
USING Clause
SELECT e.employee_id, e.last_name, d.location_id
FROM employees e JOIN departments d
USING (department_id) ;
…
Creating Joins with the ON Clause
The join condition for the natural join is
basically an equijoin of all columns with
the same name.
To specify arbitrary conditions or specify
columns to join, the ON clause is used.
The join condition is separated from
other search conditions.
The ON clause makes code easy to
understand.
Retrieving Records with the ON
Clause
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
…
Creating Three-Way Joins with the
ON Clause
SELECT employee_id, city, department_name
FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;
…
INNER Versus OUTER Joins
In SQL: 1999, the join of two tables
returning only matched rows is an inner
join.
A join between two tables that returns
the results of the inner join as well as
unmatched rows left (or right) tables is a
left (or right) outer join.
A join between two tables that returns
the results of an inner join as well as the
results of a left and right join is a full
outer join.
LEFT OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
…
RIGHT OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
…
FULL OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
…
Additional Conditions
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149 ;
Summary
In this lesson, you should have learned how to
use
joins to display data from multiple tables in:
Oracle proprietary syntax for versions 8i
and earlier
SQL: 1999 compliant syntax for version 9i