自 SQL 构造在 DB2 for OS/390® V6 中修订之后,如果我相信有一种 SQL 构造已经造成了最多的疑惑,那一定就是外连接。
V6 扩展了在 ON 子句中编写谓词的能力,并引入了大量其它的优化和查询改写方面的增强。虽然增强语法的确增加了外连接的潜在用法,但这也意味着需要去理解更多的内容。而语法也与它在 UNIX®、Linux、Windows 和 OS/2® 平台上的兄弟更加接近,使得在 DB2 系列中更容易保持 SQL 编码的一致性。
这篇文章由两个部分组成,我试图在文章中为编写外连接总结出一个指南以实现两个目的:
- 最重要的目标是获得正确的结果。
- 其次,考虑用不同的方法编写谓词的性能含义。
第 1 部分是关于外连接的更简单构造,就在 ON 和 Where 子句中编写谓词的效果进行简单的比较。在第 2 部分,我会涉及更复杂的主题,如简化外连接和嵌套外连接。
本文中的例子使用了取自 DB2 通用数据库(UDB)(非 OS/390)样本数据库的摘录。 图 1 中的数据是一整张表的子集。为了满足所有外连接中组合的需要,Project 表中含有 PROJNO = 'IF2000'
的行已被更新为设置 DEPTNO = 'E01'
。
对于 z/OS® 和 OS/390 的用户,表名将有所不同:
工作站上 DB2 表的名称 | OS/390 和 z/OS 版本的 DB2 表的名称 |
EMPLOYEE | EMP |
DEPARTMENT | DEPT |
PROJECT | PROJ |
Tags: 面试题