重磅推荐
【产品特色】


【编辑推荐】

1.进阶中级实用指南!160张图表 412段代码,掌握面向集合思维,发掘SQL常见技术的新用法

2.基于标准SQL编写,示例程序均可下载

3.深入浅出,示例丰富,转变面向过程语言思维定式,切实提升SQL编程水平

4.解析经典文献,导入逻辑学与集合论,深刻理解SQL底层逻辑

5.基于各DBMS新版本新升级,内容更新更全面,详解现代SQL新功能


【内容简介】

本书是热销书《SQL基础教程》的作者MICK为志在向中级进阶的数据库工程师编写的一本SQL技能提升指南。全书可分为两大部分。部分介绍了SQL语言不同寻常的使用技巧,带领读者重新认识CASE表达式、窗口函数、自连接、EXISTS谓词、HAVING子句、外连接、行间比较、集合运算、数列处理等SQL常用技术,发掘它们的新用法。这部分不仅穿插讲解了这些技巧背后的逻辑和相关知识,而且辅以丰富的示例程序,旨在帮助读者从面向过程的思维方式转换为面向集合的思维方式。第二部分介绍了关系数据库的发展史,并从集合论和逻辑学的角度讲述了SQL和关系模型的理论基础,旨在帮助读者加深对SQL语言和关系数据库的理解。此外,本书很多节的末尾设置有练习题,并在书末提供了解答,方便读者检验自己对书中知识点的掌握程度。


【作者简介】

MICK(作者) 日本资历深厚的数据库工程师,就职于某系统集成商,致力于数据仓库和商业智能的开发。日常除了在其个人主页“关系数据库的世界”中分享数据库和SQL的相关技术信息外,还为翔泳社的网络媒体CodeZine和日本IT技术杂志WEB DB PRESS撰写技术文章,同时还是《SQL解惑(第2版)》和《SQL权威指南(第4版)》日文版的译者 吴炎昌(译者) 毕业于西北工业大学软件工程专业。曾供职于日本多家软件公司,从事系统开发工作。2015年回国后加入美团点评,现任系统研发工程师。爱好旅行、电影,以及品尝各种美食,有一位志趣相投的伴侣。 侯振龙(译者) 管理科学与工程专业硕士,日语一级,软件开发工程师,具有十年以上对日软件开发经验,现就职于某日本独资企业。


【目录】

第 1章 神奇的SQL 1



1-1 CASE表达式 2

在SQL里表达条件分支

写在前面 2

CASE表达式的写法 2

将已有编号方式转换为新的方式并统计 4

用一条SQL语句进行多条件统计 7

用CHECK约束定义多个列的条件关系 11

在UPDATE语句里进行条件分支 12

表之间的数据匹配 15

在CASE表达式中使用聚合函数 17

本节小结 20

练习题 22



1-2 必知必会的窗口函数 25

顺序编程的复活

什么是窗口 26

一张图看懂窗口函数 27

使用帧子句将其他行移至当前行 29

窗口函数的内部动作 34

本节小结 37

练习题 39



1-3 自连接的用法 41

从物理到逻辑的跳跃

可重排列、排列、组合 41

删除重复行 45

查找局部不一致的列 48

本节小结 50

练习题 55



1-4 三值逻辑和NULL 56

SQL的温柔陷阱

写在前面 56

理论篇 57

实践篇 61

本节小结 71

练习题 78



1-5 EXISTS 谓词的用法 79

SQL中的谓词逻辑

写在前面 79

理论篇 79

实践篇 85

本节小结 95

练习题 96



1-6 HAVING 子句的力量 99

将世界看作集合

寻找缺失的编号 99

用HAVING 子句进行子查询:求众数 105

查询不包含NULL 的集合 107

特征函数的应用 110

使用HAVING 语句表达全称量化 113

单重集合与多重集合 116

用关系除法运算进行购物篮分析 120

本节小结 123

练习题 128



1-7 用窗口函数进行行间比较 130

告别关联子查询

写在前面 130

增加、减少、没有变化 130

时间轴有间断时:和过去临近的时间进行比较 135

窗口函数与关联子查询 137

查询重叠的时间区间 140

本节小结 145

练习题 145



