Sei sulla pagina 1di 49

Database Development

ORACLE
(SQL Components)
DDL
DML

JL_D.B.

DCL
(Retrieve Data and
Produce Information
from Multiple Tables)
Dr. Chen, Oracle Database System (Oracle)

Chapter 9
Joining Data from Multiple
Tables
(p.284-296; p.312-330)
Jason C. H. Chen, Ph.D.
Professor of MIS
School of Business
Gonzaga University
Spokane, WA 99258 USA
chen@jepson.gonzaga.edu
Dr. Chen, Oracle Database System (Oracle)

Objectives

Identify a Cartesian join


Create an equality join using the WHERE clause
Create an equality join using the JOIN keyword
Create a non-equality join using the WHERE
clause
Create a non-equality join using the JOINON
approach

Dr. Chen, Oracle Database System (Oracle)

Objectives (continued)

Create a self-join using the WHERE clause


Create a self-join using the JOIN keyword
Distinguish an inner join from an outer join
Create an outer join using the WHERE clause
Create an outer join using the OUTER
keyword
Use set operators to combine the results of
multiple queries

Dr. Chen, Oracle Database System (Oracle)

Creating additional Tables for chapter 9


Run the following command for creating
additional tables:
SQL>start c:\oradata\chapter9\JLDB_Build_9.sql

The following four tables will be added to


your database:
Warehouses,
Publisher2, Publisher3 and
Employees

Dr. Chen, Oracle Database System (Oracle)

Additional Database for chapter 9

pk

warehouses

wh_id
NUMBER(2)
pk

warehouses

location
VARCHAR2(12)

Publishe2

ID
NUMBER(2)
pk

Name
VARCHAR2(23)

Contact
VARCHAR2(15)

Phone
VARCHAR2(12)

Publishe3

ID

Name

Contact

Phone

NUMBER(2)

VARCHAR2(23)

VARCHAR2(15)

VARCHAR2(12)

Publishe2

pk

Publishe3

Employees

EMPNO

LNAME

FNAME

JOB

HIREDATE

DEPTNO

MTHSAL

MGR

NUMBER(4)

VARCHAR2(20)

VARCHAR2(15)

VARCHAR2(19)

DATE

NUMBER(2)

NUMBER(7,2)

NUMBER(4)

Dr. Chen, Oracle Database System (Oracle)

Purpose of Joins
Joins are used to link tables and reconstruct
data in a relational database
Joins can be created through:
Conditions in a WHERE clause
Use of JOIN keywords in FROM clause

Dr. Chen, Oracle Database System (Oracle)

How many records will be in the Cartesian Join?

Figure 9-1 Results of a Cartesian Product


Dr. Chen, Oracle Database System (Oracle)

Cartesian Joins
Created by omitting joining condition in the
WHERE clause or through CROSS JOIN
keywords in the FROM clause
Results in every possible row combination
(m * n)
They are useful when
performing certain statistical procedures for
data analysis

Dr. Chen, Oracle Database System (Oracle)

Cartesian Join Example:


Omitted Condition
Q: Why
unintentional
Cartesian join is
produced?
A: Because Oracle
didnt know what
data the two tables
had in common.
Q: How to solve
the problem?
(70 rows produced)

Figure 9-3

Producing an unintentional Cartesian join

Dr. Chen, Oracle Database System (Oracle)

A: Use of
Equality Joins (or
inner/simple/natu
ral).
-- chapter 9, Figure 9-3; p.288
SELECT title, name
FROM books, publisher;

10

Cartesian Join Example:


CROSS (Cartesian) JOIN Keywords

-- chapter 9, Figure 9-2; p.287


SELECT isbn, title, location, '
FROM books, warehouses
ORDER BY location, title;

' Count

(42 rows produced)

Figure 9-4

Using the CROSS JOIN keywords

Dr. Chen, Oracle Database System (Oracle)

-- chapter 9, Figure 9-4; p.289


SELECT isbn, title, location, ' ' Count
FROM books CROSS JOIN warehouses
ORDER BY location, title;
11

Equality Joins
Link rows through equivalent data that
exists in both tables
Created by:
Creating equivalency condition in the WHERE
clause
Using NATURAL JOIN, JOINUSING, or
JOINON keywords in the FROM clause

