![]()
内容推荐 本书是畅销书《SQL基础教程》的作者MICK为志在向中级进阶的数据库工程师编写的一本SQL技能提升指南。全书可分为两大部分。第一部分介绍了SQL语言不同寻常的使用技巧,带领读者重新认识CASE表达式、窗口函数、自连接、EXISTS谓词、HAVING子句、外连接、行间比较、集合运算、数列处理等SQL常用技术,发掘它们的新用法。这部分不仅穿插讲解了这些技巧背后的逻辑和相关知识,而且辅以丰富的示例程序,旨在帮助读者从面向过程的思维方式转换为面向集合的思维方式。第二部分介绍了关系数据库的发展史,并从集合论和逻辑学的角度讲述了SQL和关系模型的理论基础,旨在帮助读者加深对SQL语言和关系数据库的理解。此外,本书很多节的末尾设置有练习题,并在书末提供了解答,方便读者检验自己对书中知识点的掌握程度。 本书适合具有半年以上SQL使用经验、已掌握SQL基础知识和技能、希望提升自己编程水平的读者阅读。 作者简介 MICK,日本资深数据库工程师,就职于SI企业,致力于商业智能和数据仓库的开发。为CodeZine(http: //codezine.jp)及IT杂志WEB+DB PRESS撰写技术文章。著作有《跟达人学SQL》《跟达人学DB设计》,是Joe Celko&apos's SQL Puzzles and Answers,Second Edition、Joe Celko&apos's SQL for Smarties,Fourth Edition: Advanced SQL Programming的日文版的译者。 目录 第1章 神奇的SQL 1-1 CASE表达式 在SQL里表达条件分支 写在前面 CASE表达式的写法 将已有编号方式转换为新的方式并统计 用一条SQL语句进行多条件统计 用CHECK约束定义多个列的条件关系 在UPDATE语句里进行条件分支 表之间的数据匹配 在CASE表达式中使用聚合函数 本节小结 练习题 1-2 必知必会的窗口函数 顺序编程的复活 什么是窗口 一张图看懂窗口函数 使用帧子句将其他行移至当前行 窗口函数的内部动作 本节小结 练习题 1-3 自连接的用法 从物理到逻辑的跳跃 可重排列、排列、组合 删除重复行 查找局部不一致的列 本节小结 练习题 1-4 三值逻辑和NULL SQL的温柔陷阱 写在前面 理论篇 实践篇 本节小结 练习题 1-5 EXISTS谓词的用法 SQL中的谓词逻辑 写在前面 理论篇 实践篇 本节小结 练习题 1-6 HAVING子句的力量 将世界看作集合 寻找缺失的编号 用HAVING子句进行子查询:求众数 查询不包含NULL的集合 特征函数的应用 使用HAVING语句表达全称量化 单重集合与多重集合 用关系除法运算进行购物篮分析 本节小结 练习题 1-7 用窗口函数进行行间比较 告别关联子查询 写在前面 增加、减少、没有变化 时间轴有间断时:和过去最临近的时间进行比较 窗口函数与关联子查询 查询重叠的时间区间 本节小结 练习题 1-8 外连接的用法 SQL的弱点及其趋势和对策 写在前面 用外连接进行行列转换(1)(行→列):制作交叉表 用外连接进行行列转换(2)(列→行):汇总重复项于一列 在交叉表里制作嵌套式表侧栏 作为乘法运算的连接 全外连接 用外连接进行集合运算 用外连接求差集:A-B 用外连接求差集:B-A 用全外连接求异或集 本节小结 练习题 1-9 用SQL进行集合运算 SQL和集合论 写在前面 导入篇:集合运算的几个注意事项 比较表和表:检查集合相等性之基础篇 比较表和表:检查集合相等性之进阶篇 用差集实现关系除法运算 寻找相等的子集 用于删除重复行的高效SQL 本节小结 练习题 1-10 用SQL处理数列 用SQL 处理有序数据——集大成 写在前面 生成连续编号 求全部的缺失编号 3个人能坐得下吗 有换排的数列 单调递增和单调递减 本节小结 练习题 1-11 让SQL飞起来 简单的SQL性能优化 写在前面 使用高效的查询 避免排序 真的用到索引了吗 减少中间表 本节小结 1-12 SQL编程方法 确立SQL 的编程风格 写在前面 表的设计 编程的方针 SQL 编程方法 本节小结 第2章 关系数据库的世界 2-1 关系数据库的近现代史 数据库有过两次破坏性创新吗 关系数据库的历史 破坏性创新会重复吗 NoSQL 的类型和解决方案 性能问题的解决方案 本节小结 2-2 为什么叫“关系”模型 为什么不叫“表”模型 关系的定义 定义域的忧虑 关系值和关系变量 存在“关系的关系”吗 2-3 开始于关系,结束于关系 关于封闭世界的幸福 从运算角度审视集合 实践和原理 2-4 地址:巨大的怪物 为什么关系数据库里没有指针 写在前面 关系模型是为摆脱地址而生的 编程中泛滥的地址 不曾远去的老将——约翰·巴克斯的梦想 2-5 关于顺序的冒险 SQL的中心法则 迟来的主角 行应该有顺序吗 2-6 GROUPBY和PARTITIONBY 物以“类”聚 二者的区别 2-7 从面向过程思维向声明式思维、面向集合思维转变的7个关键点 画圆 写在前面 1.用CASE表达式代替IF语句和CASE语句。SQL更像一种函数式语言 2.用GROUPBY和窗口函数代替循环 3.表中的行没有顺序 4.将表看成集合 5.理解EXISTS谓词和“量化”的概念 6.学习HAVING子句的真正价值 7.不要画长方形,去画圆 2-8 人类的逻辑学 浅谈逻辑学的历史 适当地抛开命题的真假吧 逻辑学的革命 人类的逻辑学 2-9 SQL和递归集合 SQL和集合论的紧密关系 实际工作中的递归集合 冯·诺依曼的前辈们 数是什么 SQL的魔术与科学 2-10 消灭NULL委员会 全世界的数据库工程师团结起来 表明决心:告全体数据库工程师书 为什么NULL如此惹人讨厌 并不能完全消除NULL 编号:使用异常编号 名字:使用“无名氏” 数值:用0代替 日期:用最大值或最小值代替 本节小 |