Effective SQL:编写高质量SQL语句的61个有效方法 pdf

Effective SQL:编写高质量SQL语句的61个有效方法

内容简介

本书结合SQL实践与实际案例,整合了实用的解决方案与洞见,可帮助大家解决复杂的问题,设计出能简化数据管理的数据库。作者拥有担任世界数据库顾问与讲师的丰富经验,在本书中归纳了编写高质量SQL语句的61个具体方法,并提供不同SQL版本的差异详情,无论你使用何种SQL版本都能从中获益。书中提供了大量清晰、务实的解释,以及专家的建议与大量实用的代码。本书除了介绍语法之外,还会讨论数据库设计的佳实践、层次结构管理与元数据等议题。若你对SQL已经有基本的认识,本书将能帮助你成为解决SQL问题的专家。书中内容涵盖各种SQL版本:IBMDB2、MicrosoftAccess、MicrosoftSQLServer、MySQL、OracleDatabase与PostgreSQL。

作者简介

John L. Viescas 是一位拥有超过45年工作经验的独立数据库顾问。他初是一名系统分析师,曾为IBM大型机系统设计过大规模的数据库应用程序。他在德克萨斯州达拉斯做过6年的数据研究工作,在那里,他带领着一个超过30人的团队,负责IBM大型机数据库产品的研究、开发与客户支持工作。在达拉斯做数据研究期间,John完成了他在德克萨斯大学达拉斯分校的商业与金融学专业的学业,并以优异的成绩获得该专业的学士学位。

目录

本书赞誉

译者序

前言

致谢

关于作者

关于技术编辑

第1章 数据模型设计1

第1条:确保所有表都有主键1

第2条:避免存储冗余数据4

第3条:消除重复数据组7

第4条:每列只存储一个属性9

第5条:理解为什么存储计算列通常有害无益13

第6条:定义外键以确保引用完整性16

第7条:确保表间关系的合理性19

第8条:当第三范式不够时,采用更多范式22

第9条:非规范化数据仓库27

第2章 可编程性与索引设计30

第10条:创建索引时空值的影响30

第11条:创建索引时谨慎考虑以最小化索引和数据扫描35

第12条:索引不只是过滤37

第13条:不要过度使用触发器41

第14条:使用过滤索引包含或排除数据子集45

第15条:使用声明式约束替代编码校验47

第16条:了解数据库使用的SQL方言并编写相应的代码48

第17条:了解何时在索引中使用计算结果51

第3章 当你不能改变设计时55

第18条:使用视图来简化不能更改的内容55

第19条:使用ETL将非关系数据转换为有用的信息60

第20条:创建汇总表并维护64

第21条:使用UNION语句将非规范化数据列转行66

第4章 过滤与查找数据72

第22条:了解关系代数及其如何在SQL中实现72

第23条:查找不匹配或缺失的记录78

第24条:了解何时使用CASE解决问题79

第25条:了解解决多条件查询的技术83

第26条:如需完美匹配,先对数据进行除操作88

第27条:如何按时间范围正确地过滤日期和时间的列91

第28条:书写可参数化搜索的查询以确保引擎使用索引94

第29条:正确地定义“左”连接的“右”侧97

第5章 聚合100

第30条:理解GROUP BY的工作原理100

第31条:简化GROUP BY子句106

第32条:利用GROUP BY或HAVING解决复杂的问题109

第33条:避免使用GROUP BY来查找最大值或最小值113

第34条:使用OUTER JOIN时避免获取错误的COUNT()117

第35条:测试HAVING COUNT(x) <某数时包含零值记录121

第36条:使用DISTINCT获取不重复的计数123

第37条:知道如何使用窗口函数126

第38条:创建行号与排名129

第39条:创建可移动聚合函数131

第6章 子查询136

第40条:了解在何处使用子查询136

第41条:了解关联和非关联子查询的差异140

第42条:尽可能使用公共表表达式而不是子查询145

第43条:使用连接而非子查询创建更高效的查询151

第7章 获取与分析元数据154

第44条:了解如何使用系统的查询分析器154

第45条:学习获取数据库的元数据164

第46条:理解执行计划的工作原理168

第8章 笛卡儿积175

第47条:生成两张表所有行的组合并标示一张表中间接关联另一张表的列175

第48条:理解如何以等分量排名177

第49条:知道如何对表中的行配对181

第50条:理解如何列出类别与前三偏好185

第9章 计数表189

第51条:根据计数表内定义的参数生成空行189

第52条:使用计数表和窗口函数生成序列193

第53条:根据计数表内定义的范围生成行196

第54条:根据计数表定义的值范围转换某个表中的值199

第55条:使用日期表简化日期计算205

第56条:创建在某个范围内所有日期的日程表209

第57条:使用计数表行转列212

第10章 层次数据建模217

第58条:从邻接列表模型开始218

第59条:对不常更新的数据使用嵌套集以提升查询性能220

第60条:使用存储路径简化设置与搜索222

第61条:使用祖先遍历闭包做复杂搜索224

附录 日期与时间类型、运算符和函数228

感悟与笔记

数据库设计

确保所有表都有主键

避免存储冗余数据

  • 数据库规范化的目标是消除冗余数据,并在处理数据时最小化资源消耗
  • 通过消除冗余数据,避免插入、更新和删除时出现异常
  • 通过消除冗余数据,尽量减少数据的不一致性

消除重复数据组

每列只存储一个属性

当表包含多列时,搜索和分组即使可能做到,也会极其困难

理解为什么存储计算列通常有害无益

  • 许多数据库系统允许在创建表时定义计算列,但应该注意性能影响,特别是在使用非确定性表达式和函数的时候
  • 可以像定义普通列一样定义计算列,然后使用触发器来维护,但编写出触发器代码可能会很复杂,且影响性能
  • 计算列会对数据库系统产生额外的开销,只有利大于弊的时候才考虑使用它
  • 希望在计算列上创建一个索引,以小号更多的存储空间和较慢的更新作为交换,获得一些便利性
  • 当不能使用索引时,使用视图来做计算通常可以替代表里创建计算列

定义外键以确保引用完整性

  • 外键明显有助于保证相关表之间的数据完整性
  • 表中存在违反约束的数据,向表中添加约束将会失败
  • 部分数据库创建外键会自动创建索引,提高连接查询性能

确保表间关系的合理性

当第三范式不够用时,采用更多范式

会员免费下载

链接:https://pan.baidu.com/s/1RE5ydPrJYfqbBQjbpFi9FA

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

其他OracleSQL ServerMySQLPostgreSQL

资源推荐

Oracle数据库性能优化方法论和最佳实践

Oracle数据库管理从入门到精通

Oracle PL/SQL DBA编程入门

高性能MySQL(第3版)

Oracle PLSQL性能调优诀窍与方法

MySQL王者晋级之路

数据库系统导论(原书第8版)

PostgreSQL实战

Copyright © 2021-2022 知识猫. All Rights Reserved.