23
Mon, Dec
3 New Articles

TechTip: Full Outer Joins on DB2 for i5/OS

Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

If you are a System i application developer using SQL for data access, you may have encountered the need to implement a full outer join. Or perhaps you have implemented full outer joins on another database platform and are porting your application to support DB2 for i5/OS. In either case, a full outer join enables a query to return both matching and non-matching rows from both of the tables specified in the join. This is different from inner joins (which return only the matching rows), left outer joins (which return all rows from the table on the left, with null values for non-matching rows on the right), and right outer joins (which return all rows from the table on the right, with null values for non-matching rows on the left). Full outer joins are less common than the other three, but sometimes you might need this sort of behavior in your application reports. Unfortunately, as of V5R4, DB/2 for i5/OS does not support full outer joins. However, you can simulate this functionality.

To demonstrate how to implement full outer joins, let's walk through an example. Suppose your company has an application with three tables: Employees, Departments, and Customers. The format and data of the tables look something like the following:

(Note: Click images to enlarge.)

http://www.mcpressonline.com/articles/images/2002/Full%20Outer%20JoinV3--01120700.jpg

http://www.mcpressonline.com/articles/images/2002/Full%20Outer%20JoinV3--01120701.jpg

http://www.mcpressonline.com/articles/images/2002/Full%20Outer%20JoinV3--01120702.jpg

Now, suppose management wants a report that shows all department names and all employees in each department. This would be easily implemented using an inner join, such as this one:

SELECT departments.departmentname, employees.employeeName, 

employees.salesrepid 

FROM departments  

INNER JOIN employees   

ON departments.departmentNumber = employees.departmentNumber

The report would look like the following:

http://www.mcpressonline.com/articles/images/2002/Full%20Outer%20JoinV3--01120703.jpg

But this report shows only the intersection of rows of the two tables—that is, only the matching rows. What if management also wants the same report to include all departments that contain no employees? Piece of cake: Modify the query to use the following left outer join:

SELECT departments.departmentname, employees.employeeName, 

employees.salesrepID 

FROM departments  

LEFT OUTER JOIN employees   

ON departments.departmentNumber = employees.departmentNumber

The report now includes this information:
http://www.mcpressonline.com/articles/images/2002/Full%20Outer%20JoinV3--01120704.jpg

Management is still not satisfied. Now, they want to include all employees that are not in a valid department (yes, this company has some referential integrity issues). This is where it gets a bit dicey. Since the previous report used a left outer join to include all departments without an employee, adding this additional information to the report would also require a right outer join in the query. The combination of a left outer join and a right outer join in the same query is known as a full outer join, and as mentioned, is a type of join that is not currently supported on DB2 for i5/OS.

If the data was stored in a database that supported full outer joins, the query would look something like this:

SELECT departments.departmentname, employees.employeeName, 

employees.SalesRepID 

FROM departments  

FULL OUTER JOIN employees   

ON departments.departmentNumber = employees.departmentNumber

If your database is DB2 for i5/OS, don't worry. You can simulate the full outer join functionality by issuing a union against the results of a left outer join and a right exception join (in case you were wondering, issuing a union of the left outer join query with a right outer join query would not work because it would produce duplicates of all the matching rows in the result table). The simulation would look like the following query:

SELECT departments.departmentname, employees.employeeName, 

employees.salesrepid     

    FROM departments LEFT OUTER JOIN employees                          ON departments.departmentNumber = employees.departmentNumber   

    UNION ALL

SELECT departments.departmentname, employees.employeeName, 

employees.salesrepid    

    FROM departments  RIGHT EXCEPTION JOIN  employees    

    ON departments.departmentNumber = employees.departmentNumber

ORDER BY departmentname, employeeName

The report now looks like this:
http://www.mcpressonline.com/articles/images/2002/Full%20Outer%20JoinV3--01120705.jpg

You now have a report that shows all departments (including those with no employees), employees in those departments, and employees without a department. You may think your work is done. But not so fast: Management has one final request: Expand the report to include...

  • Customers assigned to the employees
  • Employees with no customers assigned to them
  • Customers not assigned to a valid sales representative

Including this information in the report requires adding another full outer join implementation to the query. After the necessary modifications have been made, the query looks like this:

WITH FOJ1 AS   

  (SELECT departments.departmentname AS dept_name, 

employees.employeeName AS emp_name, ''  AS cust_name, 

employees.SalesRepID AS rep_id     

    FROM departments LEFT OUTER JOIN employees            

           ON departments.departmentNumber = 

employees.departmentNumber      

    UNION ALL     

    SELECT departments.departmentname AS dept_name, 

employees.employeeName AS emp_name, ''  AS cust_name, 

employees.SalesRepID AS rep_id     

    FROM departments  RIGHT EXCEPTION JOIN  employees            

           ON departments.departmentNumber = 

employees.departmentNumber),   

  FOJ2 AS   

  (SELECT dept_name, emp_name, customers.customerName AS cust_name, 

rep_id      

    FROM FOJ1 LEFT OUTER JOIN customers            

           ON rep_id = customers.SalesRepID     

   UNION ALL     

   SELECT dept_name, emp_name, customers.customerName AS 

cust_name,  rep_id      

    FROM  foj1 RIGHT EXCEPTION JOIN customers            

          ON rep_id = customers.SalesRepID) 

SELECT dept_name, emp_name, rep_id, cust_name      

    FROM FOJ2 

ORDER BY dept_name, emp_name;

Implemented in this more complex full outer join example query are a couple of different techniques to note:

  • First, notice the use of the WITH keyword to create common table expressions. If you are unfamiliar with common table expressions, think of them as temporary views that exist only during the query's execution. This recommended approach helps reduce the query's complexity by minimizing the amount of text, especially when referenced multiple times in the query. It also helps explain the steps taking place: FOJ1 and FOJ2 are encapsulations of the full outer join steps. The different segments are color-coded to illustrate how each is mapped. Blue is the first full outer join, red is the second full outer join, and green is the final SELECT statement. The blue full outer join expression is executed first, and the results are referenced by FOJ1, which becomes the left table of the second outer join expression. The results of that expression are referenced as FOJ2 and are used as the table reference in the final SELECT statement.
  • The second thing to note is the use of the AS clause to rename columns. This will eliminate column ambiguity as the resulting columns advance through the expressions.

In addition, you should be aware of some performance considerations with full outer join simulations:

  • Avoid using SELECT *. Instead, select only those columns that will be used in a subsequent common table expression or by the query. This can improve the performance of the query by minimizing the amount of data that DB2 has to move around.
  • This simulation of a full outer will not be as efficient as a true full outer join that is supported natively by the database. Just be aware that you can proactively address potential performance issues by having a good indexing strategy. This means that you should at least have indexes built over all of the join columns. For more information on indexing considerations, refer to the white paper "Indexing and statistics strategies for DB2 for i5/OS."

Join Up!

Full outer joins provide a way for your reports to show all matching and non-matching rows in specified tables. And now you know how to simulate them on the System i.

Gene Cobb is a DB2 Technology Specialist on IBM's ISV Enablement team for System i. He has worked on IBM midrange systems since 1988, with 10 years in the IBM Client Technology Center (CTC), IBM Rochester. While in the CTC, he assisted customers with application design and development using RPG, DB2 for i5/OS, CallPath/400, and Lotus Domino. His current responsibilities include providing consulting services to System i developers, with special emphasis on application and database modernization.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: