Chapter 11 – Join Functions

“When spider webs unite they can tie up a lion.”

- African Proverb

A Two-Table Join Using Traditional Syntax

image

A Join combines columns on the report from more than one table. The example above joins the Customer_Table and the Order_Table together. The most complicated part of any join is the JOIN CONDITION. The JOIN CONDITION is which Column from each table is a match. In this case, Customer_Number is a match that establishes the relationship, so this join will happen on matching Customer_Number columns.

A two-table join using Non-ANSI Syntax with Table Alias

image

A Join combines columns on the report from more than one table. The example above joins the Customer_Table and the Order_Table together. The most complicated part of any join is the JOIN CONDITION. The JOIN CONDITION means which Column from each table is a match. In this case, Customer_Number is a match that establishes the relationship.

You Can Fully Qualify All Columns

image

Whenever a column is in both tables, you must fully qualify it when doing a join. You don’t have to fully qualify tables that are only in one of the tables because the system knows which table that particular column is in. You can choose to fully qualify every column if you like. This is a good practice because it is more apparent which columns belong to which tables for anyone else looking at your SQL.

A two-table join using ANSI Syntax

image

This is the same join as the previous slide except it is using ANSI syntax. Both will return the same rows with the same performance. Rows are joined when the Customer_Number matches on both tables, but non-matches won’t return.

Both Queries have the same Results and Performance

image

Both of these syntax techniques bring back the same result set and have the same performance. The INNER JOIN is considered ANSI. Which one does Outer Joins?

Quiz – Can You Finish the Join Syntax?

image

SELECT First_Name, Last_Name,

Department_Name

FROM    Employee_Table as E

INNER JOIN

Department_Table as D

ON

Finish the Join

Finish this join by placing the missing SQL in the proper place!

Answer to Quiz – Can You Finish the Join Syntax?

image

This query is ready to run.

Quiz – Can You Find the Error?

image

This query has an error! Can you find it?

Answer to Quiz – Can You Find the Error?

image

If a column in the SELECT list is in both tables, you must fully qualify it.

Super Quiz – Can You Find the Difficult Error?

image

This query has an error! Can you find it?

Answer to Super Quiz – Can You Find the Difficult Error?

image

If a column in the SELECT list is in both tables, you must fully qualify it.

Quiz – Which rows from both tables won’t Return?

image

An Inner Join returns matching rows, but did you know an Outer Join returns both matching rows and nonmatching rows? You will understand soon!

Answer to Quiz – Which rows from both tables Won’t Return?

image

The bottom line is that the three rows excluded did not have a matching Dept_No.

LEFT OUTER JOIN

image

This is a LEFT OUTER JOIN. That means that all rows from the LEFT Table will appear in the report regardless if it finds a match on the right table.

LEFT OUTER JOIN Results

image

A LEFT Outer Join Returns all rows from the LEFT Table including all Matches. If a LEFT row can’t find a match, a NULL is placed on right columns not found!

Left Outer Joins Compatible with Oracle

SELECT Customer_Name, Order_Date, Order_Total

FROMCustomer_Table as C

LEFT OUTER JOIN

Order_Table as O

ON C.Customer_Number = O.Customer_Number  ;

SELECT Customer_Name, Order_Date, Order_Total

FROMCustomer_Table as C,

Order_Table as O

WHERE C.Customer_Number = O.Customer_Number (+)  ;

“Can’t died when Could was born.”

-- Author Unknown

Matrix supports outer joins using both the ANSI syntax and the Oracle syntax. I think Oracle joins are a real plus!

RIGHT OUTER JOIN

image

This is a RIGHT OUTER JOIN. That means that all rows from the RIGHT Table will appear in the report regardless if it finds a match with the LEFT Table.

RIGHT OUTER JOIN Example and Results

image

All rows from the Right Table were returned with matches, but since Dept_No 500 didn’t have a match, the system put a NULL Value for Left Column values.

Right Outer Joins Compatible with Oracle

SELECT Customer_Name, Order_Date, Order_Total

FROMCustomer_Table as C

RIGHT OUTER JOIN

Order_Table as O

ON C.Customer_Number = O.Customer_Number  ;

SELECT Customer_Name, Order_Date, Order_Total