Dr. Chen, Oracle Database System (Oracle)

12

Joining Multiple Tables


Join: combine data from multiple database tables
using foreign key references
SELECT field1, field2, ...
FROM table1, table2
WHERE table1.joinfield = table2.joinfield
AND search_condition(s);
If tables share field names, must prefix field in select
with table name (table1.field1, table2.field1)
Join condition: part of where clause indicating how
tables are related (table1.foreign_key =
table2.primary key)
Search conditions can be added to join condition using
AND operator

Dr. Chen, Oracle Database System (Oracle)

13

Inner Join (cont.)

Q: why
Brown is not
on the result?
-- Exatra example
SELECT s_id, s_last, s_first,
student.f_id, f_last
FROM student, faculty
WHERE student.f_id =
faculty.f_id;
Dr. Chen, Oracle Database System (Oracle)

S_ID
-----1
2
3
4
5
6
6 rows

Q: How many rows


will be produced if
C-Join is used?

S_LAST
S_FIRST F_ID F_LAST
-------- -------- ---- -------Jones
Tammy
1 Cox
Perez
Jorge
1 Cox
Marsh
John
1 Cox
Smith
Mike
2 Blanchard
Johnson Lisa
4 Sheng
Nguyen
Ni
3 Williams
selected.
14

Natural Join Inner Join


It can be used when the tables have a single
commonly named and defined column.
-- Extra Example
SELECT s_id, s_last, s_first,
student.f_id, f_last
FROM student, faculty
WHERE student.f_id =
faculty.f_id;

S_ID
-----1
2
3
4
5
6
6 rows

S_LAST
S_FIRST F_ID F_LAST
-------- -------- ---- -------Jones
Tammy
1 Cox
Perez
Jorge
1 Cox
Marsh
John
1 Cox
Smith
Mike
2 Blanchard
Johnson Lisa
4 Sheng
Nguyen
Ni
3 Williams
selected.

-- Use NATURAL JOIN


SELECT s_id, s_last, s_first, f_id, f_last
FROM student NATURAL JOIN faculty;
Dr. Chen, Oracle Database System (Oracle)

15

Equality Joins (Traditional Method):


WHERE Clause Example

Figure 9-6

An equality join

Dr. Chen, Oracle Database System (Oracle)

16

Qualifying Column Names


Columns in
both tables
must be
qualified
Which table is
pubid from?
Is it from
publisher or
books?
-- chapter 9, Figure 9-7(b); p.292
SELECT title, books.pubid,
name
FROM books, publisher
WHERE books.pubid =
Figure 9-7
publisher.pubid;
Dr. Chen, Oracle Database System (Oracle)

A column ambiguously defined error


17

WHERE Clause Supports Join and Other Conditions

Figure 9-8

Including search and join conditions in a WHERE clause

-- Use aliases
-- chapter 9, Figure 9-9; p.294
SELECT b.title, b.pubid, p.name
FROM books b, publisher p
WHERE b.pubid = p.pubid
AND (b.cost < 15 OR p.pubid = 1)
ORDER BY title;
Dr. Chen, Oracle Database System (Oracle)

18

Using a Query Design Diagram


Helpful for creating complicated queries
Can use a formula to derive actual query from diagram
Query: Display customers lastname, firstname and
books title they purchased

Customers

Orders

Orderitems

Books

customer# (j)
lastname (d)
firstname (d)

order# (j)
customer# (j)

order# (j)
isbn (j)

isbn (j)
title (d)

j: join
s: search
d: display
Dr. Chen, Oracle Database System (Oracle)

19

Query: Display customers lastname, firstname and


books title they purchased
Customers

Orders

Orderitems

Books

customer# (j)
lastname (d)
firstname (d)

order# (j)
customer# (j)

order# (j)
isbn (j)

isbn (j)
title (d)

Figure: Join query design diagram

j: join
s: search

You can derive your query from the diagram by following these
steps:

d: display

1. Place the display fields in the SELECT clause


2. List all of the tables in the FROM clause

3. Include the links in join conditions in the WHERE clause


