Oracle_ch9.pptx

download Oracle_ch9.pptx

of 49

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

    [email protected]

  • 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