上一篇 | 下一篇

专家会谈: Sheryl Larsen 谈表表达式的威力

发布: 2008-7-01 13:42 | 作者: admin | 来源: | 查看: 0次

专家会谈: Sheryl Larsen 谈表表达式的威力

热 荐

【字体:小 大】

专家会谈: Sheryl Larsen 谈表表达式的威力

作者:- 文章来源:- 点击数:976 更新时间:2006-4-22

Sheryl M. Larsen

Sheryl M. Larsen, Inc., 2004 年 3 月

2004 年 3 月 SQL 专家 Sheryl Larsen 使用例子揭示了表表达式在灵活性和性能方面的实际威力。

简介

关于 SQL 技巧我有一个惊世骇俗的言论 —— 一般来讲,大部分 DB2® 开发人员都 落后了 7 年。我之所以这样说,是因为在过去 12 个月的时间里,我周游了全世界(大约 100,000 英里),并与 5,000 多名 DB2 开发人员谈到了有关高级 SQL 的话题。在与这些人的接触当中我发现到,大家都至少学过我演讲或讲座中涉及的一项新的 SQL 功能,或者旧的 SQL 功能的某种用法。然而,我发现没有得到充分利用的一项功能是 表表达式(table expressions)。它们在非 OS/390® 平台上被称为内联视图(in-line view),这些功能存在都已经有 7 年了。其实,这些不过是嵌入在 FROM 子句中用圆括号括起来的 SELECT 语句,但如果适当地应用这些表表达式,是可以产生很大威力的。我并不责怪开发人员缺乏有关这一功能的知识。我相信,这只是因为它们已经被发送到一两个 Java TM类,而没有发送到 DB2 Version xTransition 类。

虽然表表达式从语法上看像是一项简单的功能,但是它们却可以执行许多实用而强大的过程,这些过程包括: 预过滤全外连接(full outer joins)。 预过滤左/右连接中的替换 NULL 的表(null-supplying table)。 分离 GROUP BY 操作。 从已有的源生成数据。 使用表表达式帮助调优查询。

在这些表表达式的用途当中,有些您可能是熟悉的,而有些可能就不熟悉了。我将分别讨论表表达式每种用途的实例,以展示其强大性。

我应邀在全球范围内宣传 SQL 技巧。我相信您将至少学到表表达式的一种用法,而您所学到的东西将对您的应用产生一定的影响,所以还请继续读下去。

预过滤全外连接

最近几年来,随着工作文件的移除和并行性的加入,全外连接在性能方面已得到了增强。然而,其语法并没有得到像左连接和右连接所得到的那样的魔力,例如自动谓语下推和谓语传递闭包。 图 1中所显示的全外连接没有产生预期的结果,例如,给出在指定日期范围内的所有订单,不管这些订单是否具有少于 40 个字符的描述,以及给出所有少于 40 个字符的描述,而不管是否有与之对应的订单:

图 1. 该语句不会产生预期的结果

SELECT COALESCE(O.ORDER_NO, 'Order Number not Available') , COALESCE(D.DESC, 'Description not Available') FROM ORDER O FULL JOIN DESCRIPTIONS D ONO.ORDER_NO = D.ORDER_NO WHERE O.ORDER_DATE BETWEEN '1999-01-01' AND CURRENT DATE ANDLENGTH(D.DESC < 40)

字号: | 推荐给好友

评分:0

我来说两句