4. Include all of the search fields in the WHERE clause (if needed)

Dr. Chen, Oracle Database System (Oracle)

20

Query: Display customers lastname, firstname and


books title they purchased
Customers

Orders

Orderitems

Books

customer# (j)
lastname (d)
firstname (d)

order# (j)
customer# (j)

order# (j)
isbn (j)

isbn (j)
title (d)

Figure: Join query design diagram

j: join
s: search
d: display

-- chapter 9, Figure 9-10; p.295


SELECT c.lastname, c.firstname, b.title
FROM customers c, orders o, orderitems oi, books b
WHERE c.customer# = o.customer#
AND o.order# = oi.order#
AND oi.isbn = b.isbn
ORDER BY lastname, firstname;

Dr. Chen, Oracle Database System (Oracle)

21

Joining More Than Two Tables


Joining
four tables
requires
three join
conditions

Joining N
tables
requires
___ join
conditions

Figure 9-10 Joining four tables


Dr. Chen, Oracle Database System (Oracle)

22

Query: Display customers lastname, firstname and


books title and only in COMPUTER category
Customers

Orders

Orderitems

Books

customer# (j)
lastname (d)
firstname (d)

order# (j)
customer# (j)

order# (j)
isbn (j)

isbn (j)
title (d)
category (s)
_______

Figure: Join query design diagram

j: join
s: search
d: display

-- chapter 9, Figure 9-10; p.295


SELECT c.lastname, c.firstname, b.title
FROM customers c, orders o, orderitems oi, books b
WHERE c.customer# = o.customer#
AND o.order# = oi.order#
AND oi.isbn = b.isbn
AND category = COMPUTER
ORDER BY lastname, firstname;

Dr. Chen, Oracle Database System (Oracle)

23

Equality Joins: NATURAL JOIN

Figure 9-12 Using the NATURAL JOIN keywords


Dr. Chen, Oracle Database System (Oracle)

24

No Qualifiers with a NATURAL JOIN

Figure 9-13 Column qualifier error with a NATURAL JOIN

Natural Join keyword (e.g, pubid), we are not required to be specified


when the two tables have it in common.
Therefore most developers avoid using a NATURAL JOIN because it
can cause unexpected results.
Dr. Chen, Oracle Database System (Oracle)

25

Equality Joins: JOINUSING


Figure 9-14
Performing
a join with
the JOIN
USING
keywords

Dr. Chen, Oracle Database System (Oracle)

26

Break
Assignments (#2 & #5 on p. 329; see at the end of
the slides)
Figure out how to produce the output with $
displayed (below is a sample output for #5, p.329)
hint:
a) column
b) TO_CHAR (see p.365-367 and learning to learn)
TITLE
PROFIT
------------------------------ -------PAINLESS CHILD-REARING
$37.45
HOW TO MANAGE THE MANAGER
$16.55
PAINLESS CHILD-REARING
$37.45

TO_CHAR( PROFIT, _______ )


Dr. Chen, Oracle Database System (Oracle)

27

Query: list all author IDs with books in the Family Life category
SELECT ba.authorid
FROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = 'FAMILY LIFE;
Query: list all author IDs with books in the Children category
SELECT ba.authorid
FROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = 'CHILDREN';

Dr. Chen, Oracle Database System (Oracle)

28

Query: list all author IDs with books in the Family Life or
Children category
-- chapter 9, Figure 9-28; p. 313(version 2)
SELECT ba.authorid
FROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = FAMILY LIFE

OR category = CHILDREN;
Anything not appropriate in
the output?
How to take care this type of
problem in an easy way?
Dr. Chen, Oracle Database System (Oracle)

29

Using Set Operators to Combine Query


Results
Performs set operations on outputs of two
unrelated queries
They all require that both queries
have the same number of display fields in the
SELECT statement, and that
each field in the first query has the same data
type as the corresponding column in the second
query.

<query 1> <SET Operator> <query 2>

Dr. Chen, Oracle Database System (Oracle)

30

SET THEORY

Dr. Chen, Oracle Database System (Oracle)

31

SET THEORY

C
A-B
B-A
=A-B
=B-A
Dr. Chen, Oracle Database System (Oracle)

