IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

请教专家 Terry Purcell

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Terry Purcell, 高级顾问, Yevich,Lawson & Associates

2002 年 7 月 01 日

请教专家 Terry Purcell

DB2DD 读者:感谢您对出现在 DB2 开发者园地上的外连接的解释。 我的问题是:当表很大(有许多行)时,我如何决定是应该使用内连接还是外(左或右)连接呢?

Terry Purcell:编码 INNER(内)连接还是 OUTER(外)连接与行数无关, 更多地是取决于被连接的每个表中的数据是否是必需的。

例如,假设我们有两个表:PARTS 和 SUPPLIERS。如果我们的业务规则规定: 仅当在 SUPPLIERS 表中有相应的 SUPPLIER 时, 才必须将 PARTS 存储在 PARTS 表中,那么我们将如下所示的编码内连接:

SELECT P.PART_NUM, P.PART_DESC, S.SUPPLIER_NUM
FROM PARTS P INNER JOIN SUPPLIER S
ON P.PART_NUM = S.PART_NUM

然而,如果不管零件是否有供应商,都可以存储有关零件的信息(因而供应商详细信息是可选的), 则需要编码 LEFT JOIN。如果我们编码了 INNER JOIN,那么将不会返回那些没有供应商的零件。LEFT JOIN 查询将是:

SELECT P.PART_NUM, P.PART_DESC, S.SUPPLIER_NUM
FROM PARTS P LEFT JOIN SUPPLIER S
ON P.PART_NUM = S.PART_NUM

如果不管零件是否有供应商,都可以存储部件,并且不管供应商是否提供任何零件,也可以存储供应商,那么这将是 FULL JOIN,如下所示:

SELECT P.PART_NUM, P.PART_DESC, S.SUPPLIER_NUM
FROM PARTS P FULL JOIN SUPPLIER S
ON P.PART_NUM = S.PART_NUM

因此,连接类型不是由每次查询返回的行数规定的; 而是由您正在连接的每个表中出现的数据是必需的还是可选的决定的。

我希望上述内容能回答您的问题。



关于作者

Terry Purcell 的照片

Terry Purcell 是 YL&A(Yevich,Lawson & Associates)的高级顾问,并且是业界公认的 DB2 SQL 权威。Terry 出席过许多有关 Complex SQL 的会议,并发表过许多有关 SQL 性能的文章,包括有关 Star Joins 的 IBM 白皮书。 他是 DB2 Performance Journal 的定期作者,而且经常对 DB2 List Server 投稿。Terry 从事 DB2 的数据库管理和应用程序开发已经有十多年了。他还是 IBM 认证的 DB2 V7 Database Administration for OS/390® 的解决方案专家,并且是 IBM DB2 金牌顾问计划的成员。可以通过 Terry_Purcell@ylassoc.com与 Terry 联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款