Oracle_ch9.pptx
-
Upload
jenner-patrick-lopes-brasil -
Category
Documents
-
view
221 -
download
1
Transcript of Oracle_ch9.pptx
-
8/10/2019 Oracle_ch9.pptx
1/49
-
8/10/2019 Oracle_ch9.pptx
2/49
Dr. Chen, Oracle Database System (Oracle) 2
Chapter 9
Joining Data from MultipleTables
(p.284-296; p.312-330)
Jason C. H. Chen,Ph.D.
Professor of MIS
School of Business
Gonzaga University
Spokane, WA 99258 USA
-
8/10/2019 Oracle_ch9.pptx
3/49
Dr. Chen, Oracle Database System (Oracle) 3
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 WHEREclause
Create a non-equality join using the JOINON
approach
-
8/10/2019 Oracle_ch9.pptx
4/49
Dr. Chen, Oracle Database System (Oracle) 4
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 OUTERkeyword
Use set operators to combine the results of
multiple queries
-
8/10/2019 Oracle_ch9.pptx
5/49
Dr. Chen, Oracle Database System (Oracle) 5
Creating additional Tables for chapter 9
Run the following command for creatingadditional tables:
SQL>start c:\oradata\chapter9\JLDB_Build_9.sql
The following four tables will be added toyour database:
Warehouses,
Publisher2, Publisher3 andEmployees
-
8/10/2019 Oracle_ch9.pptx
6/49
Dr. Chen, Oracle Database System (Oracle) 6
wh_id location
NUMBER(2) VARCHAR2(12)
ID Name Contact Phone
NUMBER(2) VARCHAR2(23) VARCHAR2(15) VARCHAR2(12)
ID Name Contact Phone
NUMBER(2) VARCHAR2(23) VARCHAR2(15) VARCHAR2(12)
EMPNO LNAME FNAME JOB HIREDATE DEPTNO MTHSAL MGR
NUMBER(4) VARCHAR2(20) VARCHAR2(15) VARCHAR2(19) DATE NUMBER(2) NUMBER(7,2) NUMBER(4)
pk
pk
pk
pk
warehouses
Publishe2
Publishe3
Employees
Publishe2Publishe3
warehouses
Additional Database for chapter 9
-
8/10/2019 Oracle_ch9.pptx
7/49
Dr. Chen, Oracle Database System (Oracle) 7
Purpose of Joins
Joins are used to link tables and reconstructdata in a relational database
Joins can be created through:
Conditions in a WHERE clauseUse of JOIN keywords in FROM clause
-
8/10/2019 Oracle_ch9.pptx
8/49
Dr. Chen, Oracle Database System (Oracle) 8
How many records will be in the Cartesian Join?
Figure 9-1 Results of a Cartesian Product
-
8/10/2019 Oracle_ch9.pptx
9/49
Dr. Chen, Oracle Database System (Oracle) 9
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
-
8/10/2019 Oracle_ch9.pptx
10/49
Dr. Chen, Oracle Database System (Oracle) 10
Cartesian Join Example:
Omitted Condition
Figure 9-3 Producing an unintentional Cartesian join
Q: Why
unintentionalCartesian join is
produced?
A: Because Oracle
didnt know whatdata the two tables
had in common.
Q: How to solve
the problem?
A: Use ofEquality Joins (or
inner/simple/natu
ral).
-- chapter 9, Figure 9-3; p.288
SELECT title, nameFROM books, publisher;
(70 rows produced)
-
8/10/2019 Oracle_ch9.pptx
11/49
Dr. Chen, Oracle Database System (Oracle) 11
Cartesian Join Example:
CROSS (Cartesian) JOIN Keywords
Figure 9-4 Using the CROSS JOIN keywords
-- chapter 9, Figure 9-2; p.287
SELECT isbn, title, location, ' ' Count
FROM books, warehouses
ORDER BY location, title;
-- chapter 9, Figure 9-4; p.289
SELECT isbn, title, location, ' ' Count
FROM books CROSS JOIN warehouses
ORDER BY location, title;
(42 rows produced)
-
8/10/2019 Oracle_ch9.pptx
12/49
Dr. Chen, Oracle Database System (Oracle) 12
Equality Joins
Link rows through equivalent data thatexists in both tables
Created by:
Creating equivalency condition in the WHEREclause
Using NATURAL JOIN, JOINUSING, or
JOINON keywords in the FROM clause
-
8/10/2019 Oracle_ch9.pptx
13/49
Dr. Chen, Oracle Database System (Oracle) 13
Joining Multiple Tables
Join: combine data from multiple database tablesusing foreign keyreferences
SELECTfield1, field2, ...
FROMtable1, table2
WHEREtable1.joinfield = table2.joinfieldANDsearch_condition(s);
If tables share field names, must prefix field in selectwith table name (table1.field1, table2.field1)
Join condition: part of where clause indicating howtables are related (table1.foreign_key=table2.primary key)
Search conditions can be added to join condition using
AND operator
-
8/10/2019 Oracle_ch9.pptx
14/49
Dr. Chen, Oracle Database System (Oracle) 14
Inner Join (cont.)
-- Exatra 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 S_LAST S_FIRST F_ID F_LAST
------ -------- -------- ---- --------
1 Jones Tammy 1 Cox
2 Perez Jorge 1 Cox
3 Marsh John 1 Cox
4 Smith Mike 2 Blanchard
5 Johnson Lisa 4 Sheng
6 Nguyen Ni 3 Williams
6 rows selected.
Q: whyBrown is not
on the result?
Q: How many rowswill be produced if
C-Join is used?
-
8/10/2019 Oracle_ch9.pptx
15/49
Dr. Chen, Oracle Database System (Oracle) 15
Natural JoinInner Join
It can be used when the tables have a singlecommonly 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;
-- Use NATURAL JOIN
SELECT s_id, s_last, s_first, f_id, f_last
FROM student NATURAL JOIN faculty;
S_ID S_LAST S_FIRST F_ID F_LAST
------ -------- -------- ---- --------1 Jones Tammy 1 Cox
2 Perez Jorge 1 Cox
3 Marsh John 1 Cox
4 Smith Mike 2 Blanchard
5 Johnson Lisa 4 Sheng
6 Nguyen Ni 3 Williams
6 rows selected.
-
8/10/2019 Oracle_ch9.pptx
16/49
Dr. Chen, Oracle Database System (Oracle) 16
Equality Joins (Traditional Method):
WHERE Clause Example
Figure 9-6 An equality join
-
8/10/2019 Oracle_ch9.pptx
17/49
Dr. Chen, Oracle Database System (Oracle) 17
Qualifying Column Names
Columns in
both tables
must be
qualified
Figure 9-7 A column ambiguously defined error
Which table is
pubid from? Is it from
publisheror
books?
-- chapter 9, Figure 9-7(b); p.292
SELECT title, books.pubid,
name
FROM books, publisher
WHERE books.pubid =
publisher.pubid;
-
8/10/2019 Oracle_ch9.pptx
18/49
Dr. Chen, Oracle Database System (Oracle) 18
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.294SELECT 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;
-
8/10/2019 Oracle_ch9.pptx
19/49
Dr. Chen, Oracle Database System (Oracle) 19
Using a Query Design Diagram
Helpful for creating complicated queries
Can use a formula to derive actual query from diagram
Customerscustomer# (j)
lastname (d)
firstname (d)
Ordersorder# (j)
customer# (j)
Orderitemsorder# (j)
isbn (j)
Query: Display customers lastname, firstname and
books title they purchased
Booksisbn (j)
title (d)
j: join
s: search
d: display
-
8/10/2019 Oracle_ch9.pptx
20/49
Dr. Chen, Oracle Database System (Oracle) 20
Query: Display customers lastname, firstname and
books title they purchased
j: join
s: search
d: display
Customerscustomer# (j)
lastname (d)
firstname (d)
Ordersorder# (j)
customer# (j)
Orderitemsorder# (j)
isbn (j)
Booksisbn (j)
title (d)
You can derive your query from the diagram by following these
steps:
1. Place the display fields in the SELECT clause
2. List all of the tables in the FROM clause3. Include the links in join conditions in the WHERE clause
4. Include all of the search fields in the WHERE clause (if needed)
Figure: Join query design diagram
-
8/10/2019 Oracle_ch9.pptx
21/49
Dr. Chen, Oracle Database System (Oracle) 21
Query: Display customers lastname, firstname and
books title they purchased
j: join
s: search
d: display
Customerscustomer# (j)
lastname (d)
firstname (d)
Ordersorder# (j)
customer# (j)
Orderitemsorder# (j)
isbn (j)
Booksisbn (j)
title (d)
Figure: Join query design diagram
-- chapter 9, Figure 9-10; p.295
SELECTc.lastname, c.firstname, b.title
FROMcustomers c, orders o, orderitems oi, books b
WHEREc.customer# = o.customer#ANDo.order# = oi.order#
ANDoi.isbn = b.isbn
ORDER BY lastname, firstname;
-
8/10/2019 Oracle_ch9.pptx
22/49
Dr. Chen, Oracle Database System (Oracle) 22
Joining More Than Two Tables
Figure 9-10 Joining four tables
Joining
four tables
requiresthree join
conditions
Joining N
tablesrequires
___ join
conditions
-
8/10/2019 Oracle_ch9.pptx
23/49
Dr. Chen, Oracle Database System (Oracle) 23
Query: Display customers lastname, firstname and
books title and only in COMPUTER category
j: join
s: search
d: display
Customerscustomer# (j)
lastname (d)
firstname (d)
Ordersorder# (j)
customer# (j)
Orderitemsorder# (j)
isbn (j)
Booksisbn (j)
title (d)
_______
Figure: Join query design diagram
-- chapter 9, Figure 9-10; p.295
SELECTc.lastname, c.firstname, b.title
FROMcustomers c, orders o, orderitems oi, books b
WHEREc.customer# = o.customer#ANDo.order# = oi.order#
ANDoi.isbn = b.isbn
ORDER BY lastname, firstname;
ANDcategory = COMPUTER
category (s)
-
8/10/2019 Oracle_ch9.pptx
24/49
-
8/10/2019 Oracle_ch9.pptx
25/49
Dr. Chen, Oracle Database System (Oracle) 25
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.
-
8/10/2019 Oracle_ch9.pptx
26/49
Dr. Chen, Oracle Database System (Oracle) 26
Equality Joins: JOINUSING
Figure 9-14
Performing
a join with
the JOIN
USING
keywords
-
8/10/2019 Oracle_ch9.pptx
27/49
Dr. Chen, Oracle Database System (Oracle) 27
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,_______
-
8/10/2019 Oracle_ch9.pptx
28/49
Dr. Chen, Oracle Database System (Oracle) 28
Query: list all author IDs with books in the Children category
Query: list all author IDs with books in the Family Life category
SELECT ba.authorid
FROM books b JOIN bookauthor baUSING (isbn)
WHERE category = 'FAMILY LIFE;
SELECT ba.authorid
FROM books b JOIN bookauthor baUSING (isbn)
WHERE category = 'CHILDREN';
-
8/10/2019 Oracle_ch9.pptx
29/49
Dr. Chen, Oracle Database System (Oracle) 29
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
Anything notappropriate in
the output?
ORcategory = CHILDREN;
How to take care this type of
problem in an easy way?
-
8/10/2019 Oracle_ch9.pptx
30/49
Dr. Chen, Oracle Database System (Oracle) 30
Using Set Operators to Combine Query
Results
Performs set operations on outputs of twounrelated 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 datatype as the corresponding column in the secondquery.
-
8/10/2019 Oracle_ch9.pptx
31/49
Dr. Chen, Oracle Database System (Oracle) 31
A B
SET THEORY
-
8/10/2019 Oracle_ch9.pptx
32/49
Dr. Chen, Oracle Database System (Oracle) 32
C
SET THEORY
=A-B
=B-A
=A INTERSECTB
All Regions =A UNIONB
(with Ccounted just once)
A-B B-A
-
8/10/2019 Oracle_ch9.pptx
33/49
Dr. Chen, Oracle Database System (Oracle) 33
C
SET THEORY
A MINUS B=D
B MINUS A=E
A INTERSECTB=
A UNIONB =
D E
A UNION ALLB = D+C+E+__C
C
D+C+E
A
B
-
8/10/2019 Oracle_ch9.pptx
34/49
Dr. Chen, Oracle Database System (Oracle) 34
Oracle 11g/SQL SetOperator (Table 9-2)
UNION (see Figure 9-28)
returns all rows from both queries, but ONLY displaysduplicate 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
Use to select data from multiple tables not connected
with foreign key relationshipsUsed to combine the results of two or more SELECT
statements
-
8/10/2019 Oracle_ch9.pptx
35/49
Dr. Chen, Oracle Database System (Oracle) 35
Query: list all author IDs with books in the Family Life or
Children category
SELECT ba.authoridFROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = 'FAMILY LIFE
SELECT ba.authorid
FROM books b JOIN bookauthor ba
USING (isbn)
WHERE category = 'CHILDREN';
UNION
Figure 9-28 Producing an unduplicated combined list
with the UNION set operator
-
8/10/2019 Oracle_ch9.pptx
36/49
Dr. Chen, Oracle Database System (Oracle) 36
Set Operators: UNION and UNION ALL Examples
What is the difference on the outputs?
Q li t ll t b d th t h h
-
8/10/2019 Oracle_ch9.pptx
37/49
Dr. Chen, Oracle Database System (Oracle) 37
Figure 9-34 Identifying
overlapping values with theINTERSECT set operator
Query: list all customer numbers and those customers who have
placed an order recently
SELECT customer#FROM customers
SELECT customer#FROM orders;
INTERSECT
-
8/10/2019 Oracle_ch9.pptx
38/49
Dr. Chen, Oracle Database System (Oracle) 38
Query: list all customer numbers but
haventplaced an order recently
Figure 9-35 Subtract result sets
with the MINUS set operator
SELECT customer#FROM customers
SELECT customer#FROM orders;
MINUS
-
8/10/2019 Oracle_ch9.pptx
39/49
Dr. Chen, Oracle Database System (Oracle) 39
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';
MORE EXAMPLES on SET OPERATORS
You need to run the following command
to make the example work:
@ c:\oradata\NW_CW\northwoods.sql
-
8/10/2019 Oracle_ch9.pptx
40/49
Dr. Chen, Oracle Database System (Oracle) 40
Query:A list of faculty members who have taught a course in theBUS building.
FACULTY
f_first (d)
f_last (d)f_id (j)
LOCATION
loc_id (j)
bldg_code (s)
COURSE_
SECTION
f_id (j)loc_id (j)
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';
-
8/10/2019 Oracle_ch9.pptx
41/49
Dr. Chen, Oracle Database System (Oracle) 41
Query:A list of faculty members whose offices are in the BUS
building orwho 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'
SELECT f_first, f_lastFROM faculty, location, course_section
WHERE faculty.f_id = course_section.f_id
AND location.loc_id = course_section.loc_id
AND bldg_code = 'BUS';
UNION
Officein BUS
Taught
courses
in BUS
-
8/10/2019 Oracle_ch9.pptx
42/49
Dr. Chen, Oracle Database System (Oracle) 42
Query:A list of faculty members whose offices are in the BUS
building andwho 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'
SELECT f_first, f_lastFROM faculty, location, course_section
WHERE faculty.f_id = course_section.f_id
AND location.loc_id = course_section.loc_id
AND bldg_code = 'BUS';
INTERSECT
Officein BUS
Taught
courses
in BUS
A d NEXT
-
8/10/2019 Oracle_ch9.pptx
43/49
Dr. Chen, Oracle Database System (Oracle) 43
And NEXT ...
Query:A list of faculty members who have taught a course in the
BUS building, but whose office are NOTlocated in the BUS
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';
SELECT f_first, f_last
FROM faculty, location
WHERE faculty.loc_id = location.loc_id
AND bldg_code = 'BUS'
MINUS
Office
in BUS
Taught
coursesin BUS
-
8/10/2019 Oracle_ch9.pptx
44/49
Dr. Chen, Oracle Database System (Oracle) 44
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.
H k H d O A i t
-
8/10/2019 Oracle_ch9.pptx
45/49
Dr. Chen, Oracle Database System (Oracle) 45
Homework - Hands-On Assignments
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, traditionalone 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 COLUMNstatement to produce readable outputssee next slide for details
3. Execute and test one problem at a time and make sure they are allrunning successfully.
4. When you done, spool the script files (see next slide for spoolinginstructions) and email the file
5. Include Query Design Diagrams
Email me with one attachment
(Oracle_ch9_Spool_Lname_Fname.) to:
[email protected] subject title of
bmis441_Oracle_ch9
How to Spool your Script and Output Files and
-
8/10/2019 Oracle_ch9.pptx
46/49
Dr. Chen, Oracle Database System (Oracle) 46
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 sureyour 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 theSQL*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 COLUMNcommands might be needed on the script file to alignthe output.
-
8/10/2019 Oracle_ch9.pptx
47/49
Dr. Chen, Oracle Database System (Oracle) 47
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 andinclude/DRAWQuery Design Diagram figures for queries withmultiple tables. You may use font of Courier new to align theoutput.
6. Save it as *.doc (or docx) file.
Email me with the *.doc (or *.docx) file that includes all required documents
with attachment to:
[email protected] subject title of
bmis441_Oracle_ch9
-
8/10/2019 Oracle_ch9.pptx
48/49
Dr. Chen, Oracle Database System (Oracle) 48
Summary
Data stored in multiple tables regarding a single
entity can be linked together through the use ofjoins
A Cartesian join between two tables returns everypossible combination of rows from the tables; the
resulting number of rows is always m * n
An equality join is created when the data joiningthe records from two different tables are an exactmatch
A non-equality join establishes a relationship basedupon anything other than an equal condition
Self-joins are used when a table must be joined to
itself to retrieve needed data
-
8/10/2019 Oracle_ch9.pptx
49/49
Summary (continued)
Inner joins are categorized as being equality, non-equality, or self-joins
An outer join is created when records need to beincluded in the results without havingcorresponding records in the join tables
The record is matched with a NULL record so it will beincluded in the output
Set operators such as UNION, UNION ALL,INTERSECT, and MINUS can be used tocombine the results of multiple queries