|  | 级别: 初级 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 是 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 联系。
|
对本文的评价
|  | IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。 |