科技>计算机>数据库
EffectiveSQL:编写高质量SQL语句的61条有效方法(英文版)

EffectiveSQL:编写高质量SQL语句的61条有效方法(英文版)"

作者:(法国)JohnL.Viescas(约翰·威克斯),(加拿大)DouglasJ.Steele(道格拉斯·斯蒂尔),(美国)BenG.Clothier(本·克洛希尔)
ISBN:9787121322846
定价:¥89.0
字数:430千字
页数:348
出版时间:2017-08
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书全面系统地介绍了SQL语言各方面的基础知识以及一些高级特性,包括SQL数据语言、SQL方案语言、数据集操作、子查询以及内建函数与条件逻辑等内容。书中每个章节讲述一个相对独立的主题,并提供了相关示例和练习。涵盖了市场上常用数据库版本(MySQL 、Oracle 及Microsoft SQL Server等 )。同时针对开发基于数据库的应用程序,以及日常的数据库系统管理,本书都展现了大量经过实践检验的方法和技巧。读者可以通过对本书循序渐进地学习快速掌握SQL语言,也可以在实际工作中遇到问题时直接翻阅本书中的相关章节以获取解决方案。

前言

本书赞誉 本书的写作团队实至名归,给我留下了深刻的印象,这么说并不足以表达我对本书的 喜爱,应当说我被这本书震惊了。大多数关于SQL 的书只会告诉读者如何去写SQL,而本 书则会告诉读者为什么这样写;大多数关于SQL 的书会将数据库设计与实现分开阐述,而 本书则将数据库设计的考量贯穿于SQL 的各种使用场景;大多数关于SQL 的书只会在阅览 完毕后放在书架上落灰,而本书将成为我的伴手读物。 Roger Carlson,微软Access MVP (1996–2015 年) 写基本的SQL 很简单,但是写功能完备且运行高效的SQL 就没那么容易了,尤其是对 于那些有着复杂需求的关键业务系统。不过现在有了这本优秀的SQL 读物,无论读者正在 使用哪种数据库管理系统,都可以快速上手编写高质量的SQL。 Craig S. Mullins,Mullins Consulting,Inc.,DB2 金牌顾问,IBM 数据分析师 这是一本关于SQL 的佳作。它采用深入浅出的叙述方式,使得新手也可以理解其内涵。 同时,也包含了很多高级的SQL 窍门和技巧,能够让SQL 老手也受益匪浅。因此,这本书 适合任何程度的读者,那些对数据库设计、管理以及SQL 编程方面有较高要求的读者都应 该阅读这本书。 Graham Mandeno,数据库技术顾问,微软MVP (1996–2015 年) 对于关系型数据库和基于SQL 的数据库的设计者和开发者来说,这本书是绝佳的资 源——一部深入浅出的读物,书中有丰富的示例,完美地结合了设计理论与编程实现,这 些例子涵盖了当今最常用的数据库实现,其中包括Oracle、DB2、SQL Server、MySQL、 PostgreSQL 等。本书用成熟的技术引导读者深入学习SQL,比如在关于分层数据和统计表 的讲解中,包含了其内部实现,以及在使用GROUP BY、EXISTS、IN、关联或非关联子查 询、窗口函数、各种连接语句时的性能。此外,书中有不少独有的有趣示例,也使得这本 书在SQL 类著作中格外闪耀。 Tim Quinlan,数据库架构师,Oracle 认证DBA iv 本书赞誉 对于那些困在多种SQL 方言之中急需帮助的读者来说,这本书能够将你从一团乱麻中 拉出来。本书从SQL 的各种方言中分离出公有的独立成分,能够让读者做到“阅后即用”。 我从1992 年就开始使用各种SQL 实现,已经算是SQL 方言方面的老手了,但依旧能够从 这本书中学到不少知识。 Tom Moreau 博士,SQL Server MVP(2001–2012 年) 这本书在描述SQL 的使用方面完美地做到了内容丰富、叙述简洁、易于理解—— 它通 过展现如何使用SQL 解决现实世界中的需求问题来告诉读者构造SQL 查询的方法,并阐明 了“数据如何存储”与“数据如何查询”之间的联系,解释了从数据库中准确且高效地取 得结果集的全过程。 Kenneth D. Snell 博士,数据库技术顾问,前微软Access MVP 这本书填补了一个知识断档—— 新手DBA 如何成长为高级DBA—— 本书就像是成长 过程的路线图、行动指南、罗塞塔石碑,帮助读者从基础SQL 应用者变为高阶使用者的教练。 与其磕磕绊绊地重新发明轮子,或是迷迷糊糊地摸索数据库的正确使用方法,不如对自己 好一点—— 把这本书带回家。你不仅能够了解到可能需要多年摸索才能见到的各种SQL 的 实现技巧,还能深入理解数据库供应商各种实现的原因。在你学习SQL 的旅途中,这本书 能够为你节省出很多时间和精力。 Dave Stokes,MySQL 社区管理员,就职于甲骨文公司 对于一个严肃的数据库开发人员,本书属于必读书目。它手把手地告诉读者,SQL 解 决现实问题的强大能力。本书的作者们使用了浅显易懂的表达方式告诉读者每一种解决方 案的利与弊。我们都知道,一个查询有很多种实现方式,而这本书将告诉读者为什么某一 种实现比别的实现更高效。对于这本书,我最钟爱的部分莫过于每一章最后的总结,它会 再次向读者强调要点与陷阱。我要向所有的数据库开发人员推荐这本书。 Leo(theDBguyTM),UtterAccess 社区主席,微软Access MVP 我认为这本书不仅适合开发人员,而且适合数据库管理员,它能够告诉读者,在实现 一个特定需求时,如何通过多种方式编写高效的SQL 实现。我认为,这是一本数据库相关 从业人员的必读书。推荐这本书的另一个理由,是它涵盖了几乎所有常见的RDBMS 应用 场景,因此,对于那些需要将一种RDBMS 实现方言翻译为另一种方言的用户,本书就是 你们要找的那本指南。我衷心祝贺本书的作者们,你们的作品无与伦比。 Vivek Sharma,甲骨文公司Oracle 核心技术与混合云解决方案部门特邀技术专家 感谢Suzanne,永远永远…… ——John Viescas 感谢我美丽聪明的妻子Louise 在我写这本书期间对我的无限包容! ——Doug Steele 感谢Suzanne 和Harold,没有你们的支持这本书是无法问世的! ——Ben Clothier 序言 SQL 在成为国际标准数据库语言的30 余年里,已经在众多数据库产品中得以实现。 现在SQL 无处不在,高性能事务处理系统、智能手机应用程序以及后端Web 接口程序中 都在使用SQL 语言。甚至有一类NoSQL 数据库,其共同特点是(或曾经是)它们不使用 SQL。随着NoSQL 数据库增加了SQL 语言接口,现在NoSQL 中“No”的意思是“不仅仅 是”SQL(Not Only SQL)。 由于SQL 的普遍性,你很可能在很多产品和系统环境中都使用过SQL。有一个针对 SQL 语言的诟病(也许是对的),虽然SQL 语言在不同的数据库产品中是类似的,但还是 有细微的差别。这些差别源于对SQL 标准的不同理解、不同开发模式或者不同的底层架构。 通过实例来对比不同产品SQL 方言中的细微差别,对于理解这些SQL 差异是非常有用的。 本书为SQL 查询提供了一个罗塞塔石碑(解释古埃及象形文字的可靠线索),向我们展示 了如何使用不同的SQL 方言编写SQL 查询并解释了SQL 方言中的差异。 我经常强调最好的学习方法是从错误中学习。也就是说,那些懂得从自己和别人的错 误中学习的人,才能够获得更多。本书包含了一些不完整、不正确的SQL 查询实例,并向 读者解释了这些SQL 不完整、不正确的原因,以此通过别人的错误进行学习。 SQL 是一种功能强大且复杂的数据库语言。作为美国和国际SQL 标准委员会的数据库 顾问和参与者,我见过很多查询没有充分利用SQL 的能力。充分理解SQL 的语言能力以及 复杂性的程序开发人员,不仅可以充分利用SQL 的功能构建性能良好的应用程序,还能高 效地开发应用程序。本书提供了61 个具体实例来帮助大家学习。 Keith W. Hare JCC 咨询有限公司高级顾问 美国INCITS dm32.2—— SQL 标准委员会副主席 ISO/IEC JTC1 SC32 WG3 国际SQL 标准委员会召集人 致谢 一位著名的政治家曾经说过:“抚养一个孩子需要一个村庄”。如果你曾经写过一本书, 不管是技术方面的还是其他方面的,你会明白把你的“孩子”变成一本成功的书需要一个 伟大的团队。 首先,非常感谢我们的策划编辑和项目经理Trina MacDonald。Trina 不仅缠着John 使 其坚持将SQL Queries for Mere Mortals 一书打造成为Effectiue Software Development 系列丛 书,还带领着团队度过了重重难关。John 组建了一支真正国际化的团队来完成这本书,感 谢大家工作上的不辞辛劳,尤为感谢Tom Wickerath 在项目前后期给予的协助和技术审校。 Trina 向我们推荐了本书的内容指导Songlin Qiu,在他的帮助下我们了解了编写 Effectiue Software Development 系列丛书的各个细节,非常感谢Songlin 给予我们的指导。 Trina 精心挑选了庞大的技术编辑团队,他们辛苦地审核和调试了我们的数百个例子, 并提供了很多有价值的反馈。感谢负责MySQL 的Morgan Tocker 和Dave Stokes;感谢负责 PostgreSQL 的Richard Broersma Jr.;感谢负责IBM DB2 和Oracle 的Craig Mullins;感谢负责 Oracle 的Vivek Sharma。 在写书的过程中,系列丛书编辑、畅销书Effective C++, Third Edition 的作者Scott Meyers,也参与到我们的团队中,在如何把本书变成Effectiue Software Development 系列丛 书方面给了我们很多宝贵的建议。希望本书可以成为Effectiue Software Development 系列丛 书的典范。 Julie Nahil、Anna Popick 的制作团队和Barbara Wood 帮助我们使书符合出版的要求。我 们不能没有你们! 最后,非常感谢我们的家庭忍受我们在漫长的夜晚写稿和调试例子。他们持久的耐心 值得大书特书! John Viescas 法国,巴黎 Douglas Steele 加拿大,安大略省,圣凯瑟琳 Ben Clothier 美国,得克萨斯州,康弗斯 关于作者 John L. Viescas 是一位有着超过45 年从业经验的独立数据库顾问。他的职业 生涯从系统分析师开始,为IBM 大型机系统设计大型数据库应用。他在达拉 斯的应用数据研究中心工作了6 年,在那里他带领30 多名员工负责IBM 大 型计算机数据库产品的研究、开发以及客户支持工作。在应用数据研究工作 期间,John 完成了达拉斯得克萨斯大学的商业金融学位,并以优异的成绩毕业。 John 1988 年加入Tandem 计算机公司,在那里他负责在Tandem 公司美国西部销售 区开发和实施营销方案的数据库。他开发并交付了用于技术研讨会的关系型数据库管理 系统——NonStop SQL。John 1989 年写了他的第一本书,A Quick Reference Guide to SQL (Microsoft Press,1989 年),该书是一本对比了ANSI-86 SQL 标准、IBM 的DB2、微软 的SQL Server、甲骨文公司的Oracle,以及Tandem 公司的NonStop SQL 之间的语法相似 性的研究类书籍。他于1992 年从Tandem 公司公休时写了Running Microsoft? Access 第 1 版(Microsoft Press,1992 年)。他已经写了4 个版本的Running Microsoft? Access,以 及Running 系列的后续作品——3 个版本的Microsoft Office Access Inside Out(Microsoft Press,2003、2007、2010 年)和Building Microsoft ? Access Applications(Microsoft Press, 2005 年)。他也是畅销书籍SQL Queries for Mere Mortals? (Addison Wesley,2014 年) 第 3 版的作者。John 目前保持着连续多年被微软授予微软数据库管理系统最有价值专家(MVP, Most Valuable Professional)的纪录(1993 年至2015 年)。John 与他的妻子在法国巴黎定居 了30 多年。 Douglas J. Steele 从事包括大型机和个人机在内的计算机相关工作超过45 年 (是的,他一开始是用穿孔卡的!)。在2012 年退休前,他在一家大型国际 石油公司工作了31 年。尽管他职业生涯的高光时刻是通过发展SCCM 任务 序列将Windows 7 推广到全球超过10 万台电脑上,但是数据库和数据建模是 他的主要工作方向。 Douglas 被微软认证为最有价值专家(MVP)超过17 年,他撰写了大量关于Access 数据库的文章,Douglas 是Microsoft ? Access ? Solutions: Tips, Tricks, and Secrets from Microsoft Access MVPs(Wiley,2010 年)的合著者,也是很多书的技术编辑。 x 关于作者 Douglas 是滑铁卢大学系统设计工程硕士,专注于设计非传统电脑用户的用户界面研究。(当 然,在20 世纪70 年代末,很少有人是传统的电脑用户!)他的专业研究源于他的音乐背景(他 拥有多伦多英国皇家音乐学院钢琴演奏准学士学位)。他还痴迷于啤酒并毕业于尼亚加拉学院 酿酒及啤酒厂操作管理专业(滨湖尼亚加拉,安大略省,加拿大)。 Douglas 和他的妻子在加拿大安大略省圣凯瑟琳定居超过34 年。读者可以通过邮箱 mvphelp@gmail.com 联系Douglas。 Ben G. Clothier 是芝加哥首屈一指的Access 和SQL Server 开发企业IT Impact 公 司的解决方案架构师。他曾在著名的J Street Technology 和Advisicon 公司做过自由顾问,主要从事从小型个人解决方案到公司全业务应用程序Access 项目的相关工作。值得注意的项目包括:一家水泥公司的工作跟踪和库存管理系统、给保险商使用的医疗保险计划生成器以及国际航运公司的订单管理系统。Ben 在UtterAccess 是系统管理员, 并且和Teresa Hennig、George Hepworth、Doug Yudovich 合著了Professional Access? 2013 Programming(Wiley,2013 年);并与Tim Runcie 和George Hepworth 一起合著了Microsoft? Access in a SharePoint World(Advisicon,2011 年);Ben 还是Microsoft? Access? 2010 Programmer’s Reference(Wiley,2010 年)一书的特约作者。他拥有微软SQL Server 2012 解决方案认证和MySQL 5 认证开发者等证书。从2009 年开始Ben 一直是微软的最 有价值专家(MVP)。 Ben 和他的妻子Suzanne、儿子Harry 住在美国得克萨斯州的圣安东尼奥。 关于技术编辑 Richard Anthony Broersma Jr. 是Mangan 公司(美国加利福尼亚州长滩市)的系统工程师, 他有11 年的PostgreSQL 数据库应用程序开发经验。 Craig S. Mullins 是一位数据管理战略家、研究员和顾问。他是Mullins Consulting 公司的 总裁兼首席顾问,Craig 被IBM 任命为IBM 金牌顾问和IBM 首席分析师。Craig 在各类数据 库系统开发方面拥有超过30 年的经验,从DB2 的第一个版本开始他就在使用。你可能会通 过Craig 的畅销书知道他:DB2 Developer’s Guide, Sixth Edition(IBM,2012 年)和Database Administration: The Complete Guide to DBA Practices and Procedures, Second Edition(Addison-Wesley,2012 年)。 Vivek Sharma 目前是甲骨文公司的Oracle 核心技术与混合云解决方案部门的特邀技术专 家。他在Oracle 技术方面有着超过15 年的工作经验,Vivek 在Oracle 公司开始了自己的职业生 涯,在成为全职Oracle 数据库性能架构师之前,他的主要工作是Oracle 报表系统的开发。作为 Oracle 数据库专家,Vivek 大部分时间在帮助客户获得最佳的Oracle 系统并确保用户在数据库 方面的投资是值得的,他还是著名的甲骨文精英工程交换和服务器技术合作项目的成员。他在 2012 年和2015 年间成为甲骨文印度用户团体“年度发言人”。他会在他的博客viveklsharma. wordpress.com 以及OTN(www.oracle.com/technetwork/index.html)上发布相关的Oracle 数据库 技术文章。 Dave Stokes 是甲骨文公司的MySQL 社区经理。他以前曾是MySQL AB 和Sun 的MySQL 认证经理。他所工作的企业按字母顺序从美国心脏协会(American Heart Association)排到 施乐公司(Xerox),工作从反潜工作者(anti-submarine warfare)排到互联网开发者(Web developer)。 Morgan Tocker 是甲骨文公司MySQL 服务器的产品经理。他曾从事过各种工作,包括支持、 培训与社区工作。Morgan 定居于加拿大多伦多。 读者服务 轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。 ? 提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点 社区积分(在您购买电子书时,积分可用来抵扣相应金额)。 ? 交流互动:在页面下方读者评论处留下您的疑问或观点,与我们和其他读者一同学习交 流。 页面入口:http://www.broadview.com.cn/32284

