Sunteți pe pagina 1din 23

Copyright 2007, Oracle. All rights reserved.

Oracle Join Syntax


Copyright 2007, Oracle. All rights reserved. C - 2
Objectives
After completing this appendix, you should be able to do the
following:
Write SELECT statements to access data from more than
one table using equijoins and nonequijoins
Join a table to itself by using a self-join
View data that generally does not meet a join condition by
using outer joins
Generate a Cartesian product of all rows from two or more
tables
Copyright 2007, Oracle. All rights reserved. C - 3
Obtaining Data from Multiple Tables
EMPLOYEES DEPARTMENTS


Copyright 2007, Oracle. All rights reserved. C - 4
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
To avoid a Cartesian product, always include a valid join
condition in a WHERE clause.
Copyright 2007, Oracle. All rights reserved. C - 5
Generating a Cartesian Product
Cartesian product:
20 x 8 = 160 rows
EMPLOYEES (20 rows) DEPARTMENTS (8 rows)


Copyright 2007, Oracle. All rights reserved. C - 6
Types of Oracle-Proprietary Joins
Equijoin
Nonequijoin
Outer join
Self-join
Copyright 2007, Oracle. All rights reserved. C - 7
Joining Tables Using Oracle Syntax
Use a join to query data from more than one table:




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.
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
Copyright 2007, Oracle. All rights reserved. C - 8
Qualifying Ambiguous
Column Names
Use table prefixes to qualify column names that are in
multiple tables.
Use table prefixes to improve performance.
Instead of full table name prefixes, use table aliases.
Table aliases give a table a shorter name.
Keeps SQL code smaller, uses less memory
Use column aliases to distinguish columns that have
identical names, but reside in different tables.
Copyright 2007, Oracle. All rights reserved. C - 9
Equijoins
EMPLOYEES DEPARTMENTS
Foreign key
Primary key

Copyright 2007, Oracle. All rights reserved. C - 10
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;
Retrieving Records with Equijoins

Copyright 2007, Oracle. All rights reserved. C - 11
SELECT d.department_id, d.department_name,
d.location_id, l.city
FROM departments d, locations l
WHERE d.location_id = l.location_id;
Retrieving Records with Equijoins: Example
Copyright 2007, Oracle. All rights reserved. C - 12
Additional Search Conditions
Using the AND Operator
SELECT d.department_id, d.department_name, l.city
FROM departments d, locations l
WHERE d.location_id = l.location_id
AND d.department_id IN (20, 50);
Copyright 2007, Oracle. All rights reserved. C - 13
Joining More than Two Tables
To join n tables together, you need a minimum of n1
join conditions. For example, to join three tables, a
minimum of two joins is required.
EMPLOYEES LOCATIONS DEPARTMENTS

Copyright 2007, Oracle. All rights reserved. C - 14
Nonequijoins
EMPLOYEES JOB_GRADES

JOB_GRADES table defines LOWEST_SAL
and HIGHEST_SAL range of values for
each GRADE_LEVEL. Hence, the
GRADE_LEVEL column can be used to
assign grades to each employee.
Copyright 2007, Oracle. All rights reserved. C - 15
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;
Retrieving Records
with Nonequijoins

Copyright 2007, Oracle. All rights reserved. C - 16
Returning Records with No Direct Match
with Outer Joins
EMPLOYEES DEPARTMENTS
There are no employees in
department 190.

Copyright 2007, Oracle. All rights reserved. C - 17
Outer Joins: Syntax
You use an outer join to see rows that do not meet the join
condition.
The outer join operator is the plus sign (+).
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column(+);
Copyright 2007, Oracle. All rights reserved. C - 18
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id ;
Using Outer Joins

Copyright 2007, Oracle. All rights reserved. C - 19
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+) ;
Outer Join: Another Example

Copyright 2007, Oracle. All rights reserved. C - 20
Joining a Table to Itself
MANAGER_ID in the WORKER table is equal to
EMPLOYEE_ID in the MANAGER table.
EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

Copyright 2007, Oracle. All rights reserved. C - 21


Self-Join: Example
SELECT worker.last_name || ' works for '
|| manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;

Copyright 2007, Oracle. All rights reserved. C - 22
Summary
In this appendix, you should have learned how to use joins to
display data from multiple tables by using Oracle-proprietary
syntax.
Copyright 2007, Oracle. All rights reserved. C - 23
Practice C: Overview
This practice covers the following topics:
Joining tables by using an equijoin
Performing outer and self-joins
Adding conditions

S-ar putea să vă placă și