FROMCustomer_Table as C,

Order_Table as O

WHERE C.Customer_Number (+) = O.Customer_Number  ;

Matrix supports outer joins using both the ANSI syntax and the Oracle syntax.

FULL OUTER JOIN

image

The is a FULL OUTER JOIN. That means that all rows from both the RIGHT and LEFT Table will appear in the report regardless if it finds a match.

FULL OUTER JOIN Results

image

The FULL Outer Join Returns all rows from both Tables. NULLs show the flaws!

Which Tables are the Left and which are the Right?

image

Can you list which tables above are left tables and which tables are right tables?

Answer - Which Tables are the Left and which are the Right?

image

The first table is always the left table and the rest are right tables. The results from the first two tables being joined becomes the left table.

INNER JOIN with Additional AND Clause

image

The additional AND is performed first in order to eliminate unwanted data, so the join is less intensive than joining everything first and then eliminating rows that don’t qualify.

ANSI INNER JOIN with Additional AND Clause

image

The additional AND is performed first in order to eliminate unwanted data, so the join is less intensive than joining everything first and then eliminating after.

ANSI INNER JOIN with Additional WHERE Clause

image

The additional WHERE is performed first in order to eliminate unwanted data, so the join is less intensive than joining everything first and then eliminating.

OUTER JOIN with Additional WHERE Clause

image

The additional WHERE is performed last on Outer Joins. All rows will be joined first and then the additional WHERE clause filters after the join takes place.

OUTER JOIN with Additional AND Clause

image

The additional AND is performed in conjunction with the ON statement on Outer Joins. All rows will be evaluated with the ON clause and the AND combined.

OUTER JOIN with Additional AND Clause Results

image

The additional AND is performed in conjunction with the ON statement on Outer Joins. This can surprise you. Only Mandee is in Dept_No 100, so she showed up like expected, but an outer join returns non-matches also. Ouch!!!

Quiz – Why is this considered an INNER JOIN?

image

This is considered an INNER JOIN because we are doing a LEFT OUTER JOIN on the Employee_Table and then filtering with the AND for a column in the right table!

The DREADED Product Join

image

This query becomes a Product Join because it does not possess any JOIN Conditions (Join Keys). Every row from one table is compared to every row of the other table, and quite often, the data is not what you intended to get back.

The DREADED Product Join Results

image

How can Billy Coffing work in 3 different departments?

A Product Join is often a mistake! 3 Department rows had an ‘m’ in their name, so these were joined to every employee, and the information is worthless.

The Horrifying Cartesian Product Join

image

A Cartesian Product Join is usually a big mistake.

The ANSI Cartesian Join will ERROR

image

This causes an error. ANSI won’t let this run unless a join condition is present.

Quiz – Do these Joins Return the Same Answer Set?

image

Do these two queries produce the same result?

Answer – Do these Joins Return the Same Answer Set?

image

Do these two queries produce the same result? No, Query 1 Errors due to ANSI syntax and no ON Clause, but Query 2 Product Joins to bring back junk!

The CROSS JOIN

image

This query becomes a Product Join because a Cross Join is an ANSI Product Join. It will compare every row from the Customer_Table to Order_Number 123456 in the Order_Table. Check out the Answer Set on the next page.

The CROSS JOIN Answer Set

image

This Cross Join produces information that just isn’t worth anything quite often!

The Self Join

image

A Self Join gives itself 2 different Aliases, which is then seen as two different tables.

The Self Join with ANSI Syntax

image

A Self Join gives itself 2 different Aliases, which is then seen as two different tables.

Quiz – Will both queries bring back the same Answer Set?

image

Will both queries bring back the same result set?

Answer – Will both queries bring back the same Answer Set?

image

Will both queries bring back the same result set? Yes! because they’re both inner joins.

Quiz – Will both queries bring back the same Answer Set?

image

Will both queries bring back the same result set?

Answer – Will both queries bring back the same Answer Set?

image

Will both queries bring back the same result set? NO! The WHERE is performed last.

How would you Join these two tables?

image

How would you join these two tables together? You can't do it. There is no matching column with like data. There is no Primary Key/Foreign Key relationship between these two tables. That is why you are about to be introduced to a bridge table. It is formally called an Associative table or a Lookup table.

