Week 10

advertisement
Database Programming
Sections 3 – Joins & Hierarchical
Queries
Overview
 Oracle Proprietary
Joins (8i and
prior):





 SQL: 1999
Compliant Joins:
Cartesian Product
Equijoin
Non-equijoin
Outer join
Self join
Marge Hohly
Cross joins
Natural joins
Using clause
Full or two sided
outer joins
 Arbitrary join
conditions for outer
joins




2
Natural Join
 ANSI/ISO SQL: 1999 Join equivalent of
an equijoin
 Join on all common columns
ie. columns with same name and data
type
 SYNTAX:
SELECT field1, field2
FROM table1 NATURAL JOIN table2
WHERE fieldn = value;
Marge Hohly
3
Example Natural Join
 SELECT event_id,
song_id,
cd_number
FROM
d_play_list_items
NATURAL JOIN
d_track_listings
WHERE event_id =
105;
Marge Hohly
4
Example Natural Join
 SELECT first_name, last_name,
event_date, description
FROM d_clients NATURAL JOIN
d_events;
FIRST_NAME LAST_NAME EVENT_DATE DESCRIPTION
Hiram
Peters
14-May-04 Party for 200, red, white, blue motif
Lauren
Vigil
28-Apr-04 Black tie at Four Season hotel
Marge Hohly
5
Example
Use an equijoin between the DJs on
Demand database tables, d_songs
and d_types. Display the type code,
description and title. Limit the rows
returned to those type codes between
70 and 80.
Marge Hohly
6
Cross Join
 ANSI/ISO SQL: 1999 syntax for
achieving of a Cartesian product
 Syntax:
 SELECT *
FROM employees
CROSS JOIN departments;
 Last section Cartesian Product:
SELECT *
FROM employees, departments;
Marge Hohly
7
Join Using
 ANSI/ISO SQL: 1999 join condition used to
join two tables on only one column
 Typically used where NATURAL JOIN cannot
be used because there are other common
columns with same name and different data
types
 No table name or alias can be used on the
referenced column anywhere in the USING
statement
Marge Hohly
8
Join Using
 SYNTAX:
SELECT field1, field2, field3
FROM table1
JOIN table2
USING(column name);
 Example:
SELECT e.employee_id, e.last_name,
d.location_id
FROM employees e
JOIN departments d
USING(department_id);
Marge Hohly
9
Example
 SELECT e.employee_id,
e.last_name,
d.location_id
FROM employees e
JOIN departments d
USING(department_id);
Marge Hohly
10
JOIN ON


ANSI/ISO: 1999 join clause that may be used to specify the
condition or columns used:
Syntax:
SELECT field1, field2, field3
FROM table1 JOIN table2
ON(table1.fieldx=table2.fieldy);
SELECT e.last_name emp, m.last_name mgr
FROM employees e JOIN employees m
ON(e.manager_id = m.employee_id);

SELECT e.last_name as "EMP", w.last_name as "MGR“
FROM employees e JOIN employees w
ON (e.manager_id = w.employee_id)
WHERE e.last_name like 'H%';
Where clause can limit results.
Marge Hohly
11
Example of JOIN ON
 SELECT e.last_name,
e.department_id,
d.department_name
FROM employees e
JOIN departments d
ON (e.department_id
= d.department_id);
Marge Hohly
12
Summary/Comparison
Marge Hohly
13
Marge Hohly
14
Examples
2. Join DJs on Demand d_play_list_items,
d_track_listings, and d_cds tables with the JOIN
USING syntax. Include the song ID, CD number, title,
and comments in the output.
3. Display the city, department name, location ID, and
department ID for departments 10, 20, and 30 for the
city of Seattle.
6. Display job title, employee first name, last name, and
email for all employees that are stock clerks.
9. (Use Join On)
Query and display manager ID, department ID,
department name, first name, and last name for all
employees in departments 80, 90, 110, and 190.
Marge Hohly
15
Three-way Joins with the ON clause
 A three-way join is the join of three tables
 Syntax:
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);
Marge Hohly
16
Example
 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);
Marge Hohly
17
Revised example
 SELECT
e.employee_id, l.city,
d.department_name
FROM employees e,
departments d,
locations l
WHERE
e.department_id =
d.department_id
AND d.location_id =
l.location_id;
Marge Hohly
18
INNER JOINS
 An inner join returns only those rows
that match the join condition
SELECT e.last_name, e.department_id,
d.department_name
FROM employees e
JOIN departments d
ON (e.department_id = d.department_id);
Marge Hohly
19
OUTER JOIN
 Outer joins return those rows that
match the join condition and those
that do not
 There are three ANSI/ISO SQL: 1999