目录

Introduction 1 A Brief History of SQL 1 Database Systems We Considered 5 Sample Databases 6 Where to Find the Samples on GitHub 7 Summary of the Chapters 8 Chapter 1: Data Model Design 11 Item 1: Verify That All Tables Have a Primary Key 11 Item 2: Eliminate Redundant Storage of Data Items 15 Item 3: Get Rid of Repeating Groups 19 Item 4: Store Only One Property per Column 21 Item 5: Understand Why Storing Calculated Data Is Usually a Bad Idea 25 Item 6: Define Foreign Keys to Protect Referential Integrity 30 Item 7: Be Sure Your Table Relationships Make Sense 33 Item 8: When 3NF Is Not Enough, Normalize More 37 Item 9: Use Denormalization for Information Warehouses 43 Chapter 2: Programmability and Index Design 47 Item 10: Factor in Nulls When Creating Indexes 47 Item 11: Carefully Consider Creation of Indexes to Minimize Index and Data Scanning 52 Item 12: Use Indexes for More than Just Filtering 56 Item 13: Don’t Go Overboard with Triggers 61 Item 14: Consider Using a Filtered Index to Include or Exclude a Subset of Data 65 Item 15: Use Declarative Constraints Instead of Programming Checks 68 Item 16: Know Which SQL Dialect Your Product Uses and Write Accordingly 70 Item 17: Know When to Use Calculated Results in Indexes 74 Chapter 3: When You Can’t Change the Design 79 Item 18: Use Views to Simplify What Cannot Be Changed 79 Item 19: Use ETL to Turn Nonrelational Data into Information 85 Item 20: Create Summary Tables and Maintain Them 90 Item 21: Use UNION Statements to “Unpivot” Non-normalized Data 94 Chapter 4: Filtering and Finding Data 101 Item 22: Understand Relational Algebra and How It Is Implemented in SQL 101 Item 23: Find Non-matches or Missing Records 108 Item 24: Know When to Use CASE to Solve a Problem 110 Item 25: Know Techniques to Solve Multiple-Criteria Problems 115 Item 26: Divide Your Data If You Need a Perfect Match 120 Item 27: Know How to Correctly Filter a Range of Dates on a Column Containing Both Date and Time 124 Item 28: Write Sargable Queries to Ensure That the Engine Will Use Indexes 127 Item 29: Correctly Filter the “Right” Side of a “Left” Join 132 Chapter 5: Aggregation 135 Item 30: Understand How GROUP BY Works 135 Item 31: Keep the GROUP BY Clause Small 142 Item 32: Leverage GROUP BY/HAVING to Solve Complex Problems 145 Item 33: Find Maximum or Minimum Values Without Using GROUP BY 150 Item 34: Avoid Getting an Erroneous COUNT() When Using OUTER JOIN 156 Item 35: Include Zero-Value Rows When Testing for HAVING COUNT(x) < Some Number 159 Item 36: Use DISTINCT to Get Distinct Counts 163 Item 37: Know How to Use Window Functions 166 Item 38: Create Row Numbers and Rank a Row over Other Rows 169 Item 39: Create a Moving Aggregate 172 Chapter 6: Subqueries 179 Item 40: Know Where You Can Use Subqueries 179 Item 41: Know the Difference between Correlated and Non-correlated Subqueries 184 Item 42: If Possible, Use Common Table Expressions Instead of Subqueries 190 Item 43: Create More Efficient Queries Using Joins Rather than Subqueries 197 Chapter 7: Getting and Analyzing Metadata 201 Item 44: Learn to Use Your System’s Query Analyzer 201 Item 45: Learn to Get Metadata about Your Database 212 Item 46: Understand How the Execution Plan Works 217 Chapter 8: Cartesian Products 227 Item 47: Produce Combinations of Rows between Two Tables and Flag Rows in the Second That Indirectly Relate to the First 227 Item 48: Understand How to Rank Rows by Equal Quantiles 231 Item 49: Know How to Pair Rows in a Table with All Other Rows 235 Item 50: Understand How to List Categories and the Count of First, Second, or Third Preferences 240 Chapter 9: Tally Tables 247 Item 51: Use a Tally Table to Generate Null Rows Based on a Parameter 247 Item 52: Use a Tally Table and Window Functions for Sequencing 252 Item 53: Generate Multiple Rows Based on Range Values in a Tally Table 257 Item 54: Convert a Value in One Table Based on a Range of Values in a Tally Table 261 Item 55: Use a Date Table to Simplify Date Calculation 268 Item 56: Create an Appointment Calendar Table with All Dates Enumerated in a Range 275 Item 57: Pivot Data Using a Tally Table 278 Chapter 10: Modeling Hierarchical Data 285 Item 58: Use an Adjacency List Model as the Starting Point 286 Item 59: Use Nested Sets for Fast Querying Performance with Infrequent Updates 288 Item 60: Use a Materialized Path for Simple Setup and Limited Searching 291 Item 61: Use Ancestry Traversal Closure for Complex Searching 294 Appendix: Date and Time Types, Operations, and Functions 299 IBM DB2 299 Microsoft Access 303 Microsoft SQL Server 305 MySQL 308 Oracle 313 PostgreSQL 315 Index 317

作者简介

影印版,无译者__eol__………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个