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

🌙
手机阅读
本文目录结构

Effective SQL

内容简介

本书结合 SQL 实践与实际案例,整合了实用的解决方案与洞见,可帮助大家解决复杂的问题,设计出能简化数据管理的数据库。作者拥有担任世界数据库顾问与讲师的丰富经验,在本书中归纳了编写高质量 SQL 语句的 61 个具体方法,并提供不同 SQL 版本的差异详情,无论你使用何种 SQL 版本都能从中获益。

书中提供了大量清晰、务实的解释,以及专家的建议与大量实用的代码。本书除了介绍语法之外,还会讨论数据库设计的佳实践、层次结构管理与元数据等议题。若你对 SQL 已经有基本的认识,本书将能帮助你成为解决 SQL 问题的专家。

书中内容涵盖各种 SQL 版本:IBMDB2、MicrosoftAccess、MicrosoftSQLServer、MySQL、OracleDatabase 与 PostgreSQL。

目录

关于作者 关于技术编辑

第 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
  • 附录 日期与时间类型、运算符

AXIHE / 精选教程

浏览全部教程

HTML

CSS

JS

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

如果你加我的私人微信,麻烦写上您的 称呼,所在地区,职业,方便我备注,谢谢


本站的微信公众号

阿西河前端教程

Anbang

安邦的私人微信

微信号: yaolushan

Anbang

Bilibili(B站)

朱安邦

Anbang