Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Displaying Data From Multiple Tables

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 37

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 nonequality 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 Tables
EMPLOYEES DEPARTMENTS


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 a Cartesian Product
EMPLOYEES (20 rows) DEPARTMENTS (8 rows)

Cartesian
product:
20x8=160 rows

Types of Joins

Oracle Proprietary SQL: 1999


Joins (8i and prior): Compliant Joins:

Equijoin 
Cross joins

Non-equijoin 
Natural joins

Outer join 
Using clause

Self join 
Full or two sided outer
joins

Arbitrary join conditions
for outer joins
Joining Tables Using Oracle Syntax

Use a join to query data from more than one


table. table1.column,
SELECT
SELECT table1.column, table2.column
table2.column
FROM
FROM table1,
table1, table2
table2
WHERE
WHERE table1.column1
table1.column1 == table2.column2;
table2.column2;


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

… …

Foreign key Primary key


Retrieving Records
with Equijoins
SELECT employees.employee_id, employees.last_name,
employees.department_id, departments.department_id,
departments.location_id
FROM employees, departments
WHERE employees.department_id = departments.department_id;


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
Non-Equijoins
EMPLOYEES JOB_GRADES

Salary in the EMPLOYEES


table must be between
… lowest salary and highest
salary in the JOB_GRADES
table.
Retrieving Records
with Non-Equijoins
SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary
BETWEEN j.lowest_sal AND j.highest_sal;


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
(+).
FROM table1, table2
table2.column
FROM table1, 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

SELECT e.last_name, e.department_id, d.department_name


FROM employees e, departments d
WHERE e.department_id(+) = d.department_id ;


Self Joins
Role
EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

… …

MANAGER_ID in the WORKER table is equal to


EMPLOYEE_ID in the MANAGER table.
Joining a Table to Itself
SELECT worker.last_name || ' works for '
|| manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;


Practice 4, Part One: Overview

This practice covers writing queries to join


tables
together using Oracle syntax.
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.
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
Practice 4, Part Two: Overview

This practice covers the following topics:



Joining tables using an equijoin

Performing outer and self joins

Adding conditions

You might also like