outer joins:
 LEFT OUTER JOIN
 RIGHT OUTER JOIN
 FULL OUTER JOIN
Marge Hohly
20
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);
 SQL 99 equivalent:
SELECT e.last_name, e.department_id,
d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+);
 This statement will return those employees who do not
have a department_id
Marge Hohly
21
RIGHT OUTER JOIN

SELECT field1, field2 ....
FROM table1 a
RIGHT OUTER JOIN table2 b
ON (a.field=b.field);
or USING(field name);

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);

This statement will return those departments who do
not have any employees in them
Marge Hohly
22
FULL OUTER JOIN
 The FULL OUTER JOIN returns both matched and all
unmatched rows
 Syntax:
SELECT field1, field2, field3
FROM table1 a
FULL OUTER JOIN table2 b
ON a.field=b.field;
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);
 There is no direct comparable Oracle specific join
Marge Hohly
23
Example
 Construct a join to display a list of Global
Fast Foods customers whether or not they
have placed an order as yet and all the
customers who have placed orders.
 SELECT c.first_name, c.last_name,
o.order_number,o.order_date,
o.order_total
FROM f_customers c
LEFT OUTER JOIN f_orders o
ON (c.id = o.cust_id);
Marge Hohly
24
Types of Joins
 Oracle Proprietary
Joins (8i and
prior):





 SQL: 1999
Compliant Joins:
Cartesian Product
Equijoin
Non-equijoin
Outer join
Self join
Marge Hohly
Cross joins
Natural joins
Using clause
Full or two sided
outer joins
 Arbitrary join
conditions for outer
joins
 On clause




25
Self-Join
Marge Hohly
26
Self-Join
Employee_id
last_name
100
King
101
Kochar
102
manager_id
employee_id
last_name
100
King
100
101
Kochar
De Haan
100
102
De Haan
103
Hunold
102
103
Hunold
104
Ernst
103
104
Ernst
107
Lorentz
103
107
Lorentz
124
Mourgos
100
124
Mourgos
EMPLOYEES (worker) table
EMPLOYEES (manager) table
Manager_id in worker table = employee_id in Manager table
Marge Hohly
27
Example
 SELECT chair.last_name || ‘ is the section chair of ‘ ||
player.last_name
FROM band_members chair, band_members player
WHERE player.chair_id = chair.member_id;
Marge Hohly
28
Hierarchical Queries
 Similar to the self-join
 Similar to an Organization Chart
 Shows company, department , family
structure etc.
Marge Hohly
29
Using Hierarchical Queries
 Retrieve data based on natural
hierarchical relationships between
rows
 If data within a single table called
tree walking
Marge Hohly
30
Hierarchical queries
 EMPLOYEES as an organization chart
King

Kochar
De Haan
Hunold
Mourgos
Rajs
Ernst
Marge Hohly
31
Hierarchical queries keywords
 START WITH
 CONNECT BY PRIOR
 LEVEL
Marge Hohly
32
Hierarchical queries keyword example
Marge Hohly
33
Another example
 SELECT last_name || ' reports to ' ||
PRIOR last_name "Walk Top Down“
FROM employees
START WITH last_name = 'King‘
CONNECT BY PRIOR employee_id =
manager_id;
Marge Hohly
34
Results of query
Walk Top Down
King reports to
Kochhar reports to King
Whalen reports to Kochhar
Higgins reports to Kochhar
Gietz reports to Higgins
De Haan reports to King
Hunold reports to De Haan
Ernst reports to Hunold
Lorentz reports to Hunold
Marge Hohly
35
Marge Hohly
36
Hierarchical query report
 SELECT LPAD(last_name,
LENGTH(last_name)+(LEVEL*2)2,'_') AS ORG_CHART
FROM employees
START WITH last_name = 'King‘
CONNECT BY PRIOR employee_id =
manager_id;
Marge Hohly
37
Hierarchical queries pruning
 Delete branches of tree with WHERE
clause or CONNECT BY PRIOR clause
 WHERE - only row named is excluded
 CONNECT BY PRIOR – entire branch
is excluded
 View example on next slide
Marge Hohly
38
Pruning Example
 SELECT last_name
FROM employees
WHERE last_name <> 'Higgins‘
START WITH last_name = 'Kochhar‘
CONNECT BY PRIOR employee_id =
manager_id;
 Only the branch under King is
returned
Marge Hohly
39
Pruning Example
 SELECT last_name
FROM employees
START WITH last_name = 'Kochhar‘
CONNECT BY PRIOR employee_id =
manager_id
AND last_name <> 'Higgins';
Marge Hohly
40
Download