=A INTERSECT B
All Regions

=A UNION B
(with C counted just once)

32

SET THEORY

A
D

B
A MINUS B=D

A INTERSECT B= C

B MINUS A=E A UNION


Dr. Chen, Oracle Database System (Oracle)

B = D+C+E
C
A UNION ALL B = D+C+E+__

33

Oracle 11g/SQL Set Operator (Table 9-2)


Use to select data from multiple tables not connected
with foreign key relationships
Used to combine the results of two or more SELECT
statements
UNION (see Figure 9-28)
returns all rows from both queries, but ONLY displays
duplicate rows once

UNION ALL (see Figure 9-30)


returns all (duplicate) rows from both queries, and displays
ALL duplicate rows

INTERSECT (see Figure 9-34)


returns all matching rows that are returned by both queries

MINUS (see Figure 9-35)


returns all rows returned by the first query minus the
matching rows returned by the second query
Dr. Chen, Oracle Database System (Oracle)

34

Query: list all author IDs with books in the Family Life or
Children category
SELECT ba.authorid
FROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = 'FAMILY LIFE

UNION
SELECT ba.authorid
FROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = 'CHILDREN';

Figure 9-28 Producing an unduplicated combined list


with the UNION set operator

Dr. Chen, Oracle Database System (Oracle)

35

Set Operators: UNION and UNION ALL Examples

What is the difference on the outputs?


Dr. Chen, Oracle Database System (Oracle)

36

Query: list all customer numbers and those customers who have
placed an order recently
SELECT customer#
FROM customers
INTERSECT
SELECT customer#
FROM orders;
Figure 9-34 Identifying
overlapping values with the
INTERSECT set operator

Dr. Chen, Oracle Database System (Oracle)

37

Query: list all customer numbers but


havent placed an order recently
SELECT customer#
FROM customers
MINUS
SELECT customer#
FROM orders;
Figure 9-35 Subtract result sets
with the MINUS set operator

Dr. Chen, Oracle Database System (Oracle)

38

MORE EXAMPLES on SET OPERATORS


You need to run the following command
to make the example work:
@ c:\oradata\NW_CW\northwoods.sql

Query: A list of faculty members whose offices are in the BUS


building. (Extra example)
FACULTY
f_first (d)
f_last (d)
loc_id (j)

LOCATION
loc_id (j)
bldg_code (s)

SELECT f_first, f_last


FROM faculty, location
WHERE faculty.loc_id = location.loc_id
AND bldg_code = 'BUS';
Dr. Chen, Oracle Database System (Oracle)

39

Query: A list of faculty members who have taught a course in the


BUS building.
FACULTY
f_first (d)
f_last (d)
f_id (j)

COURSE_
SECTION
f_id (j)
loc_id (j)

LOCATION
loc_id (j)
bldg_code (s)

SELECT DISTINCT f_first, f_last


FROM faculty, location, course_section
WHERE faculty.f_id = course_section.f_id
AND location.loc_id = course_section.loc_id
AND bldg_code = 'BUS';
Dr. Chen, Oracle Database System (Oracle)

40

Query: A list of faculty members whose offices are in the BUS


building or who have taught a course in the BUS building. (extra
example)

SELECT f_first, f_last


FROM faculty, location
WHERE faculty.loc_id = location.loc_id
AND bldg_code = 'BUS'

Office
in BUS

UNION
SELECT f_first, f_last
FROM faculty, location, course_section
WHERE faculty.f_id = course_section.f_id
AND location.loc_id = course_section.loc_id
AND bldg_code = 'BUS';
Dr. Chen, Oracle Database System (Oracle)

Taught
courses
in BUS
41

Query: A list of faculty members whose offices are in the BUS


building and who have taught a course in the BUS building.
(extra example)

SELECT f_first, f_last


FROM faculty, location
WHERE faculty.loc_id = location.loc_id
AND bldg_code = 'BUS'

Office
in BUS

INTERSECT
SELECT f_first, f_last
FROM faculty, location, course_section
WHERE faculty.f_id = course_section.f_id
AND location.loc_id = course_section.loc_id
AND bldg_code = 'BUS';
Dr. Chen, Oracle Database System (Oracle)

