fhg
Volume 7, Number 41 -- November 28, 2007

ON vs. ON

Published: November 28, 2007

Hey, Professional:

In ON vs. WHERE, I demonstrated that an outer join yields different results depending on whether you place a selection expression in the ON clause or the WHERE clause for a secondary file. Now I want to follow up on that tip by looking at the difference between the ON and WHERE clauses for a primary table.

Here's the invoicing data I used in the previous tip. We have header information:

SELECT H.* FROM INVHDR AS H

Invoice  Company   Customer      Date
47566      1           44     2004-05-03
47567      2            5     2004-05-03
47568      1        10001     2004-05-03
47569      7          777     2004-05-03
47570      7          777     2004-05-04
47571      2            5     2004-05-04

And we have related details:

SELECT D.* FROM INVDTL AS D

Invoice   Line   Item      Price  Quantity
47566      1     AB1441    25.00      3
47566      2     JJ9999    20.00      4
47567      1     DN0120      .35    800
47569      1     DC2984    12.50      2
47570      1     MI8830      .10     10
47570      2     AB1441    24.00    100
47571      1     AJ7644    15.00      1

Notice that the following query contains a selection expression in the WHERE clause:

SELECT H.INVOICE, H.COMPANY, H.CUSTNBR, H.INVDATE,
       D.LINE, D.ITEM, D.QTY                      
  FROM INVHDR AS H                                
  LEFT JOIN INVDTL AS D                           
    ON H.INVOICE = D.INVOICE                      
 WHERE H.COMPANY = 1                              

Invoice Company Customer   Date     Line  Item   Quantity
47566       1       44   2004-05-03   1   AB1441     3 
47566       1       44   2004-05-03   2   JJ9999     4 
47568       1    10001   2004-05-03   -   -          -

The result set includes data for company one invoices only. Watch what happens if I move the selection expression to the ON clause:

SELECT H.INVOICE, H.COMPANY, H.CUSTNBR, H.INVDATE,
       D.LINE, D.ITEM, D.QTY                      
  FROM INVHDR AS H                                
  LEFT JOIN INVDTL AS D                           
    ON H.INVOICE = D.INVOICE                      
   AND H.COMPANY = 1

Invoice Company Customer   Date     Line  Item   Quantity
47566       1       44   2004-05-03   1   AB1441     3  
47566       1       44   2004-05-03   2   JJ9999     4  
47567       2        5   2004-05-03   -   -          - 
47568       1    10001   2004-05-03   -   -          - 
47569       7      777   2004-05-03   -   -          - 
47570       7      777   2004-05-04   -   -          - 
47571       2        5   2004-05-04   -   -          -

This query differs from the previous one in that all invoice headers are in the resulting table, not just those for company number one. Notice that details are null for other companies, even though some of those invoices have corresponding rows in the details file. What’s going on?

Here’s the difference. When a selection expression is placed in the WHERE clause, the resulting table is created. Then the filter is applied to select the rows that are to be returned in the result set. When a selection expression is placed in the ON clause of an outer join, the selection expression limits the rows that will take part in the join, but for a primary table, the selection expression does not limit the rows that will be placed in the result set. In this case, all header rows are placed in the result set, but only company one header rows are allowed to join to the details.

Contrast the use of an expression involving a field of the primary file with the use of an expression involving a field of the secondary file. Here's a query from the previous article. The ON clause refers to the item number, which is stored in the secondary file:

SELECT H.INVOICE, H.COMPANY, H.CUSTNBR, H.INVDATE,
       D.LINE, D.ITEM, D.QTY                      
  FROM INVHDR AS H                                
  LEFT JOIN INVDTL AS D                           
    ON H.INVOICE = D.INVOICE                      
   AND D.ITEM = 'AB1441'                          

47566       1         44   2004-05-03     1   AB1441     3  
47567       2          5   2004-05-03      -  -           - 
47568       1      10001   2004-05-03      -  -           - 
47569       7        777   2004-05-03      -  -           - 
47570       7        777   2004-05-04     2   AB1441   100  
47571       2          5   2004-05-04      -  -           -

A selection expression in the ON clause does not behave identically for primary and secondary tables in an outer join. In both cases, ON restricts the rows that are allowed to participate in the join. However, all rows from the primary file, but not all secondary rows, are returned through the result set.

--Ted


RELATED STORY

ON vs. WHERE



                     Post this story to del.icio.us
               Post this story to Digg
    Post this story to Slashdot


Sponsored By
HELP/SYSTEMS

Discover Robot/SECURITY, the i5/OS security monitoring
and auditing software, from Help/Systems

                                                            · Profile Exchange
                                                            · Exit Point Monitoring
                                                            · System Authority Auditing
                                                            · QAUDJRN Monitoring
                                                            · System Security Analysis

Robot/SECURITY is the only security software that
combines five critical System i security tools in one package.