1-8 外连接的用法 147

SQL的弱点及其趋势和对策

写在前面 147

用外连接进行行列转换(1)(行→列):制作交叉表 147

用外连接进行行列转换(2)(列→行):汇总重复项于一列 151

在交叉表里制作嵌套式表侧栏 153

作为乘法运算的连接 158

全外连接 160

用外连接进行集合运算 163

用外连接求差集:A - B 163

用外连接求差集:B - A 164

用全外连接求异或集 165

本节小结 166

练习题 168



1-9 用SQL 进行集合运算 170

SQL和集合论

写在前面 170

导入篇:集合运算的几个注意事项 170

比较表和表:检查集合相等性之基础篇 172

比较表和表:检查集合相等性之进阶篇 175

用差集实现关系除法运算 177

寻找相等的子集 180

用于删除重复行的高效SQL 183

本节小结 185

练习题 187



1-10 用SQL 处理数列 188

用SQL 处理有序数据——集大成

写在前面 188

生成连续编号 188

求全部的缺失编号 192

3 个人能坐得下吗 194

有换排的数列 197

单调递增和单调递减 199

本节小结 202

练习题 204



1-11 让SQL 飞起来 205

简单的SQL性能优化

写在前面 205

使用高效的查询 205

避免排序 208

真的用到索引了吗 213

减少中间表 216

本节小结 218



1-12 SQL 编程方法 220

确立SQL 的编程风格

写在前面 220

表的设计 222

编程的方针 223

SQL 编程方法 230

本节小结 234



第 2章 关系数据库的世界 237



2-1 关系数据库的近现代史 238

数据库有过两次破坏性创新吗

关系数据库的历史 238

破坏性创新会重复吗 243

NoSQL 的类型和解决方案 245

性能问题的解决方案 245

本节小结 247



2-2 为什么叫“关系”模型 250

为什么不叫“表”模型

关系的定义 250

定义域的忧虑 253

关系值和关系变量 254

存在“关系的关系”吗 255



2-3 开始于关系,结束于关系 257

关于封闭世界的幸福

从运算角度审视集合 257

实践和原理 259



2-4 地址:巨大的怪物 261

为什么关系数据库里没有指针

写在前面 261

关系模型是为摆脱地址而生的 262

编程中泛滥的地址 263

不曾远去的老将——约翰·巴克斯的梦想 265



2-5 关于顺序的冒险 266

SQL的中心法则

迟来的主角 266

行应该有顺序吗 267



2-6 GROUP BY 和PARTITION BY 271

物以“类”聚

二者的区别 271



2-7 从面向过程思维向声明式思维、面向集合思维转变的7个关键点 276

画圆

写在前面 276

1. 用CASE 表达式代替IF 语句和CASE 语句。SQL 更像一种函数式语言 277

2. 用GROUP BY 和窗口函数代替循环 278

3. 表中的行没有顺序 279

4. 将表看成集合 280

5. 理解EXISTS 谓词和“量化”的概念 280

6. 学习HAVING 子句的真正价值 281

7. 不要画长方形,去画圆 282



2-8 人类的逻辑学 284

浅谈逻辑学的历史

适当地抛开命题的真假吧 284

逻辑学的革命 286

人类的逻辑学 287



2-9 SQL 和递归集合 288

SQL和集合论的紧密关系

实际工作中的递归集合 288

冯·诺依曼的前辈们 288

数是什么 290

SQL 的魔术与科学 293



2-10 消灭NULL 委员会 294

全世界的数据库工程师团结起来

表明决心:告全体数据库工程师书 294

为什么NULL 如此惹人讨厌 294

并不能完全消除NULL 296

编号:使用异常编号 297

名字:使用“无名氏” 297

数值:用0 代替 298

日期:用值或小值代替 298

本节小结 299

2-11 SQL 中的层级 300

严格的等级社会

谓词逻辑中的层级、集合论中的层级 300

为什么聚合后不能再引用原表中的列 300

单元素集合也是集合 304



第3章 附录 307

3-1 习题解答 308

3-2 参考文献 331

SQL 整体 331

数据库设计 332

性能 333

集合论和谓词逻辑/三值逻辑 333

后记 335


返回顶部