Microsoft SQL Server 2005技术内幕:TSQL查询
〈Microsoft SQL Server 2005技术内幕〉系列丛书:《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》《Microsoft SQL Server 2005技术内幕:T-SQL查询》《Microsoft SQL Server 2005技术内幕:存储引擎》《Microsoft SQL Server 2005技术内幕:查询、调整和优化》本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL II>序Server如何把逻辑查询转换为可以高效返回结果的可执行的查询计划。人们更乐意完全独立地理解逻辑和物理概念。有许多方式可以逻辑地描述一个査询,但其屮一些方式比另一些方式更容易由 SQL Server奇询优化器转换为高效的计划。第4章到第8章是精通SQL查询的基础。在这几章中,你将学习用几行SQL查询文本来完成某些任务,而许多会用但并不精通SQL语言的人却要兴师动众地使用游标、临时表,更糟的是使用程序逻辑。为此,你需要学习如何通过SQL査询提出问题并让 SQL Server提供答案,而不是白口写代码来答复。你会发现这些章节包含了大量的实际示例及多种可选择的实现,并解释了什么时候应该选择哪种实现。最后,第9章是属于人师的领域。许多不精通SQL或关系模型的人都认为在关系世界巾无法表示图结构。尽管这显然不正确,但还是很少有对这一主题的全面介绍。最后一章描述了如何通过图和树的内在关系去建模。作者在这一章用常见的数据模型表示图和树的结构,并描述了处理这些结构的许多方法,其中应用了一些在 SQL Server2005中的新特性。严格来讲,《 Microsoft SQL Server2005技术内幕:TSQL查询》不是一本处方书( recipe book)。也不是用于从中把20来行TSQL代码复制并粘贴到自己程序的书。尽管它包含明确的解决方案和示例,《 Microsoft SQL Server2005技术内幕:TSQL查询》足一本学习如何编写SQ程序的书。通过阅读本书,你将学会用SQL语言完成你原本认为不可能完成的任务。如果今后遇到SQL方面的挑成战,而它又需要用到本书所提到的方法,你会发现你完全可以自己搞定。无论你是一位SQL语言和 Microsoft SQL Server的新手,还是对它们的理解已经达到一定程度,或者正在成为一位SQL专家,我相信这本书都将会进一步提高你的技能。Microsoft SQL Server是一个工具和平台。该产品开发团队中的每一个人都为能参与发布这样个伟人的产品而感到无比自豪。人们只有使用 SQL Server做出了成绩才会意识到它的直接价值,就像木匠使用一个工具完成一件精美的家具。作为一名熟练的木匠他需要知道这些方法和技术的基本原理,有敏锐的设计感,了解手上的工具。T乒熟悉他们的工具,知道如何以及什么时候使用它们,以及如何修理它们。《 Microsoft SQL Server2005技术内幕:TSQL查询》将向你展示SQL语言的基本原理。阅读本书,你将从大师们那甲学到如何设计优雅的SQL解决方案,并了解 Microsoft SQL Server作为一个工具在用简单优雅的方法实现解决方案时所独有的一些特性。David campbellGeneral Manager, Microsoft SQL Server: Strategy, Infrastructure Fll ArchitectureMicrosoft sql serve2005技大内:7SQL查询前言preface本书及其续篇—《 Inside microsoft SQL Server205: T-SQL Programminy》1介绍了 SQL Server2005中高级TSQL查询、查询优化及编程相关的知识。它们是为那些需要在 SQL Server2000和 SQL Server2005中编写和优化代码的开发人员和DBA而设计的。为简单起见,我把这两本书简称为《 Inside T- SQL Programming》和《 Inside T-SQLQuerying》。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。你会从中学到大量精湛的技巧,这些技巧会充实你的工具箱和编码技能,可以让你顺利地开发出高效的解决方案。这两本书将向你揭示基于集合( set -based)查询的强大威力,并解释为什么它比使用游标的过程化编程( procedural programming)更具优势。同时,它还会教你识别使用基于游标解决方案与基丁集合解决方案的优劣。书中还讲述了其他几种争议较多的构造( construct)—如临时表、动态执行、XML和NET集成—它们在其有强大功能的同时,也具有极大的风险。使用这些功能需要有非常丰富的编程经验。这两本书将教你如何明智、高效并安全地使用它们。本系列书的第一卷《 (Inside T-SQL Querying》介绍基于集合的查洵,我建议你先阅读这木书。第一卷《 Inside t- SQL Programming》侧重于过程编程,它假设你阅读过第…本书或具有足够的查询知识。Inside T-sQL Querying》的前三章介纲逻辑查询处理( logical query processing和物理查询处理( physical query processing)的基础知识,这是学习其他章节所必需的。第1章介绍逻辑查询处理。这章详细描述了査询处理中的各个逻辑阶段,SQL查询所独有的特征,为适应面向集合的关系编程环境而需要转变的特殊观念。1此书中文版已由电子工业出版社于2007年8月出版,书名为《 microsoft SQL Server205技术内幕:TSQ.程序设计》SRN:978-7-12104297-3。Mcos0 SQL Sen2005技术内慕:T-SQL查询IV}前言第2章讲述物理查询处理。它详细描述了 SQL Server引擎处理查询的方法,比较了物理査询处理和逻辑查询处理。这一章由 Lubor kollar执笔。 Lubor是 SQL Server2005的 group program manager,他的团队负责关系引擎的底层部分—从査询编译优化到耷询执行、事务的一致性、备份/恢复,以及髙可靠性。表和索引分区,数据库镜像,数据库快照,快照隔离,递归耷询和其他的TSQL査询实巩,数据厍引擎优化顾问,创建和维护联机索引等这些 SQL Server2005中的主要特性都有他的团队的参与。世界上很少有人能像 Lubor那样了解査询优化。我很荣幸能够讣优化器的设者之一来亲自解释它。第3章阐述查询优化的方法论,这是我们在 Solid Quality leaning总结出来的,而且已经应用到产品系统中。这一章还介绍了如何使用索引及分析执行计划。本章所提供的背景知识对于理解后面章节屮关于使用索引和分析执行的实践内容非常重要。它们是查询和查询优化的重要方面。后面的章节深入探讨高级查询和查询优化,代码的逻辑部分和物理部分相互交叉这些章节分别是:“子查询( Subquery)、表表达式( Table Expression)和排名函数( Rankingunctions“联接和集合操作”、“聚集( Aggregating)和旋转( Pivoting)数据”(包含节与CLR用户定义聚集函数有关的内容,作者为 Dejan Sarka)、“TOP和APPLY”、“数据修改”和“图( Graph)、树(Tre)、层次结构( Hierarchy)和递归查询( Recursive Queries)”附录A提供了·些纯粹的逻辑难题。你可以通过练习逻辑难题以提高你的逻辑技能。sL査询的本质就是处理逻辑。我认为练习纯逻辑对于提高用査询解决问题的能力是非常重要的。这些题目非常有意思,也非常具有挑战性,你可以和全家一起练习。它们是我在 SQL Server Magazine的TSQL专栏中发表的题目汇总。感谢 SQL Server杂志允许我和本书的读者分享这些题目本系列的第二卷《 Inside T- SQL Programming》介绍编程相关的T-SQL构造,以及XML处理和NET集成。所包含的主题有:数据类型相关的问题,包括XML和CLR用户定义类型(UDT)、临时表、游标、动态执行、视图;用户定义函数包括 CLR UDE;存储过程包括CLR存储过程;触发器包括DDL触发器和CLR触发器;事务包括新的快照隔离级别、错误处理,以及 Service broker书中讲述XM和NET集成的章节(“用户定义类型”、“用户定义函数”、“存储过程”和“触发器”)由 Dejan Sarka执笔。Dian是一位 SQL Server专家,他非常了解关系模型。他认为如果使用得当,这些新的构造可以适应关系模型,他在这方面的观点非常引人注目。让熟练掌择关系模型的专家米介绍该户品中这些倍受争议的领域,我认为这非常重要。所有的CLR代码示例都提供了C#和 Visual basic nett两个版本。最后一章介绍 Service broker,这章是由 Roger Wolter执笔。 Roger在 SQL ServerMicrosoft sql serve205按术内慕:T-SL查询前言团队中价责 Service broker的 progran manager。同样,没有比让组件的设计者亲自解释该组件更合适的了。最后, Steve Kass是本书的技术编辑。 Steve是个非常精明的人。他是 SQL ServerMVP,他在杜尔大学( Drew University教授数学。他精通 SQL Server和逻辑学,对本书做出了无法估量的贡献。对你,本书的读者,我想说的是,SQL对我来说是科学、逻辑和艺术。我已经为这两本书准备了很久,在这两本书中倾注了我所有的激情和多年的经验。但愿它们能让你觉得既实用又非常有趣,你会和我一样发现SQL是灵感之源。如果你有任何的意见或建议,我非常乐意聆听。你可以通过这个网站与我取得联系:加:/www.insidetsgl.com真诚的, ItzikMicrosoft SQL Server2005术內募:r-50L查淘致谢Acknowledgments多数读者会跳过致谢这一部分,许多作者在这·部分写得也很简短。在这里,我不想评价任何人。我猜想,这些作者可能担心如果流露感情会让人感觉矫揉造作,或者有失风度。是的,很多人为这两本书付出了心血,我不在乎别人怎么看这一节。我希望他们的贡献能够得到大家的认可!我最要感谢的是那些以各种方式参与本书或为本书作出贞献的人们。不少人在这个项目中花费了大量的时间,另外还有一些影响我和我的工作的人也在默默地影响着这本书本书的特约作者: Lubor kollar、 Dejan Sarka和 Roger Wolter,感谢你们参与这个项目并为本书奉献出你们的宝贵经验,我为与你们共事而感到光荣。 Lubor,你渊博的知识和激情是灵感之源。Deko,我的好朋友,我不断地从你那里学习了新的东西,你在数据库领域的独到见解令人着魔。 Roger,我非常感激你愿意为本书作出贡献。 Service broker你的孩子——为 SQL Server带来了一个前所未有的重要维度。我相信人们会发现它无法估量的价值,我渴望看到如何实现队列技术,它有着具大的潜力。Steve Kass,本书的技术编辑,我无法形容我是多么重视你的贡献。你才华横溢,令人敬佩,别人只能期望有你半的智慧和逻辑,而我提醒自己永远不要和你比智慧。你在这个项目上花费了大量的时间,并提出了大量有深刻见解的建议,是你帮助了我完成了此书。我希望在本书以后的版本中,你能作为正式的作者之David Campbell和 Lubor Kollar为本书作序,你们的工作和成就为我们中的许多人指明了方向。 SQL Server已经成长为一个成熟的充满魅力的产品,值得把我们全部的职业生涯致力于对她的研究,并倾注我们的激情。Microsoft sal serve2005发术内:7SQL查询ⅤII≯致谢感谢你们为本书作序,这是一种荣耀!对于所有的贡献者,我期待着将来与他们展开更多的合作。而我,已经开始着手构思本书的下一个版本非常感谢 Microsoft Press的团队: Ben ryan、 Kristine Haugseth、 Roger Leblanc,以及所有参与制作本书的人。Ben,非常抱歉,我想让本书包含每个细节,这让你非常辛苦。尽善尽美和光明磊落是我的两个座右铭,尽管一个人只能努力完成前者,但我相信,只要遵循这一点,最终的结果一定会更好,而且我相信没有其他的捷径。谢谢你如此用心。Kristine,你太伟大了!你的虔诚和专业使得这个项目如此精彩。在个人层次上,我感觉又结识了·位新朋友。 Roger,你在编辑本书时花费了大量时间,谢谢你帮助提高它的质量。我相信, Microsoft press的许多人都默默地做了大量工作,才能使这两书成功间世我要感谢 Kalen Delaney Kalen的上一个版本的《 KInside Microsoft SQL Server》对我来说是一部圣经,我期待着读到她介绍 SQL Server2005内幕的新作。同时,也正是 Kalen邀请我编写该系列的TSQL卷,现在该产品已经变得如此庞大。很多人通过非正式的评论为本书提供了极为有价值的反馈。其中包括 SQL Server开发团队的成员, Solid Quality Learning的顾问,以及许多MⅤP。你们本不必这样,但你们心甘情縣,我从心底感激你们。SQL Server Magazine团队:你就是我的家。我们已经在一起奋斗了多年,一起成长,起进步。我确定,不只是我一个人相信《 SQL Server Magazine》在 SQL Server领域是世界上最好的杂志。我的这两本书在很大程度上要归功于我在与大家共事时所学到的东西我的朋友、伙伴,以及 Solid Quality Learning的同事:在我的职业生涯以及个人生活中,与你们共事是最幸福的。你们中的很多人通过共同努力为这两本书作出了巨大的贞献,这些都反映在书中。我不断地掐自己,以确信这不是在做梦。 Fernando:大家一致认为你是 Solid quality Learning恢复生机的原因,没有你就没有它的今天。你的见解耐心、殷勤、激情和热心鼓舞着我们所有人。我内心对你的感激之情和对我们之间友谊的重视是无法用言语来形容的。我认为,人知识和能力的形成有三个关键因素:老师、学生和激情。激情是自身所具备的种子,我对SQL充满激情。我庆幸有自己伟大的老师 Lubor kollar和 SenseiLeon pantanowitz( Yehuda)。 Lubor,你的激情和渊博的SQL及最优化的知识,对新知识的探寻,你的谦虚,敏锐的目光,对逻辑的热爱鼓舞着我。我很感激能和你相识,我会珍惜我们的友谊。 Sensei yehuda,尽管在你看来你的世界与SQL毫无关系,但对我而言,它包含了一切。你的建议、教诲、指导和友好帮助了我,你和 Sensei Higaonna是我的动力,你们证明了没有不可能的事情,前提是只要我们坚持不懈地追求完美,我们就Microsoft sol ser2005技术内蔡:T-SQL查询致谢←IX改进并实现伟大的目标。关注细节,永不放弃,控制自己,诚信,处理生活中的丑陋部分……这里只列出了在很多方面帮助过我的建议。长时间写作是极为辛苦的,但我要把能完成这项任务归功于你。我一直把这些经历看作是长期的GoJu训练我的学生:我通过教学学到了很多东西,而且以后还会继续学习新的东西。实际上,教学是我真正的激情,你们是我写这本书的主要考虑因素。在最近的几年里,我一直忙于巡回教学活动。我很少在家,牺牲了很多东西。我真正的希望是在阅读本书后,我们可以在课堂上讨论,这是学习和实践SQL的最佳场所我的父母:做这件事让我唯一感到后悔的是,它让我没有时间陪你们。我还记得在我们三个月都没有见面之后,你们参加我的关于 SQL Server2005分区表和索引的会议时的情景。我要向你们道歉,希望你们能理解我对梦想的追求。爸,谢谢你在数学和逻辑学方面对我的帮助。妈,当我父亲在越洋电话屮给我出一些难题时,不要再向他大喊大叫了,他忍不住自己,我也一样。Lilach,我的爱人和精神支柱:当我离家在外时,唯一能保持我神志清楚的是因为有你。其他的话我要单独对你说,我可不想在读者面前出丑。Microsoft SQL Server2005技术內票:7-SOL查询引言Introduction这本书的目标读者是需要编写或检查TSQL代码的有经验的TSQL程序员和数据库专业人员。本书讲述高级TSQL查询,它假设你已经熟练掌握与其相关的初级和中级技能,可以进一步学习更高级的技能。本书的组织本书是系列书的第一卷。它讲述高级TQL查洵。该系列的第二卷—《 MicrosoftSQL Server2005技术内幕:T-SQL程序设计》—讲述高级TSQL编程。第二卷假设你已经阅读过第一卷,或者具有相应的背景知识。关于这两本书的组织的详细信息,请参考本书的前言。系统要求你需要配置下面的硬件和软件以生成和运行本书中的代码示例:■安装了 Service Pack2的 Microsoft windows xp,安装了 Service pack1的Microsoft windows server2003,或安装了 Service pack4的 Microsoft windows2000。Microsoft SQL Server2005标准版、开发版或企业版。Microsoft Visual Studio2005标准版或 Microsoft visual studio2005专业版奔腾600MHz处理器或兼容处理器(推荐奔腾1-GHz处理器)512MB内存(推荐1GB或更高)至少256色的显示器,800*600或更高的分辨率(推荐使用1024*768分辨率和16位色)。CD-ROM或 DVD-ROM驱动器Microsoft鼠标或其他兼容定点设备。Microsoft sol server2005技术内幕:7-S∠查询
用户评论