Taught
courses
in BUS
42

And NEXT ...


Query: A list of faculty members who have taught a course in the
BUS building, but whose office are NOT located in the BUS

SELECT f_first, f_last


FROM faculty, location
WHERE faculty.loc_id = location.loc_id
AND bldg_code = 'BUS'

Taught
courses
in BUS

MINUS
SELECT f_first, f_last
FROM faculty, location, course_section
WHERE faculty.f_id = course_section.f_id
AND location.loc_id = course_section.loc_id
AND bldg_code = 'BUS';
Dr. Chen, Oracle Database System (Oracle)

Office
in BUS
43

Practice all the examples in the text.


A Script file is available on the Bb (file
name: ch9Queries.sql)
After completing all examples, do the HW.

Dr. Chen, Oracle Database System (Oracle)

44

Homework - Hands-On Assignments


Email me with one attachment
(Oracle_ch9_Spool_Lname_Fname.) to:
chen@jepson.gonzaga.edu
with subject title of
bmis441_Oracle_ch9
Read and Practice all examples on Chapters 9
1. Run the script files (in the folder \oradata\chapter9\):
JLDB_Build_9.sql
2a. Read Oracle assignment and create a script file
Oracle_ch9_Lname_Fname.sql for questions (#2 & #5 ; p.329)
on Hands-on Assignments (use TWO SQL queries, traditional
one and with JOIN read instructions carefully)
2b. Be sure to use i) traditional method, ii) JOIN keyword, iii) draw
Query Design Diagrams for each problem, and iv) use COLUMN
statement to produce readable outputs see next slide for details
3. Execute and test one problem at a time and make sure they are all
running successfully.
4. When you done, spool the script files (see next slide for spooling
instructions) and email the file
5. Include Query Design Diagrams
Dr. Chen, Oracle Database System (Oracle)

45

How to Spool your Script and Output Files and


add Query Design Diagrams
After you tested the script file of Oracle_ch9_Lname_Fname.sql successfully,
follow the instructions below to spool both script and output files:
Step 0. Run the following script file from SQL*Plus (since you have created
JLDB tables)
Start c:\oradata\chapter9\JLDB_Build_9.sql
1. type the following on SQL>
Spool c:\oradata\Oracle_ch9_Spool_Lname_Fname.txt (make sure
your name is entered)
2. open Oracle_ch9_Lname_Fname.sql that you already tested
3. copy and paste all the SQL commands (including all comments) to the
SQL*PLUS
4. type Spool Off on the SQL>
The output should contain your personal information, all SQL commands and
their solution on the .txt file and saved in C: drive (oradata\folder).
Be sure that COLUMN commands might be needed on the script file to align
the output.
Dr. Chen, Oracle Database System (Oracle)

46

How to Spool your Script and Output Files and


add Query Design Diagrams (continued)

5. Next, you should use MS/Word to open the *.txt file and
include/DRAW Query Design Diagram figures for queries with
multiple tables. You may use font of Courier new to align the
output.
6. Save it as *.doc (or docx) file.

Email me with the *.doc (or *.docx) file that includes all required documents
with attachment to:
chen@jepson.gonzaga.edu
with subject title of
bmis441_Oracle_ch9

Dr. Chen, Oracle Database System (Oracle)

47

Summary
Data stored in multiple tables regarding a single
entity can be linked together through the use of
joins
A Cartesian join between two tables returns every
possible combination of rows from the tables; the
resulting number of rows is always m * n
An equality join is created when the data joining
the records from two different tables are an exact
match
A non-equality join establishes a relationship based
upon anything other than an equal condition
Self-joins are used when a table must be joined to
itself to retrieve needed data
Dr. Chen, Oracle Database System (Oracle)

48

Summary (continued)
Inner joins are categorized as being equality, nonequality, or self-joins
An outer join is created when records need to be
included in the results without having
corresponding records in the join tables
The record is matched with a NULL record so it will be
included in the output

Set operators such as UNION, UNION ALL,


INTERSECT, and MINUS can be used to
combine the results of multiple queries

Dr. Chen, Oracle Database System (Oracle)

49