An Associative Table is a Bridge that Joins Two Tables

image

The Associative Table is a bridge between the Course_Table and Student_Table.

Quiz – Can you Write the 3-Table Join?

image

SELECT ALL Columns from the Course_Table and Student_Table and Join them.

Answer to Quiz – Can you Write the 3-Table Join?

image

The Associative Table is a bridge between the Course_Table and Student_Table, and its sole purpose is to join these two tables together.

Quiz – Can you Write the 3-Table Join to ANSI Syntax?

image

SELECT S.*, C.*

FROMStudent_Table as S,

Course_Table as C,

Student_Course_Table as SC

Where S.Student_ID = SC.Student_ID

ANDC.Course_ID = SC.Course_ID ;

Convert this query to ANSI syntax

Please re-write the above query using ANSI Syntax.

Answer – Can you Write the 3-Table Join to ANSI Syntax?

image

The above queries show both traditional and ANSI form for this three table join.

Quiz – Can you Place the ON Clauses at the End?

image

Please re-write the above query and place both ON Clauses at the end.

Answer – Can you Place the ON Clauses at the End?

image

This is tricky. The only way it works is to place the ON clauses backwards. The first ON Clause represents the last INNER JOIN and then moves backwards.

The 5-Table Join – Logical Insurance Model

image

Above is the logical model for the insurance tables showing the Primary Key and Foreign Key relationships (PK/FK).

Quiz - Write a Five Table Join Using ANSI Syntax

image

Your mission is to write a five table join selecting all columns using ANSI syntax.

Answer - Write a Five Table Join Using ANSI Syntax

SELECT

cla1.*, sub1.*, add1.* ,pro1.*, ser1.*

FROMCLAIMS AS cla1

INNER JOIN

SUBSCRIBERS AS sub1

ONcla1.Subscriber_No = sub1.Subscriber_No

ANDcla1.Member_No = sub1.Member_No

INNER JOIN

ADDRESSES AS add1

ONsub1.Subscriber_No = add1.Subscriber_No

INNER JOIN

PROVIDERS  AS pro1

ONcla1.Provider_No = pro1.Provider_Code

INNER JOIN

SERVICES AS ser1

ONcla1.Claim_Service = ser1.Service_Code ;

Above is a example of writing a five table join using ANSI syntax.

Quiz - Write a Five Table Join Using Non-ANSI Syntax

image

Your mission is to write a five table join selecting all columns using Non-ANSI syntax.

Answer - Write a Five Table Join Using Non-ANSI Syntax

SELECTcla1.*, sub1.*, add1.* ,pro1.*, ser1.*

FROMCLAIMS AS cla1,

SUBSCRIBERS AS sub1,

ADDRESSES AS add1,

PROVIDERS AS pro1,

SERVICES AS ser1

WHEREcla1.Subscriber_No = sub1.Subscriber_No

ANDcla1.Member_No = sub1.Member_No

ANDsub1.Subscriber_No = add1.Subscriber_No

ANDcla1.Provider_No = pro1.Provider_Code

ANDcla1.Claim_Service = ser1.Service_Code ;

Above is the example writing this five table join using Non-ANSI syntax.

Quiz –Re-Write this putting the ON clauses at the END

SELECT

cla1.*, sub1.*, add1.* ,pro1.*, ser1.*

FROMCLAIMS AS cla1

INNER JOIN

SUBSCRIBERS AS sub1

ONcla1.Subscriber_No = sub1.Subscriber_No

ANDcla1.Member_No = sub1.Member_No

INNER JOIN

ADDRESSES AS add1

ONsub1.Subscriber_No = add1.Subscriber_No

INNER JOIN

PROVIDERS AS pro1

ONcla1.Provider_No = pro1.Provider_Code

INNER JOIN

SERVICES AS ser1

ONcla1.Claim_Service = ser1.Service_Code ;

Above is the example writing this five table join using Non-ANSI syntax.

Answer –Re-Write this putting the ON clauses at the END

image

Above is the example writing this five table join using ANSI syntax with the ON clauses at the end. We had to move the tables around also to make this happen. Notice that the first ON clause represents the last two tables being joined, and then it works backwards.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.15.235.196