Teradata Joins

Post on 14-Apr-2015

248 views 12 download

description

Teradata JOins

Transcript of Teradata Joins

Everything You Wanted ToKnow About Joins But…..!!!

Mark N. Jauss

NCR Corporation

Key Areas

• What are Joins

• Types of Joins

• Examples of Joins

• Potential problems with Joins

The Basics -- What Are Joins?

• A concept in relational database theory

• Technique for accessing 2+ tables in a single answer set

• Each answer set row may contain data from each table

• Joined on “join” column

ANSI 89 -vs- ANSI 92

• ANSI 89 Standard

• Sometimes called the “Where” version

• No Join command necessary

ANSI 89 -vs- ANSI 92

• ANSI 92 Standard

• Requires a Join command

• Requires a From clause

• All factors equal, performance the same

Types Of Joins

• We will discuss the following Joins:

• Inner Join

• Outer Joins

• Full

• Left

• Right

• Cross Join

• Self Join

Inner Joins

• Rows which match based on join criteria

• Example:

Select employee.lname, employee.fname

From employee Inner Join department

On employee.departmentnum = department.departmentnum;

Outer Joins

• Full: Both tables used to qualify and both extended with Nulls

• Left: Left table used to qualify and right table has Nulls for non-matching rows

• Right: Right table used to qualify and left table has Nulls for non-matching rows

Full Outer Join

• Example:

Select employee.lname, employee.fname

From employee Full Outer Join department

On employee.departmentnum=department.departmentnum;

Left Outer Join

• Example:

Select employee.lname, employee.fname

From employee Left Outer Join department

On employee.departmentnum = department.departmentnum;

Right Outer Join

• Example:

Select employee.lname, employee.fname

From employee Right Outer Join department

On employee.departmentnum = department.departmentnum;

Cross Join

• Each row of one table matched with each row of another table (no ON clause)

• Example:

Select employee.lname, employee.fname

From employee Cross Join department

Where employee.employee_number = 1008;

Self Join

• Rows matching other rows within the same table

• Example:

Select employee.lname, employee.fname

From employee emp Inner Join employee mgr

On emp.departmentnum=mgr.departmentnum;

Alias Names

• Temporary name for Table or View

• Defined in From clause

• Useful as abbreviation

• Required in Self Join

• Once defined, must be used in SQL where table name required

Multiple Table Joins

• A join can have up to 64 participating tables

• An n-table join requires n-1 join conditions

• Omitting a join condition will result in a Cartesian Product Join

Multiple Table Joins

• Example:

Select employee.lname, employee.fname

From employee Inner Join department

On employee.departmentnum = department.departmentnum

Inner Join job

On employee.jobcode = job.jobcode;

Potential Problems With Joins

• Generating a Cartesian Product Join (spool problems)

• How:

• Cross Join with no Where clause

• Improper aliasing

• Omitting a Join condition

• Improper Join condition

Potential Problems With Joins

• Improper aliasing:

Select employee.lname, employee.fname

From employee emp Inner Join department dep

On emp.departmentnum = dep.departmentnum

Potential Problems With Joins

• Omitting a Join condition:

Select employee.lname, employee.fname

From employee Inner Join

department

On employee.departmentnum =

department.departmentnum Inner Join job;

Potential Problems With Joins

• Improper Join condition:

Select employee.lname, employee.fname

From employee Inner Join department

On 3 = 3;

Comparing Subqueries To Joins

• Subquery answer set only displays from outer query table

• Subquery easier to write (?)

• All things equal, Joins are usually better performers

Sample Explain Of Subquery

EXPLAIN

SELECT first_name

,last_name

,department_number

FROM employee

WHERE department_number IN

(SELECT department_number

FROM department

WHERE department_name LIKE ‘%Research%’);

Sample Explain Output Of Subquery

5) We do an all-AMPs JOIN step from Spool 2 (Last Use) by way of an all-rows scan, which is joined to CUSTOMER_SERVICE.departmentwith a condition of ("CUSTOMER_SERVICE.department.department_name LIKE '%Research%'"). Spool 2 and CUSTOMER_SERVICE.departmentare joined using a merge join, with a join condition of ("Spool_2.department_number CUSTOMER_SERVICE.department.department_number"). The result goes into Spool 1, which is built locally on the AMPs. The size of Spool 1 is estimated to be 24 rows. The estimated time for this step is 0.18 seconds.

-> The contents of Spool 1 are sent back to the user as the result of statement 1. The total estimated time is 0 hours and 0.24 seconds.

Sample Explain Of Join

EXPLAIN

SELECT employee.first_name

,employee.last_name

,employee.department_number

FROM employee INNER JOIN

department

ON employee.department_number =

department.department_number

WHERE department.department_name LIKE ‘%Research%’;

Sample Explain Output Of Join

5) We do an all-AMPs JOIN step from Spool 2 (Last Use) by way of an all-rows scan, which is joined to CUSTOMER_SERVICE.departmentwith a condition of ("CUSTOMER_SERVICE.department.department_name LIKE '%Research%'"). Spool 2 and CUSTOMER_SERVICE.departmentare joined using a merge join, with a join condition of ("Spool_2.department_number CUSTOMER_SERVICE.department.department_number"). The result goes into Spool 1, which is built locally on the AMPs. The size of Spool 1 is estimated to be 24 rows. The estimated time for this step is 0.18 seconds.

6) Finally, we send out an END TRANSACTION step to all AMPsinvolved in processing the request.

-> The contents of Spool 1 are sent back to the user as the result of statement 1. The total estimated time is 0 hours and 0.23 seconds

Summary

• Several different types of Joins

• Inner Join

• Full Outer Join

• Left Outer Join

• Right Outer Join

• Cross Join

• Self Join

Summary

• Potential problems

• Improper aliasing

• Improper Join condition

• Omitting a Join condition

• Subqueries -vs- Joins

• Question and Answer