SQL Cookbook中文版
✍ Scribed by 莫利纳罗 著
- Publisher
- 清华大学出版社
- Year
- 2007
- Tongue
- Chinese
- Leaves
- 515
- Category
- Library
No coin nor oath required. For personal study only.
✦ Synopsis
SQL 是计算机世界的语言,在用关系数据库开发报表时,将数据放入数据库以及从数据库中取出来,都需要SQL 的知识。很多人以一种马马虎虎的态度在使用SQL,根本没有意识到自己掌握着多么强大的武器。本书的目的是打开读者的视野,看看SQL 究竟能干什么,以改变这种状况。
本书是一本指南,其中包含了一系列SQL 的常用问题以及它们的解决方案,希望能对读者的日常工作有所帮助。本书将相关主题的小节归成章,如果读者遇到不能解决的SQL 新问题,可以先找到最可能适用的章,浏览其中各小节的标题,希望读者能从中找到解决方案,至少可以找到点灵感。
在这本书中有150 多个小节,这还仅仅是SQL 所能做的事情的一鳞半爪。解决日常编程问题的解决方案的数量仅取决于需要解决的问题的数量,本书没有覆盖所有问题,事实上也不可能覆盖;然而从中可以找到许多共同的问题及其解决方案,这些解决...
SQL 是计算机世界的语言,在用关系数据库开发报表时,将数据放入数据库以及从数据库中取出来,都需要SQL 的知识。很多人以一种马马虎虎的态度在使用SQL,根本没有意识到自己掌握着多么强大的武器。本书的目的是打开读者的视野,看看SQL 究竟能干什么,以改变这种状况。
本书是一本指南,其中包含了一系列SQL 的常用问题以及它们的解决方案,希望能对读者的日常工作有所帮助。本书将相关主题的小节归成章,如果读者遇到不能解决的SQL 新问题,可以先找到最可能适用的章,浏览其中各小节的标题,希望读者能从中找到解决方案,至少可以找到点灵感。
在这本书中有150 多个小节,这还仅仅是SQL 所能做的事情的一鳞半爪。解决日常编程问题的解决方案的数量仅取决于需要解决的问题的数量,本书没有覆盖所有问题,事实上也不可能覆盖;然而从中可以找到许多共同的问题及其解决方案,这些解决方案中用到许多技巧,读者学到这些技巧就可以将它们扩展并应用到本书不可能覆盖的其他新问题上。
毫无疑问,本书的目标是让读者看到,SQL 能够做多少一般认为是SQL 问题范围之外的事情。在过去的10 年间,SQL 走过了很长的路,许多过去只能用C 和JAVA等过程化语言解决的典型问题现在都可以直接用SQL 解决了,但是很多开发人员并没有意识到这一事实。本书就是要帮助大家认识到这一点。
现在,在对我刚才的话产生误解之前我先要申明:我是“如果没坏,就别去修它”这一教义的忠实信徒。例如,假如你有一个特定的业务问题要解决,目前只用SQL检索数据,而其他复杂的业务逻辑由其他语言完成,如果代码没有问题,而且性能也过得去,那么,谢天谢地。我绝对无意建议你扔掉以前的代码重新寻求完全SQL 的解决方案;我只是请你敞开思想,认识到1995 年编程用的SQL 跟2005 年用的不是一回事,今天的SQL 能做的事要多得多。
✦ Table of Contents
前言
第1章 检索记录
1.1 从表中检索所有行和列
1.2 从表中检索部分行
1.3 查找满足多个条件的行
1.4 从表中检索部分列
1.5 为列取有意义的名称
1.6 在WHERE子句中引用取别名的列
1.7 连接列值
1.8 在SELECT语句中使用条件逻辑
1.9 限制返回的行数
1.10 从表中随机返回n条记录
1.11 查找空值
1.12 将空值转换为实际值
1.13 按模式搜索
第2章 查询结果排序
2.1 以指定的次序返回查询结果
2.2 按多个字段排序
2.3 按子串排序
2.4 对字母数字混合的数据排序
2.5 处理排序空值
2.6 根据数据项的键排序
第3章 操作多个表
3.1 记录集的叠加
3.2 组合相关的行
3.3 在两个表中查找共同行
3.4 从一个表中查找另一个表没有的值
3.5 在一个表中查找与其他表不匹配的记录
3.6 向查询中增加联接而不影响其他联接
3.7 检测两个表中是否有相同的数据
3.8 识别和消除笛卡儿积
3.9 聚集与联接
3.10 聚集与外联接
3.11 从多个表中返回丢失的数据
3.12 在运算和比较时使用NULL值
第4章 插入、更新与删除
4.1 插入新记录
4.2 插入默认值
4.3 使用NULL代替默认值
4.4 从一个表向另外的表中复制行
4.5 复制表定义
4.6 一次向多个表中插入记录
4.7 阻止对某几列插入
4.8 在表中编辑记录
4.9 当相应行存在时更新
4.10 用其他表中的值更新
4.11 合并记录
4.12 从表中删除所有记录
4.13 删除指定记录
4.14 删除单个记录
4.15 删除违反参照完整性的记录
4.16 删除重复记录
4.17 删除从其他表引用的记录
第5章 元数据查询
5.1 列出模式中的表
5.2 列出表的列
5.3 列出表的索引列
5.4 列出表约束
5.5 列出没有相应索引的外键
5.6 使用SQL来生成SQL
5.7 在Oracle中描述数据字典视图
第6章 使用字符串
6.1 遍历字符串
6.2 字符串文字中包含引号
6.3 计算字符在字符串中出现的次数
6.4 从字符串中删除不需要的字符
6.5 将字符和数字数据分离
6.6 判别字符串是不是字母数字型的
6.7 提取姓名的大写首字母缩写
6.8 按字符串中的部分内容排序
6.9 按字符串中的数值排序
6.10 根据表中的行创建一个分隔列表
6.11 将分隔数据转换为多值IN列表
6.12 按字母顺序排列字符串
6.13 判别可作为数值的字符串
6.14 提取第n个分隔的子串
6.15 分解IP地址
第7章 使用数字
7.1 计算平均值
7.2 求某列中的最小/最大值
7.3 对某列的值求和
7.4 求一个表的行数
7.5 求某列值的个数
7.6 生成累计和
7.7 生成累乘积
7.8 计算累计差
7.9 计算模式
7.10 计算中间值
7.11 求总和的百分比
7.12 对可空列作聚集
7.13 计算不包含最大值和最小值的均值
7.14 把字母数字串转换为数值
7.15 更改累计和中的值
第8章 日期运算
8.1 加减日、月、年
8.2 计算两个日期之间的天数
8.3 确定两个日期之间的工作日数目
8.4 确定两个日期之间的月份数或年数
8.5 确定两个日期之间的秒、分、小时数
8.6 计算一年中周内各日期的次数
8.7 确定当前记录和下一条记录之间相差的天数
第9章 日期操作
9.1 确定一年是否为闰年
9.2 确定一年内的天数
9.3 从日期中提取时间的各部分
9.4 确定某个月的第一天和最后一天
9.5 确定一年内属于周内某一天的所有日期
9.6 确定某月内第一个和最后一个“周内某天”的日期
9.7 创建日历
9.8 列出一年中每个季度的开始日期和结束日期
9.9 确定某个给定季度的开始日期和结束日期
9.10 填充丢失的日期
9.11 按照给定的时间单位进行查找
9.12 使用日期的特殊部分比较记录
9.13 识别重叠的日期范围
第10章 范围处理
10.1 定位连续值的范围
10.2 查找同一组或分区中行之间的差
10.3 定位连续值范围的开始点和结束点
10.4 补充范围内丢失的值
10.5 生成连续数字值
第11章 高级查找
11.1 给结果集分页
11.2 跳过表中n行
11.3 在外联接中用OR逻辑
11.4 确定哪些行是彼此互换的
11.5 选择前n个记录
11.6 找到包含最大值和最小值的记录
11.7 存取“未来”行
11.8 轮换行值
11.9 给结果分等级
11.10 抑制重复
11.11 找到骑士值
11.12 生成简单的预测
第12章 报表和数据仓库运算
12.1 将结果集转置为一行
12.2 把结果集转置为多行
12.3 反向转置结果集
12.4 将结果集反向转置为一列
12.5 抑制结果集中的重复值
12.6 转置结果集以利于跨行计算
12.7 创建固定大小的数据桶
12.8 创建预定数目的桶
12.9 创建横向直方图
12.10 创建纵向直方图
12.11 返回未包含在GROUP BY中的列
12.12 计算简单的小计
12.13 计算所有表达式组合的小计
12.14 判别非小计的行
12.15 使用Case表达式给行做标记
12.16 创建稀疏矩阵
12.17 按时间单位给行分组
12.18 对不同组/分区同时实现聚集
12.19 对移动范围的值进行聚集
12.20 转置带小计的结果集
第13章 分层查询
13.1 表示父-子关系
13.2 表示子-父-祖父关系
13.3 创建表的分层视图
13.4 为给定父行找到所有子行
13.5 确定哪些行是叶节点、分支节点及根节点
第14章 若干另类目标
14.1 使用SQL Server的PIVOT运算符创建交叉表报表
14.2 使用SQL Server的UNPIVOT运算符反转置交叉表报表
14.3 使用Oracle的MODEL子句转换结果集
14.4 从不固定位置提取字符串的元素
14.5 求一年包含的天数(Oracle的另一种解决方案)
14.6 搜索字母数字混合的字符串
14.7 使用Oracle把整数转换为二进制数
14.8 转置已分等级的结果集
14.9 给两次转置的结果集增加列头
14.10 在Oracle中把标量子查询转换为复合子查询
14.11 把连续数据分解为行
14.12 计算相对于总数的百分数
14.13 从Oracle创建CSV格式输出
14.14 找到与模式不匹配的文本(Oracle)
14.15 用内联视图转换数据
14.16 测试一个组内是否存在某个值
附录A 窗口函数补充
附录B 回顾Rozenshtein
📜 SIMILAR VOLUMES
书签已装载, 书签制作方法请找 [email protected] 完全免费