Visit our Web site at http://www.helpsystems.com/400g-sec/
to learn more about Robot/SECURITY.


Senior Technical Editor: Ted Holt
Technical Editors: Howard Arner, Joe Hertvik, Shannon O'Donnell, Kevin Vandever
Contributing Technical Editors: Joel Cochran, Wayne O. Evans, Raymond Everhart,
Bruce Guetzkow, Brian Kelly, Marc Logemann, David Morris
Publisher and Advertising Director: Jenny Thomas
Advertising Sales Representative: Kim Reed
Contact the Editors: To contact anyone on the IT Jungle Team
Go to our contacts page and send us a message.

Sponsored Links

RJS Software Systems:  Make your office paperless with WebDocs
COMMON:  Join us at the annual 2008 conference, March 30 - April 3, in Nashville, Tennessee
LANSA:  Hear how System i shops achieved modernization with RAMP


 

IT Jungle Store Top Book Picks

The System i RPG & RPG IV Tutorial and Lab Exercises: List Price, $59.95
The System i Pocket RPG & RPG IV Guide: List Price, $69.95
The iSeries Pocket Database Guide: List Price, $59.00
The iSeries Pocket Developers' Guide: List Price, $59.00
The iSeries Pocket SQL Guide: List Price, $59.00
The iSeries Pocket Query Guide: List Price, $49.00
The iSeries Pocket WebFacing Primer: List Price, $39.00
Migrating to WebSphere Express for iSeries: List Price, $49.00
iSeries Express Web Implementer's Guide: List Price, $59.00
Getting Started with WebSphere Development Studio for iSeries: List Price, $79.95
Getting Started With WebSphere Development Studio Client for iSeries: List Price, $89.00
Getting Started with WebSphere Express for iSeries: List Price, $49.00
WebFacing Application Design and Development Guide: List Price, $55.00
Can the AS/400 Survive IBM?: List Price, $49.00
The All-Everything Machine: List Price, $29.95
Chip Wars: List Price, $29.95


 
The Four Hundred
Redefining Security the New Goal of Former i5/OS Security Architect

The System i Fourth Quarter Sales Strategy

Power Systems Division Eyes Cognos Deal; Business Systems Shrugs

As I See It: The Sick Guys in Your Wallet

The Linux Beacon
Blade Servers Make It to the Top HPC Sites

Red Hat and Platform Computing Partner for Supercomputing

HP Closes Out Fiscal 2007 with a Strong Finish

Be My Guest

Four Hundred Stuff
NetManage Fixes Printing, Performance Issues in Web-Based Emulation

Verastream Streamlines Host Access for Hospital Billing Specialist

Help/Systems Extends Robot to Linux Servers

VAI Gives Retailers a Windows Option for Backup

Big Iron
IBM Previews z/VSE V4.2, Releases DB2 Server V7.5

Top Mainframe Stories From Around the Web

Chats, Webinars, Seminars, Shows, and Other Happenings

System i PTF Guide
November 24, 2007: Volume 9, Number 46

November 17, 2007: Volume 9, Number 45

November 10, 2007: Volume 9, Number 45

November 3, 2007: Volume 9, Number 44

October 27, 2007: Volume 9, Number 43

October 20, 2007: Volume 9, Number 42

The Windows Observer
Windows Server 2008 Pricing and Packaging Set by Microsoft

'Viridian' Hypervisor Gains Formal Name: Hyper-V

Intel Announces First "Penryn" Xeon Processors

Microsoft Makes Gains in HPC Market

The Unix Guardian
Solaris Conversion Rate: Sun Sheds Some Light

Blade Servers Make It to the Top HPC Sites

Intel Announces First "Penryn" Xeon Processors

The Blue Cloud Is IBM's Commercial Cloud Computing

Four Hundred Monitor
Four Hundred Monitor's
Full iSeries Events Calendar

THIS ISSUE SPONSORED BY:

ProData Computer Services
Help/Systems
Guild Companies


Printer Friendly Version


TABLE OF CONTENTS
System i Developers and .NET 2.0, Part 2: Web Development Using ASP.NET AJAX

ON vs. ON

Admin Alert: Basic Tools for the System i Admin Tool Chest

Four Hundred Guru

BACK ISSUES

From the IT Jungle Forums
Choose Logical File Format with SQL

IBM 6400 on LPT1 prints junk

Reallocate disk space from one LPAR to another

How to retrieve a workstation ID

Finding *OUTFILE Template Files





 
Subscription Information:
You can unsubscribe, change your email address, or sign up for any of IT Jungle's free e-newsletters through our Web site at http://www.itjungle.com/sub/subscribe.html.

Copyright © 1996-2008 Guild Companies, Inc. All Rights Reserved.
Guild Companies, Inc., 50 Park Terrace East, Suite 8F, New York, NY 10034

Privacy Statement