
致谢
如果没有许多人的帮助和支持,就不会有本书。我想感谢我的妈妈Connie,我把本书献给她。没有她的努力工作和奉献就不会有今天的我。妈妈,感谢您为我做的一切,我很感激您为我和哥哥所做的一切,成为您的儿子是我的荣幸。
我要感谢我的哥哥Joe。每次我暂停写作,从巴尔的摩回到家休息时,你让我知道与家人相处的时光是多么重要,让我意识到我应该尽快完成写作,以回到生活中更重要的事情中来。你是一个善良的人,我尊敬你。我非常为你自豪,为你是我的哥哥而感到自豪。
我要感谢我出色的未婚妻Georgia。没有你的支持,我不可能完成这本书。你和我一起见证了本书的创作过程。我知道这对你来说很困难,对我也一样。我白天忙于工作,晚上忙于写作,但你包容了这一切。我永远感激你的理解和支持。谢谢你,我爱你。
我要感谢我未来的岳母Kiki和岳父George。感谢你们在整个过程中对我的支持。无论我去你们家小住,还是去拜访,你们都让我觉得像在自己家里一样,我和Georgia每次吃得都很好。我要感谢Georgia的姊妹Anna和Kathy。每次回到家和大家一起放松休息的时候总是很开心,谢谢你们提供了一个让我和Georgia暂时放下本书的写作从巴尔的摩去和你们聚会的机会。
我要感谢我的编辑Jonathan Gennick,没有他就不会有本书。Jonathan,你理应因为本书收获排山倒海的赞誉。作为本书的编辑,你的付出超越了一个编辑通常的工作范畴,非常感谢你。从提供素材,到无数次的重写,即使面临即将到来的最后期限也要保持气氛幽默愉快,没有你我不可能完成本书。我很荣幸你是我的编辑,也很感激你给我的这个机会。你既是一名经验丰富的DBA,又是一位作者,很高兴能和你这样的技术专家合作。我不知道有多少编辑能够放下他们的工作改行做一名专业的DBA,但我相信Jonathan可以。作为一位有DBA 经验的编辑,你总是理解我要表达什么,即使有时候我不知道如何表达。O'Reilly有你这样的员工真的很幸运,我也很幸运有你作为我的编辑。
我想感谢Ales Spetic和Jonathan Gennick的作品Transact-SQL Cookbook。牛顿曾经说过:“如果说我看得比前人更远一点的话,那是因为我站在巨人的肩膀上。”在Transact-SQL Cookbook一书的致谢部分,Ales Spetic写下的一段话是对这句名言的最好证明,我觉得应该放在每一本SQL 书里。现在我把这段话也放在本书里。
我希望本书能为像Joe Celko、David Rozenshtein、Anatoly Abramovich、Eugine Berger、Iztik Ben-Gan、Richard Snodgrass等杰出作者的作品提供一点有益的补充。我花费了无数个夜晚研读他们的作品,我的知识几乎都源于他们的作品。当我写下这些内容的时候,我意识到,每当我花费一个晚上从他们的作品中学到点什么,他们当初必然花费了十个晚上用于将他们的知识凝结成连贯、可读的形式。能够以本书来回馈SQL 社区是我的荣幸。
我想感谢Mastering Oracle SQL一书的作者Sanjay Mishra,感谢他把我介绍给Jonathan。如果不是Sanjay,我可能不会认识Jonathan,也就不可能写作本书了。一封简单的邮件就能改变生活,这多么地不可思议啊。我要感谢David Rozenshtein,尤其要感谢他写了The Essence of SQL,这本书教会我用集合和SQL 的方式思考和解决问题。我想感谢David Rozenshtein、Anatoly Abramovich和Eugene Birger,他们的作品Optimizing Transact-SQL教会了我很多现在仍然经常用到的高级SQL 技巧。
我想感谢Wireless Generation公司的整个团队,这是一家优秀的公司,有着许多优秀的人才。非常感谢所有花时间来检查、讨论、提建议和帮助我完成本书的人:Jesse Davis、Joel Patterson、Philip Zee、Kevin Marshall、Doug Daniels、Otis Gospodnetic、Ken Gunn、John Stewart、Jim Abramson、Adam Mayer、Susan Lau、Alexis Le-Quoc以及Paul Feuer。我想感谢Maggie Ho,她仔细检查了我的书稿,并且针对附录A 给予了非常有用的反馈。我想感谢Chuck Van Buren和Gillian Gutenberg,他们给了我很有益的关于跑步的建议。每天早上的锻炼让我思路清晰、精神放松。如果不是每天晨练,我想我可能无法完成本书。我想感谢Steve Kang和Chad Levinson,当他们经过白天的辛苦工作,晚上想去Union Square的Heartland Brewery喝一杯或者吃烧烤的时候,却不得不和我没完没了地讨论各种SQL 技巧。我想感谢Aaron Boyd给予我的支持和善意帮助,最重要的还有他的那些好建议。Aaron是一个真诚、努力、直爽的人,公司因为有了他而变得更优秀。我想感谢Olivier Pomel给予的支持和帮助,尤其是那个根据若干行数据创建列表的DB2解决方案。Olivier贡献了那个解决方案给我,我甚至无须再找个DB2系统来做测试!我向他解释了WITH子句的工作原理,几分钟后他就拿出了你在本书中看到的那个解决方案。
Jonah Harris和David Rozenshtein还帮忙检查了手稿,并且提供了有益的反馈意见。ArunMarathe、Nuno Pinto do Souto和Andrew Odewahn参与了提纲和实例选择的讨论,而在那个时候本书尚未成形。非常感谢所有人。
我想感谢John Haydu和Oracle公司的MODEL子句开发团队,他们花时间检查了我为O'Reilly写的关于MODEL子句的文章,最终他们帮助我更深刻地理解了MODEL子句的工作原理。我想感谢Oracle公司的Tom Kyte,他允许我将他的TO_BASE函数改写成一个纯SQL 解决方案。微软公司的Bruno Denuit回答了我关于SQL Server 2005引入的窗口函数的问题。PostgreSQL 的Simon Riggs告诉了我PostgreSQL 中的SQL 新特性(非常感谢你,Simon。你让我知道哪些新特性会在什么时间发布出来,让我能在本书中收录其中的一部分,比如非常酷的GENERATE_SERIES函数,我认为这个函数相较于数据透视表提供了更优雅的解决方案)。
最后,同样重要的是,我想感谢Kay Young。当你才华横溢、对自己的工作充满激情的时候,你发现了同样才华横溢、充满激情的人,和这样的人一起工作简直太棒了。你在本书中看到的许多实例都来自于Wireless Generation公司每天遇到的实际问题。Kay是我的同事,我们一起创造了许多解决方案。Kay,我想感谢你,并让你知道我十分感激你在整个过程中给我的帮助。你给我提建议,帮我做语法纠错,还帮我写代码,你在本书的写作过程中发挥了至关重要的作用。和你一起工作太棒了,因为你,Wireless Generation会成为更好的公司。
——Anthony Molinaro
2005年9月